项目简介
'tmcp' 是一个用于构建Model Context Protocol (MCP) 服务器的轻量级框架。它提供标准化的接口,让LLM客户端能够访问和管理资源、调用工具以及渲染Prompt模板。'tmcp' 的设计理念是Schema无关,这意味着你可以通过适配器集成各种主流的Schema验证库(如Zod、Valibot等),以实现类型安全的输入和输出验证。它支持多种传输协议,包括STDIO、HTTP和SSE,以适应不同类型的应用场景。
主要功能点
- 上下文管理:托管和管理各种数据资源,LLM可以根据URI访问这些资源。
- 工具调用:注册外部功能作为工具,LLM可以调用这些工具执行特定任务。
- Prompt模板:定义可定制的Prompt模板,用于生成LLM交互内容。
- Schema无关:通过可插拔的适配器支持多种流行的Schema验证库,实现类型安全和数据验证。
- 多传输协议:原生支持STDIO (命令行/桌面应用)、HTTP (Web客户端) 和SSE (Web实时通信) 等传输方式。
- 会话管理:处理多个客户端会话,管理各自的状态和能力。
- 能力声明:服务器向客户端声明其支持的MCP功能。
安装步骤
- 初始化项目:
首先,确保你的环境中安装了Node.js和npm/pnpm/bun。在你的项目目录下,运行以下命令安装 'tmcp' 核心库和选择的Schema适配器:
pnpm install tmcp # 例如,如果你选择使用Zod作为Schema验证库: pnpm install @tmcp/adapter-zod zod # 或者如果你选择使用Valibot: pnpm install @tmcp/adapter-valibot valibot # 根据你的需求,安装相应的传输层: pnpm install @tmcp/transport-stdio # 适用于命令行或桌面应用 pnpm install @tmcp/transport-http # 适用于Web客户端,需要HTTP服务器 pnpm install @tmcp/transport-sse # 适用于Web客户端,使用Server-Sent Events - 创建服务器文件: 在你项目中的一个文件(例如 'src/server.js')中编写你的MCP服务器逻辑。
服务器配置 (MCP客户端使用)
MCP客户端(通常是LLM应用或开发者工具)需要通过JSON格式的配置来启动和连接到'tmcp'服务器。以下是针对不同传输协议的示例配置信息,用户需要将这些信息传递给其MCP客户端:
-
STDIO传输 (命令行/桌面应用) 此配置用于客户端通过标准输入/输出与MCP服务器通信。
{ "name": "my-mcp-server", "command": "node", "args": ["src/server.js"], "capabilities": { "tools": { "listChanged": true }, "prompts": { "listChanged": true }, "resources": { "listChanged": true, "subscribe": true } } }- 'name': 服务器的唯一名称。
- 'command': 启动MCP服务器进程的命令,例如 'node'、'deno run'、'bun run'。
- 'args': 传递给 'command' 的参数,通常是服务器主文件的路径。
- 'capabilities': 客户端期望服务器提供的功能,例如工具、Prompt、资源列表变更通知和资源订阅。
-
HTTP传输 (Web客户端) 此配置用于客户端通过HTTP协议与MCP服务器通信。服务器需要通过HTTP服务器(如Express, Koa, Bun.serve等)托管。
{ "name": "my-http-mcp-server", "url": "http://localhost:3000/mcp", "capabilities": { "tools": { "listChanged": true }, "prompts": { "listChanged": true }, "resources": { "listChanged": true, "subscribe": true } } }- 'name': 服务器的唯一名称。
- 'url': MCP服务器的HTTP端点URL。
- 'capabilities': 同上。
-
SSE (Server-Sent Events) 传输 (Web客户端) 此配置用于客户端通过SSE协议与MCP服务器通信,通常用于Web客户端获取实时通知。服务器同样需要通过HTTP服务器托管。
{ "name": "my-sse-mcp-server", "url": "http://localhost:3000/sse", "endpoint": "http://localhost:3000/message", "capabilities": { "tools": { "listChanged": true }, "prompts": { "listChanged": true }, "resources": { "listChanged": true, "subscribe": true } } }- 'name': 服务器的唯一名称。
- 'url': MCP服务器的SSE连接端点URL。
- 'endpoint': 用于发送MCP请求的HTTP POST端点URL。
- 'capabilities': 同上。
基本使用方法
以下是一个使用Zod和STDIO传输的基本服务器示例:
-
编写服务器代码 ('src/server.js'):
import { McpServer } from 'tmcp'; import { ZodJsonSchemaAdapter } from '@tmcp/adapter-zod'; import { StdioTransport } from '@tmcp/transport-stdio'; import { z } from 'zod'; // 1. 初始化Schema适配器 const adapter = new ZodJsonSchemaAdapter(); // 2. 创建MCP服务器实例 const server = new McpServer( { name: 'my-simple-mcp-server', version: '1.0.0', description: '一个简单的MCP服务器示例', }, { adapter, capabilities: { tools: { listChanged: true }, prompts: { listChanged: true }, resources: { listChanged: true }, }, }, ); // 3. 定义并注册一个工具 server.tool( { name: 'calculate_sum', description: '计算两个数字的和', schema: z.object({ a: z.number().describe('第一个数字'), b: z.number().describe('第二个数字'), }), }, async ({ a, b }) => { return { content: [ { type: 'text', text: '两个数字的和是: ${a + b}', }, ], }; }, ); // 4. 定义并注册一个Prompt模板 server.prompt( { name: 'greeting_prompt', description: '生成问候语', schema: z.object({ name: z.string().describe('要问候的名字'), }), }, async ({ name }) => { return { messages: [ { role: 'user', content: { type: 'text', text: '请生成一个对 ${name} 的友好问候语。', }, }, ], }; }, ); // 5. 启动STDIO传输 const transport = new StdioTransport(server); transport.listen(); console.log('MCP服务器已启动,等待客户端连接...'); -
运行服务器: 在你的项目根目录运行:
node src/server.js服务器将在标准输入/输出上等待MCP客户端的连接。
信息
分类
AI与计算