MCP TS Quickstart
好的,这是针对 MCP 服务器实现的无构建 TypeScript 快速入门: **目标:** * 创建一个简单的 MCP 服务器,无需任何构建步骤(例如,webpack、rollup、esbuild)。 * 使用 TypeScript 编写,并直接使用 `ts-node` 运行。 * 展示基本的 MCP 服务器功能,例如注册、心跳和数据处理。 **先决条件:** * Node.js (推荐版本 16 或更高版本) * npm 或 yarn * TypeScript (`npm install -g typescript`) * ts-node (`npm install -g ts-node`) **步骤:** 1. **创建项目目录:** ```bash mkdir mcp-server-quickstart cd mcp-server-quickstart ``` 2. **初始化 npm 项目:** ```bash npm init -y ``` 3. **安装必要的依赖项:** ```bash npm install @minecraft/server @minecraft/server-ui @minecraft/server-admin @minecraft/server-net npm install ws # 用于 WebSocket 通信 npm install uuid # 用于生成唯一 ID npm install @types/ws @types/uuid --save-dev # 安装类型定义 ``` 4. **创建 `tsconfig.json` 文件:** ```json { "compilerOptions": { "target": "esnext", "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "outDir": "dist", // 可选,如果需要输出编译后的 JavaScript "sourceMap": true, // 可选,用于调试 "experimentalDecorators": true, // 启用装饰器 "emitDecoratorMetadata": true, // 发射装饰器元数据 "lib": ["esnext"] // 包含最新的 ECMAScript 特性 }, "include": ["src/**/*"], "exclude": ["node_modules"] } ``` **解释:** * `target`: 指定编译的目标 JavaScript 版本。`esnext` 允许使用最新的 JavaScript 特性。 * `module`: 指定模块系统。 `commonjs` 适用于 Node.js。 * `moduleResolution`: 指定模块解析策略。 `node` 模拟 Node.js 的模块解析。 * `esModuleInterop`: 允许 CommonJS 模块与 ES 模块互操作。 * `strict`: 启用所有严格类型检查选项。 * `skipLibCheck`: 跳过对声明文件的类型检查,可以加快编译速度。 * `outDir`: 指定输出目录(可选)。 * `sourceMap`: 生成源映射文件(可选),用于调试。 * `experimentalDecorators` 和 `emitDecoratorMetadata`: 启用装饰器支持。 * `lib`: 包含要包含在编译中的库文件。 5. **创建 `src` 目录并创建 `src/index.ts` 文件:** ```bash mkdir src touch src/index.ts ``` 6. **将以下代码添加到 `src/index.ts`:** ```typescript import { WebSocket, WebSocketServer } from 'ws'; import { v4 as uuidv4 } from 'uuid'; interface Client { id: string; socket: WebSocket; } const clients: Client[] = []; const wss = new WebSocketServer({ port: 3000 }); console.log("MCP Server started on port 3000"); wss.on('connection', ws => { const clientId = uuidv4(); const client: Client = { id: clientId, socket: ws }; clients.push(client); console.log(`Client connected: ${clientId}`); ws.on('message', message => { console.log(`Received message from ${clientId}: ${message}`); // 广播消息给所有其他客户端 clients.forEach(c => { if (c.id !== clientId) { c.socket.send(`[${clientId}]: ${message}`); } }); }); ws.on('close', () => { console.log(`Client disconnected: ${clientId}`); clients.splice(clients.findIndex(c => c.id === clientId), 1); }); ws.on('error', error => { console.error(`WebSocket error for client ${clientId}: ${error}`); }); ws.send('Welcome to the MCP Server!'); }); wss.on('error', error => { console.error('WebSocket server error:', error); }); ``` **解释:** * **导入必要的模块:** `ws` 用于 WebSocket 服务器,`uuid` 用于生成客户端 ID。 * **`Client` 接口:** 定义客户端的结构,包含 ID 和 WebSocket 连接。 * **`clients` 数组:** 存储连接的客户端。 * **创建 WebSocket 服务器:** `new WebSocketServer({ port: 3000 })` 在端口 3000 上启动服务器。 * **`connection` 事件:** 当有客户端连接时触发。 * 生成一个唯一的客户端 ID。 * 将客户端添加到 `clients` 数组。 * 设置消息、关闭和错误处理程序。 * 发送欢迎消息。 * **`message` 事件:** 当客户端发送消息时触发。 * 将消息记录到控制台。 * 将消息广播给所有其他客户端。 * **`close` 事件:** 当客户端断开连接时触发。 * 从 `clients` 数组中删除客户端。 * **`error` 事件:** 处理 WebSocket 错误。 7. **运行服务器:** ```bash npx ts-node src/index.ts ``` 或者,如果你的 `tsconfig.json` 中有 `outDir`,你可以先编译: ```bash tsc node dist/index.js ``` 8. **测试服务器:** 你可以使用任何 WebSocket 客户端来连接到服务器。 以下是一些选项: * **在线 WebSocket 客户端:** 例如,[https://www.websocket.org/echo.html](https://www.websocket.org/echo.html) * **Node.js 客户端:** 你可以创建一个简单的 Node.js 客户端来测试服务器。 * **Minecraft 客户端:** 你可以使用 Minecraft 的 `/connect` 命令连接到服务器(如果你的服务器支持 Minecraft 协议)。 在 WebSocket 客户端中,连接到 `ws://localhost:3000`。 连接后,你应该收到欢迎消息。 发送消息,你应该看到它们被记录到服务器控制台,并广播给所有其他连接的客户端。 **重要注意事项:** * **安全性:** 此示例未实现任何安全性措施。 在生产环境中,你需要添加身份验证、授权和加密。 * **错误处理:** 此示例仅包含基本的错误处理。 你需要添加更全面的错误处理来处理各种情况。 * **扩展性:** 此示例是一个简单的单线程服务器。 对于高负载,你可能需要考虑使用多线程或集群。 * **MCP 协议:** 此示例仅演示了基本的 WebSocket 通信。 要实现完整的 MCP 服务器,你需要实现 MCP 协议的所有方面,包括注册、心跳、数据处理和命令执行。 请参考官方的 MCP 文档。 * **`@minecraft/server` 包:** 虽然安装了 `@minecraft/server` 包,但此示例并没有直接使用它。 在更复杂的 MCP 服务器实现中,你将使用此包来与 Minecraft 服务器交互。 **下一步:** * 研究 MCP 协议规范。 * 实现注册和心跳机制。 * 处理来自 Minecraft 服务器的数据。 * 实现命令执行。 * 添加安全性措施。 * 考虑使用更高级的 WebSocket 库,例如 `socket.io`。 * 探索使用 `@minecraft/server` 包与 Minecraft 服务器进行更深入的集成。 这个快速入门提供了一个基本的框架,你可以用来构建一个更完整的 MCP 服务器。 记住,这只是一个起点,你需要根据你的具体需求进行扩展和修改。 **中文翻译:** 好的,这是一个针对 MCP 服务器实现的无构建 TypeScript 快速入门: **目标:** * 创建一个简单的 MCP 服务器,无需任何构建步骤(例如,webpack、rollup、esbuild)。 * 使用 TypeScript 编写,并直接使用 `ts-node` 运行。 * 展示基本的 MCP 服务器功能,例如注册、心跳和数据处理。 **先决条件:** * Node.js (推荐版本 16 或更高版本) * npm 或 yarn * TypeScript (`npm install -g typescript`) * ts-node (`npm install -g ts-node`) **步骤:** 1. **创建项目目录:** ```bash mkdir mcp-server-quickstart cd mcp-server-quickstart ``` 2. **初始化 npm 项目:** ```bash npm init -y ``` 3. **安装必要的依赖项:** ```bash npm install @minecraft/server @minecraft/server-ui @minecraft/server-admin @minecraft/server-net npm install ws # 用于 WebSocket 通信 npm install uuid # 用于生成唯一 ID npm install @types/ws @types/uuid --save-dev # 安装类型定义 ``` 4. **创建 `tsconfig.json` 文件:** ```json { "compilerOptions": { "target": "esnext", "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "outDir": "dist", // 可选,如果需要输出编译后的 JavaScript "sourceMap": true, // 可选,用于调试 "experimentalDecorators": true, // 启用装饰器 "emitDecoratorMetadata": true, // 发射装饰器元数据 "lib": ["esnext"] // 包含最新的 ECMAScript 特性 }, "include": ["src/**/*"], "exclude": ["node_modules"] } ``` **解释:** * `target`: 指定编译的目标 JavaScript 版本。`esnext` 允许使用最新的 JavaScript 特性。 * `module`: 指定模块系统。 `commonjs` 适用于 Node.js。 * `moduleResolution`: 指定模块解析策略。 `node` 模拟 Node.js 的模块解析。 * `esModuleInterop`: 允许 CommonJS 模块与 ES 模块互操作。 * `strict`: 启用所有严格类型检查选项。 * `skipLibCheck`: 跳过对声明文件的类型检查,可以加快编译速度。 * `outDir`: 指定输出目录(可选)。 * `sourceMap`: 生成源映射文件(可选),用于调试。 * `experimentalDecorators` 和 `emitDecoratorMetadata`: 启用装饰器支持。 * `lib`: 包含要包含在编译中的库文件。 5. **创建 `src` 目录并创建 `src/index.ts` 文件:** ```bash mkdir src touch src/index.ts ``` 6. **将以下代码添加到 `src/index.ts`:** ```typescript import { WebSocket, WebSocketServer } from 'ws'; import { v4 as uuidv4 } from 'uuid'; interface Client { id: string; socket: WebSocket; } const clients: Client[] = []; const wss = new WebSocketServer({ port: 3000 }); console.log("MCP Server started on port 3000"); wss.on('connection', ws => { const clientId = uuidv4(); const client: Client = { id: clientId, socket: ws }; clients.push(client); console.log(`Client connected: ${clientId}`); ws.on('message', message => { console.log(`Received message from ${clientId}: ${message}`); // 广播消息给所有其他客户端 clients.forEach(c => { if (c.id !== clientId) { c.socket.send(`[${clientId}]: ${message}`); } }); }); ws.on('close', () => { console.log(`Client disconnected: ${clientId}`); clients.splice(clients.findIndex(c => c.id === clientId), 1); }); ws.on('error', error => { console.error(`WebSocket error for client ${clientId}: ${error}`); }); ws.send('Welcome to the MCP Server!'); }); wss.on('error', error => { console.error('WebSocket server error:', error); }); ``` **解释:** * **导入必要的模块:** `ws` 用于 WebSocket 服务器,`uuid` 用于生成客户端 ID。 * **`Client` 接口:** 定义客户端的结构,包含 ID 和 WebSocket 连接。 * **`clients` 数组:** 存储连接的客户端。 * **创建 WebSocket 服务器:** `new WebSocketServer({ port: 3000 })` 在端口 3000 上启动服务器。 * **`connection` 事件:** 当有客户端连接时触发。 * 生成一个唯一的客户端 ID。 * 将客户端添加到 `clients` 数组。 * 设置消息、关闭和错误处理程序。 * 发送欢迎消息。 * **`message` 事件:** 当客户端发送消息时触发。 * 将消息记录到控制台。 * 将消息广播给所有其他客户端。 * **`close` 事件:** 当客户端断开连接时触发。 * 从 `clients` 数组中删除客户端。 * **`error` 事件:** 处理 WebSocket 错误。 7. **运行服务器:** ```bash npx ts-node src/index.ts ``` 或者,如果你的 `tsconfig.json` 中有 `outDir`,你可以先编译: ```bash tsc node dist/index.js ``` 8. **测试服务器:** 你可以使用任何 WebSocket 客户端来连接到服务器。 以下是一些选项: * **在线 WebSocket 客户端:** 例如,[https://www.websocket.org/echo.html](https://www.websocket.org/echo.html) * **Node.js 客户端:** 你可以创建一个简单的 Node.js 客户端来测试服务器。 * **Minecraft 客户端:** 你可以使用 Minecraft 的 `/connect` 命令连接到服务器(如果你的服务器支持 Minecraft 协议)。 在 WebSocket 客户端中,连接到 `ws://localhost:3000`。 连接后,你应该收到欢迎消息。 发送消息,你应该看到它们被记录到服务器控制台,并广播给所有其他连接的客户端。 **重要注意事项:** * **安全性:** 此示例未实现任何安全性措施。 在生产环境中,你需要添加身份验证、授权和加密。 * **错误处理:** 此示例仅包含基本的错误处理。 你需要添加更全面的错误处理来处理各种情况。 * **扩展性:** 此示例是一个简单的单线程服务器。 对于高负载,你可能需要考虑使用多线程或集群。 * **MCP 协议:** 此示例仅演示了基本的 WebSocket 通信。 要实现完整的 MCP 服务器,你需要实现 MCP 协议的所有方面,包括注册、心跳、数据处理和命令执行。 请参考官方的 MCP 文档。 * **`@minecraft/server` 包:** 虽然安装了 `@minecraft/server` 包,但此示例并没有直接使用它。 在更复杂的 MCP 服务器实现中,你将使用此包来与 Minecraft 服务器交互。 **下一步:** * 研究 MCP 协议规范。 * 实现注册和心跳机制。 * 处理来自 Minecraft 服务器的数据。 * 实现命令执行。 * 添加安全性措施。 * 考虑使用更高级的 WebSocket 库,例如 `socket.io`。 * 探索使用 `@minecraft/server` 包与 Minecraft 服务器进行更深入的集成。 这个快速入门提供了一个基本的框架,你可以用来构建一个更完整的 MCP 服务器。 记住,这只是一个起点,你需要根据你的具体需求进行扩展和修改。
cephalization
README
MCP TS 快速入门
这是 TypeScript 中 MCP 的快速入门指南。
它包含一个基本的 MCP 服务器实现,该实现使用 stdio 传输,并从 Hacker News 获取热门新闻。
它使用 TypeScript 编写,并通过利用 Node v23 无需构建步骤即可工作。
基于 MCP 文档 中提供的示例。

用法
以下代码片段需要 git、nvm 和 pnpm。
git clone git@github.com:cephalization/mcp-ts-quickstart.git
cd mcp-ts-quickstart
nvm install && nvm use
pnpm install
克隆并安装依赖项后,您可以将此服务器添加到 Claude Desktop,配置类似于以下内容:
{
"mcpServers": {
"hacker-news": {
"command": "/Users/tony/.nvm/versions/node/v23.6.0/bin/node",
"args": ["/Users/tony/repos/mcp/src/index.ts"]
}
}
}
有关如何将 Claude Desktop 用作客户端的更多信息,请参阅 MCP 文档。
开发
以下命令将安装依赖项,然后使用 MCP Inspector UI 作为客户端启动 MCP 服务器。
nvm install && nvm use
pnpm install
pnpm start
由于服务器是无构建的,您只需在 Inspector UI 中按“Restart”按钮即可“重启”服务器。
扩展服务器
服务器在 src/index.ts 中实现。
topStories 工具在 src/tools.ts 中实现。
要添加新工具,您可以复制 topStories 工具并对其进行修改。
导入本地 src 文件时,请确保使用 .ts 扩展名,以便 node 可以解析它。
导入类型时,请确保在导入前面添加 type 关键字,以便 node 可以在运行时将其删除。
导入库时,如果它没有提供导出映射,请确保导入实际的源文件扩展名。
MCP Inspector
MCP Inspector 是一个用于与 MCP 服务器交互的 UI。
运行时,它将在 http://localhost:6274 上可用。
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。
Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。
Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。