项目简介

'modelcontextprotocol-servers' 仓库是 Anthropic 维护的一个开源项目,旨在收集和展示 Model Context Protocol (MCP) 服务器的参考实现。该项目提供了一系列预构建的服务器,可以作为 LLM 客户端的后端,扩展 LLM 的能力,使其能够安全、受控地访问外部工具和数据源。每个服务器都专注于集成特定的外部服务或功能,例如文件系统操作、GitHub/GitLab 代码仓库管理、Google 云服务访问、数据库查询、网页抓取等。

主要功能点

  • 资源管理 (Resources): 提供对各种外部数据资源的访问能力,例如文件系统、Google Drive、数据库等。允许 LLM 客户端以标准化的方式读取和操作这些资源。
  • 工具注册与执行 (Tools): 集成多种实用工具,例如网页搜索、浏览器自动化、代码仓库操作、Slack 消息发送等。允许 LLM 客户端调用这些工具来执行外部功能,扩展其应用场景。
  • Prompt 模板 (Prompts): 部分服务器提供预定义的 Prompt 模板,例如 SQLite 服务器提供的 demo prompt,帮助用户快速开始与特定服务器的交互。
  • 多种传输协议支持: 服务器基于 MCP SDK 构建,默认支持 Stdio 传输协议,可以通过命令行直接运行,方便集成到各种 MCP 客户端。
  • 安全性与可扩展性: MCP 协议本身的设计注重安全性和可扩展性,这些服务器实现继承了这些特性,为 LLM 应用提供安全可靠的上下文服务框架。

安装步骤

该仓库本身不提供安装包,而是作为 MCP 服务器的集合。每个服务器都是一个独立的 NPM 包或 Python 包,需要单独安装和运行。

对于 Typescript 实现的服务器 (例如 Memory, Filesystem, GitHub, Google Maps, Brave Search, Puppeteer, PostgreSQL):

  1. 确保已安装 Node.js 和 npm。
  2. 使用 'npx' 命令可以直接运行,例如启动 Memory 服务器:
    npx -y @modelcontextprotocol/server-memory
    或 Filesystem 服务器 (需要指定允许访问的目录作为参数):
    npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/files

对于 Python 实现的服务器 (例如 Git, GitLab, Slack, Sentry, Fetch, SQLite):

  1. 确保已安装 Python 和 pip (推荐使用 uvx,安装指南见 uvx installation)。
  2. 使用 'uvx' 或 'pip' 安装并运行,例如启动 Git 服务器:
    # 使用 uvx (推荐)
    uvx mcp-server-git --repository path/to/git/repo
    
    # 使用 pip
    pip install mcp-server-git
    python -m mcp_server_git --repository path/to/git/repo
    或 GitLab 服务器 (需要设置环境变量 'GITLAB_PERSONAL_ACCESS_TOKEN'):
    # 使用 uvx (推荐)
    GITLAB_PERSONAL_ACCESS_TOKEN=<YOUR_TOKEN> uvx mcp-server-gitlab
    
    # 使用 pip
    pip install mcp-server-gitlab
    export GITLAB_PERSONAL_ACCESS_TOKEN=<YOUR_TOKEN>
    python -m mcp_server_gitlab

注意: 部分服务器 (例如 GitHub, GitLab, Google Maps, Brave Search, Slack, Sentry) 需要配置 API 密钥或访问令牌等环境变量,请参考每个服务器的 'README.md' 或代码注释进行配置。

服务器配置

