本项目是基于 Model Context Protocol (MCP) 的服务器和客户端示例代码库,使用 TypeScript SDK 构建。它展示了如何实现 MCP 服务器的核心功能,并通过不同的传输协议(Stdio, SSE, Streamable HTTP)与客户端进行通信,同时也包含了授权流程的示例。
主要功能点
- MCP服务器实现: 包含多个可运行的 MCP 服务器示例。
- 工具注册与调用: 服务器端实现工具(Tool)的注册和处理客户端发起的工具调用请求。
- 通知发送: 服务器端能够向客户端发送通知,例如日志消息或工具列表变更通知。
- 多种传输协议: 演示了基于 Stdio、Server-Sent Events (SSE) 和 Streamable HTTP 的 MCP 通信。
- 授权机制示例: 包含一个遵循最新 MCP 授权规范的示例,展示了如何分离授权服务器和资源服务器,并实现 OAuth2 授权码流程。
安装步骤
- 确保您已安装 Node.js 环境。
- 克隆仓库到本地。
- 打开终端,进入仓库目录。
- 运行 'npm install' 安装项目依赖。
- 运行 '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"': 指示客户端使用何种授权机制连接。
基本使用方法
- 运行特定服务器示例:
- 进入对应的服务器示例目录(例如 'remote(StreamableHTTP)/server')。
- 运行 'node build/index.js' 或使用示例中提供的 'npm run dev:*' 命令(例如 'npm run dev:rs' 启动 Resource Server)。
- 服务器启动后会监听指定的端口。
- 使用 MCP 客户端连接:
- 配置您的 MCP 客户端(例如 Claude for Desktop 或其他自定义客户端)以连接到您启动的服务器地址,参照上述配置示例。
- 客户端连接后,就可以发现服务器提供的工具,并尝试调用它们。例如,对于 local(stdio)/server 示例,客户端可以调用 'create-mcp-server-app' 工具。对于 Streamable HTTP 服务器示例,客户端可以列出工具并调用 'single-greet' 或 'multi-great' 工具。对于带授权的示例,客户端会引导完成授权流程后才能访问工具。
- 运行客户端示例: 仓库中也提供了配套的客户端示例。您可以进入对应的客户端示例目录(例如 'remote(StreamableHTTP)/client'),运行 'node build/index.js' 来启动客户端,连接到相应的服务器示例进行交互测试。
信息
分类
开发者工具