# 多服务协议中枢
## 基本信息
- Slug: `adampippert-multi-service-mcp-server`
- Source: modelscope
- Publisher: @AdamPippert/multi-service-mcp-server
- Categories: version-control / knowledge-and-memory / browser-automation
- Hosted: No
- License: Apache License 2.0
- Source URL: https://www.modelscope.cn/mcp/servers/@AdamPippert/multi-service-mcp-server
## 简介
一个实现模型上下文协议标准的模块化服务器，提供通过统一网关与GitHub、GitLab、Google地图、内存存储和网络自动化交互的工具。
## 安装提示

```bash
git clone https://github.com/yourusername/mcp-server.git cd mcp-server
```

## MCP Server 详情

# Model Context Protocol (MCP) 服务器

一个实现 [Model Context Protocol](https://modelcontextprotocol.io/) 标准的模块化服务器，提供用于 GitHub、GitLab、Google Maps、内存存储和 Puppeteer 网页自动化的工具。

## 架构

MCP 服务器采用模块化架构构建，每个工具都作为一个独立的模块实现。服务器提供了一个统一的网关，将请求路由到适当的工具。

![MCP 服务器架构](./architecture.png)

## 特性

- **MCP 网关**：遵循 MCP 标准的所有工具请求的统一端点
- **MCP 清单**：描述所有可用工具及其功能的端点
- **直接工具访问**：每个工具都可以通过其自己的 API 端点直接访问
- **模块化设计**：根据需要轻松添加或移除工具

### 包含的工具

1. **GitHub 工具**：与 GitHub 仓库、问题和搜索交互
2. **GitLab 工具**：与 GitLab 项目、问题和流水线交互
3. **Google 地图工具**：地理编码、路线规划和地点搜索
4. **内存工具**：持久地存储和检索数据
5. **Puppeteer 工具**：截图、生成 PDF 和从网站中提取内容

## 开始使用

### 前提条件

- Python 3.8 或更高版本
- Node.js 14 或更高版本
- 一个基于 Red Hat 的 Linux 发行版（RHEL、CentOS、Fedora）或任何 Linux/macOS 系统

### 安装

1. 克隆此仓库：
   ```bash
   git clone https://github.com/yourusername/mcp-server.git
   cd mcp-server
   ```

2. 安装 Python 依赖项：
   ```bash
   pip install -r requirements.txt
   ```

3. 安装 Node.js 依赖项：
   ```bash
   npm install
   ```

4. 创建一个包含配置的 `.env` 文件：
   ```
   SECRET_KEY=your-secret-key
   DEBUG=False
   
   # GitHub 配置
   GITHUB_TOKEN=your-github-token
   
   # GitLab 配置
   GITLAB_TOKEN=your-gitlab-token
   
   # Google 地图配置
   GMAPS_API_KEY=your-google-maps-api-key
   
   # 内存配置
   MEMORY_DB_URI=sqlite:///memory.db
   
   # Puppeteer 配置
   PUPPETEER_HEADLESS=true
   CHROME_PATH=/usr/bin/chromium-browser
   ```

5. 启动服务器：
   ```bash
   python app.py
   ```

### 容器化部署

您可以使用 Docker 或 Podman（Red Hat 的容器引擎）来运行服务器。

#### Docker 部署

如果您已经安装了 Docker 和 docker-compose：

1. 构建 Docker 镜像：
   ```bash
   docker build -t mcp-server .
   ```

2. 运行容器：
   ```bash
   docker run -p 5000:5000 --env-file .env mcp-server
   ```

3. 或者，使用 docker-compose：
   
   创建一个 `docker-compose.yml` 文件：
   ```yaml
   version: '3'
   services:
     mcp-server:
       build: .
       ports:
         - "5000:5000"
       volumes:
         - ./data:/app/data
       env_file:
         - .env
       restart: unless-stopped
   ```

   然后运行：
   ```bash
   docker-compose up -d
   ```

#### Podman 部署

对于基于 Red Hat 的系统（RHEL、CentOS、Fedora）使用 Podman：

1. 构建容器镜像：
   ```bash
   podman build -t mcp-server .
   ```

2. 运行容器：
   ```bash
   podman run -p 5000:5000 --env-file .env mcp-server
   ```

3. 如果需要持久化存储：
   ```bash
   mkdir -p ./data
   podman run -p 5000:5000 --env-file .env -v ./data:/app/data:Z mcp-server
   ```
   注意：在启用了 SELinux 的系统上，`-v` 参数后面的 `:Z` 后缀非常重要。

4. 使用 Podman Compose（如果已安装）：
   ```bash
   # 如有需要，安装 podman-compose
   pip install podman-compose
   
   # 使用与上述相同的 docker-compose.yml 文件
   podman-compose up -d
   ```

## 使用 MCP 服务器

### MCP 网关

MCP 网关是访问所有使用 MCP 标准工具的主要端点。

**端点**: `POST /mcp/gateway`

**请求格式**:
```json
{
  "tool": "github",
  "action": "listRepos",
  "parameters": {
    "username": "octocat"
  }
}
```


**响应格式**:
```json
{
  "tool": "github",
  "action": "listRepos",
  "status": "success",
  "result": [
    {
      "id": 1296269,
      "name": "Hello-World",
      "full_name": "octocat/Hello-World",
      "owner": {
        "login": "octocat",
        "id": 1
      },
      ...
    }
  ]
}
```


### MCP 清单

MCP 清单描述了所有可用工具及其功能。

**端点**: `GET /mcp/manifest`

**响应格式**:
```json
{
  "manifestVersion": "1.0",
  "tools": {
    "github": {
      "actions": {
        "listRepos": {
          "description": "List repositories for a user or organization",
          "parameters": {
            "username": {
              "type": "string",
              "description": "GitHub username or organization name"
            }
          },
          "returns": {
            "type": "array",
            "description": "List of repository objects"
          }
        },
        ...
      }
    },
    ...
  }
}
```


### 直接工具访问

每个工具也可以通过其自己的 API 端点直接访问：

- GitHub: `/tool/github/...`
- GitLab: `/tool/gitlab/...`
- Google 地图: `/tool/gmaps/...`
- 内存: `/tool/memory/...`
- Puppeteer: `/tool/puppeteer/...`

有关每个工具的可用端点的详细信息，请参阅 API 文档。

## 工具文档

### GitHub 工具

GitHub 工具提供了对仓库、问题和搜索的 GitHub API 访问。

**操作**:
- `listRepos`: 列出用户或组织的仓库
- `getRepo`: 获取特定仓库的详细信息
- `searchRepos`: 搜索仓库
- `getIssues`: 获取仓库的问题
- `createIssue`: 在仓库中创建新问题

### GitLab 工具

GitLab 工具提供了对项目、问题和流水线的 GitLab API 访问。

**操作**:
- `listProjects`: 列出认证用户可访问的所有项目
- `getProject`: 获取特定项目的详细信息
- `searchProjects`: 在 GitLab 上搜索项目
- `getIssues`: 获取项目的问题
- `createIssue`: 在项目中创建新问题
- `getPipelines`: 获取项目的流水线

### Google 地图工具

Google 地图工具提供了对地理编码、路线和地点搜索的 Google 地图 API 访问。

**操作**:
- `geocode`: 将地址转换为地理坐标
- `reverseGeocode`: 将地理坐标转换为地址
- `getDirections`: 获取两个地点之间的路线
- `searchPlaces`: 使用 Google Places API 搜索地点
- `getPlaceDetails`: 获取特定地点的详细信息

### 内存工具

内存工具提供了一个持久化的键值存储，用于存储和检索数据。

**操作**:
- `get`: 通过键获取内存项
- `set`: 创建或更新内存项
- `delete`: 通过键删除内存项
- `list`: 列出所有内存项，可选过滤
- `search`: 按值搜索内存项

### Puppeteer 工具

Puppeteer 工具提供了网页自动化功能，包括截屏、生成 PDF 以及从网站中提取内容。

**操作**:
- `screenshot`: 截取网页的屏幕截图
- `pdf`: 生成网页的 PDF
- `extract`: 从网页中提取内容

## 贡献

欢迎贡献！以下是您可以扩展 MCP 服务器的方法：

### 添加新工具

1. 在 `tools` 目录下创建一个新文件，例如 `tools/newtool_tool.py`
2. 按照现有工具的模式实现该工具及其操作
3. 将工具添加到 `app.py` 中的清单里
4. 在 `tools/__init__.py` 中注册工具的蓝图

## 许可证

本项目根据 MIT 许可证发布 - 详情请参阅 LICENSE 文件。

## 致谢

- [Model Context Protocol](https://modelcontextprotocol.io/) 提供标准规范
- [Flask](https://flask.palletsprojects.com/) 作为 Web 框架
- [Puppeteer](https://pptr.dev/) 用于网页自动化