要将这些 MCP 服务器集成到 MCP 客户端 (例如 Claude Desktop),需要在客户端的配置文件中进行配置。以下是一些示例配置,展示如何配置不同类型的服务器:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
      // 启动 Memory 服务器,无需额外参数
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
      // 启动 Filesystem 服务器,指定允许访问的根目录
    },
    "git": {
      "command": "uvx",
      "args": ["mcp-server-git", "--repository", "path/to/git/repo"]
      // 启动 Git 服务器,指定 Git 仓库路径
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
      // 启动 GitHub 服务器,需要配置 GitHub Personal Access Token 环境变量
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
      // 启动 PostgreSQL 服务器,指定数据库连接 URL
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "<YOUR_BRAVE_SEARCH_API_KEY>"
      }
      // 启动 Brave Search 服务器,需要配置 Brave Search API Key 环境变量
    },
    "google-maps": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-google-maps"],
      "env": {
        "GOOGLE_MAPS_API_KEY": "<YOUR_GOOGLE_MAPS_API_KEY>"
      }
      // 启动 Google Maps 服务器,需要配置 Google Maps API Key 环境变量
    },
    "slack": {
      "command": "uvx",
      "args": ["mcp-server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>",
        "SLACK_TEAM_ID": "<YOUR_SLACK_TEAM_ID>"
      }
      // 启动 Slack 服务器,需要配置 Slack Bot Token 和 Team ID 环境变量
    },
    "sentry": {
      "command": "uvx",
      "args": ["mcp-server-sentry"],
      "env": {
        "SENTRY_TOKEN": "<YOUR_SENTRY_AUTH_TOKEN>"
      }
      // 启动 Sentry 服务器,需要配置 Sentry Auth Token 环境变量
    },
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
      // 启动 Fetch 服务器,无需额外参数
    },
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
      // 启动 Puppeteer 服务器,无需额外参数
    },
    "sqlite": {
      "command": "uvx",
      "args": ["mcp-server-sqlite"]
      // 启动 SQLite 服务器,无需额外参数,默认使用 ./sqlite_mcp_server.db 数据库文件
    },
    "gdrive": {
      "command": "node",
      "args": ["index.js"],
      "cwd": "./path/to/gdrive/server" // 需要指向 gdrive 服务器代码目录,并先执行 'npm install' 和 'npm run build'
      // 启动 Google Drive 服务器,需要先进行 OAuth 认证 (运行 'node index.js auth') 并配置好 gcp-oauth.keys.json
    },
    "gitlab": {
      "command": "uvx",
      "args": ["mcp-server-gitlab"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
      // 启动 GitLab 服务器,需要配置 GitLab Personal Access Token 环境变量
    },
    "git": {
      "command": "uvx",
      "args": ["mcp-server-git"]
      // 启动 Git 服务器,无需额外参数,需要 MCP 客户端提供根目录信息
    }
  }
}

注意:

  • '"server name"': 客户端配置中服务器的名称,可以自定义,用于在客户端中标识和调用不同的服务器。
  • '"command"': 启动服务器的命令,例如 'npx', 'uvx', 'node', 'python' 等。
  • '"args"': 传递给启动命令的参数,例如服务器包名、目录路径、连接 URL 等。
  • '"env"': 可选的环境变量配置,用于传递 API 密钥、访问令牌等敏感信息。
  • '"cwd"': 可选的工作目录配置,用于指定命令执行的目录,例如 'gdrive' 服务器需要指定代码目录。

请根据实际需要配置相应的服务器,并确保命令和参数的正确性。

基本使用方法

  1. 启动 MCP 服务器: 根据服务器类型,使用 'npx' 或 'uvx'/'pip' 命令启动相应的 MCP 服务器。确保服务器成功运行并监听 Stdio。
  2. 配置 MCP 客户端: 编辑 MCP 客户端的配置文件 (通常是 JSON 格式),在 'mcpServers' 字段中添加服务器的配置信息,包括服务器名称、启动命令、参数和环境变量等。
  3. 连接客户端与服务器: 启动 MCP 客户端,客户端会根据配置文件自动连接到已配置的 MCP 服务器。
  4. 在客户端中使用工具和资源: 在 LLM 客户端中,可以通过工具调用或资源访问的方式来使用 MCP 服务器提供的功能。具体的工具和资源名称、参数和使用方法请参考每个服务器的描述信息。

关键词

LLM工具扩展, 上下文服务, 数据访问, 外部功能集成, 多协议支持

信息

分类

开发者工具