本项目是基于 Model Context Protocol (MCP) 的服务器和客户端示例代码库,使用 TypeScript SDK 构建。它展示了如何实现 MCP 服务器的核心功能,并通过不同的传输协议(Stdio, SSE, Streamable HTTP)与客户端进行通信,同时也包含了授权流程的示例。

主要功能点

  • MCP服务器实现: 包含多个可运行的 MCP 服务器示例。
  • 工具注册与调用: 服务器端实现工具(Tool)的注册和处理客户端发起的工具调用请求。
  • 通知发送: 服务器端能够向客户端发送通知,例如日志消息或工具列表变更通知。
  • 多种传输协议: 演示了基于 Stdio、Server-Sent Events (SSE) 和 Streamable HTTP 的 MCP 通信。
  • 授权机制示例: 包含一个遵循最新 MCP 授权规范的示例,展示了如何分离授权服务器和资源服务器,并实现 OAuth2 授权码流程。

安装步骤

  1. 确保您已安装 Node.js 环境。
  2. 克隆仓库到本地。
  3. 打开终端,进入仓库目录。
  4. 运行 'npm install' 安装项目依赖。
  5. 运行 'npm run build' 构建项目。构建后的可执行文件通常位于 'build/' 目录下。

服务器配置(客户端使用)

MCP 客户端需要知道如何连接到 MCP 服务器。配置方式取决于所使用的传输协议。以下是几种常见 MCP 服务器示例的配置方式:

  • Stdio 服务器 (例如 local(stdio)/server)

    • 服务器名称:'create-mcp-app' (这是示例中服务器声明的名称)
    • 连接类型:Stdio (标准输入输出)
    • 客户端配置需要提供启动服务器进程的命令 (command) 和其参数 (args)
    • 示例配置(JSON 格式,用于 MCP 客户端):
      {
          "mcpServers": {
              "create-mcp-app": {
                  "command": "node",
                  "args": [
                      "/绝对路径到你的本地仓库/local(stdio)/server/build/index.js"
                  ]
              }
          }
      }
      • '"create-mcp-app"': MCP 服务器的名称,客户端用此名称引用该服务器。
      • '"command"': 启动服务器进程的命令,此处为 'node'。
      • '"args"': 传递给命令的参数数组,此处是服务器构建后的入口文件的绝对路径。请将路径替换为您实际的本地路径。
  • Streamable HTTP 服务器 (例如 remote(StreamableHTTP)/server)

    • 服务器监听地址:'http://localhost:3000/mcp' (这是示例中的默认地址和路径)
    • 连接类型:HTTP (POST 用于请求,GET 用于流)
    • 客户端配置需要提供服务器的完整 URL
    • 示例配置(JSON 格式,用于 MCP 客户端):
      {
          "mcpServers": {
              "http-server": {
                  "url": "http://localhost:3000/mcp"
              }
          }
      }
      • '"http-server"': MCP 服务器的名称,可自定义。
      • '"url"': 服务器的完整 URL,包括协议、主机、端口和路径。
  • 带有授权的 Resource Server (例如 HTTP+Auth(RS:AS)/src/resourceServer)

    • 服务器监听地址:'http://localhost:3001/mcp' (这是示例中的默认地址和路径)
    • 连接类型:HTTP (带有 Bearer Token 授权头)
    • 此示例需要同时运行配套的 Authorization Server (默认在 'http://localhost:3000')。客户端需要支持 OAuth2 授权流程来获取 Access Token 并发送请求。
    • 客户端配置需要提供 Resource Server 的完整 URL,并通常需要提供 Authorization Server 的信息(通过 Resource Server 的 '/.well-known/oauth-protected-resource' 元数据发现)。
    • 示例配置(具体配置方式取决于客户端实现,可能类似 HTTP 服务器配置加上授权提供者):
      {
          "mcpServers": {
              "auth-http-server": {
                  "url": "http://localhost:3001/mcp",
                  "authProvider": "oauth2" // 示例,实际名称取决于客户端能力
              }
          }
      }
      • '"auth-http-server"': MCP 服务器的名称。
      • '"url"': Resource Server 的完整 URL。
      • '"authProvider"': 指示客户端使用何种授权机制连接。

基本使用方法

  1. 运行特定服务器示例:
    • 进入对应的服务器示例目录(例如 'remote(StreamableHTTP)/server')。
    • 运行 'node build/index.js' 或使用示例中提供的 'npm run dev:*' 命令(例如 'npm run dev:rs' 启动 Resource Server)。
    • 服务器启动后会监听指定的端口。
  2. 使用 MCP 客户端连接:
    • 配置您的 MCP 客户端(例如 Claude for Desktop 或其他自定义客户端)以连接到您启动的服务器地址,参照上述配置示例。
    • 客户端连接后,就可以发现服务器提供的工具,并尝试调用它们。例如,对于 local(stdio)/server 示例,客户端可以调用 'create-mcp-server-app' 工具。对于 Streamable HTTP 服务器示例,客户端可以列出工具并调用 'single-greet' 或 'multi-great' 工具。对于带授权的示例,客户端会引导完成授权流程后才能访问工具。
  3. 运行客户端示例: 仓库中也提供了配套的客户端示例。您可以进入对应的客户端示例目录(例如 'remote(StreamableHTTP)/client'),运行 'node build/index.js' 来启动客户端,连接到相应的服务器示例进行交互测试。

信息

分类

开发者工具