🧩 模型上下文协议(MCP)服务器 —— TypeScript 示例
基于TypeScript的 模型上下文协议(MCP) 用于测试本地工具、VS Code Copilot Chat 与大型语言模型(LLM)代理之间互操作性的服务器。\ 这个仓库用于追踪构建(某项目/系统)的进度 符合规范、安全、可观测且可投入生产的 MCP服务器实现。
______________________________________________________________________
🚀 概述
这个项目展示了:
- 一个最小的 MCP服务器 使用官方 @modelcontextprotocol/sdk 翻译为中文是:“@模型上下文协议/开发工具包”
- 两辆运输车:
- stdio 用于本地/编辑器集成 - Streamable HTTP 用于ChatGPT/Copilot Chat连接
- 两个例子:
- 工具: add – 执行加法运算 - 资源: greeting – 返回一条问候消息
______________________________________________________________________
🧰 快速入门
# install dependencies
npm install
# run in dev mode
npm run dev
# build + start production
npm run build && npm start验证服务器
curl -s http://localhost:3000/healthz
# → OK
curl -s http://localhost:3000/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'______________________________________________________________________
🧩 与 VS Code 的集成(Copilot Chat)
- 创建
.vscode/mcp.json
{
"servers": {
"my-server": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
},
"defaultContexts": [
{ "server": "my-server" }
]
}- 重新加载窗口\
你会看到的 my-server(MCP 服务器) 自动列在Copilot聊天中。
- 在聊天中测试
call add with { "a": 3, "b": 5 }→ 应该返回您计算的结果。
______________________________________________________________________
🧠 核心目标与追踪
| 类别 | 目标 | 描述 | 状态 | ||||
|---|---|---|---|---|---|---|---|
| (无对应中文) | (无对应中文) | (无对应中文) | (无对应中文) | ** | 核心/协议层面 | ** 规范一致性(最小可验证产品) tools/list | 最小化服务器,暴露一个工具和一个资源,可通过标准输入输出(stdio)和HTTP访问;进行验证 tools/call, resources/list, |
| . | ☐ 计划中 | ** | ** 类型化模式 | ||||
| 为工具输入/输出定义Zod模式;使用符合规范的错误拒绝无效负载。 | ☐ 计划中 | ** | ** 运输平价 | ||||
| 支持stdio和可流式HTTP;记录任何行为差异。 | ☐ 计划中 | ** | ** 资源与工具的清晰区分 | ||||
| 展示只读资源与可操作工具的清晰示例。 | ☐ 计划中 | ** | 安全与认证 | ** API密钥认证(基准线)X-API-Key | 需要可配置的头部( | ||
| ), 返回401/403状态码,记录失败尝试,支持密钥轮换。 | ☐ 计划中 | ** | ** 纵深防御 | ||||
| 添加速率限制、超时设置和敏感数据遮蔽功能。 | ☐ 计划中 | ** | 可靠性与性能 | ** 取消与超时 | |||
| 尊重客户取消请求,并强制执行服务器端超时设置。 | ☐ 已计划 | ** | ** 并发与背压 | ||||
| 限制飞行中的请求;优雅地卸载负载。 | ☐ 已计划 | ** | ** 可观测性 | ||||
| 结构化日志(请求ID、延迟、状态)和基本指标。 | ☐ 计划中 | ** | 开发者体验 | ** 简洁的模块化设计 | |||
| 将传输、认证、处理程序和适配器分开。 | ☐ 计划中 | ** | ** 测试套件 tools/list单元测试、合同测试和冒烟测试tools/call→ | ||||
| . | ☐ 计划中 | ** | ** 局部人体工程学pnpm dev一键式开发( | ||||
| ), 热加载,.env 支持,TS 客户端。 | ☐ 计划中 | ** | ** 文档 | ||||
| 将每个目标映射到相关的MCP文档和服务器文件。 | ☐ 计划中 | ** | 兼容性 | ** 多客户端合理性检查 | |||
| 使用TS客户端+Copilot Chat验证流程;注意供应商的特殊性。 | ☐ 计划中 | ** | ** 模式演变tool@v1 | 版本工具( | |||
| )并优雅地弃用。 | ☐ 计划中 | ** | 生产化(或实现工业化生产) | ** 容器化并部署 | |||
| 添加Dockerfile、健康/就绪检查、资源限制。 | ☐ 计划中 | ** | ** 机密与配置 | ||||
| 遵循12因素原则;无需重启即可轮换密钥。 | ☐ 计划中 | ** | ** 审计轨迹 | ||||
| 记录每次通话的参与者/内容/时间。 | ☐ 计划中 | ** | ** SLOs(Student Learning Outcomes)通常翻译为“学生学习成果”或“学生学习目标”。 | ||||
| 定义可用性和延迟目标(99.9% / p95)。 | ☐ 计划中 | ** | 拉伸 | ** 流式输出 | |||
| 对于长时间任务使用分块传输编码响应。 | ☐ 计划中 | ** | ** 政策护栏/政策边界(或政策限制条件) | ||||
| 每个工具的配额/范围;开发/测试/生产环境配置文件。 | ☐ 计划中 | ** | ** 集成适配器 | ||||
| 抽象外部系统(如ServiceNow、Workday等)。 | ☐ 计划中 | ** | ** 文档网站 |
______________________________________________________________________
根据Zod模式自动生成API/工具文档。| ☐ 计划中 |
- 🧩 参考文献 模型上下文协议规范:
- modelcontextprotocol.io/文档(或“modelcontextprotocol.io/文档指南”) TypeScript SDK(软件开发工具包):
- github.com/modelcontextprotocol/typescript-sdk 翻译为中文是:“github.com 上的 modelcontextprotocol/typescript-sdk 项目”。不过,通常我们不会直接翻译网址,而是直接使用原网址或在需要说明时简要提及。如果非要翻译整个表述,也可以是:“在 GitHub 上的 modelcontextprotocol 项目的 TypeScript SDK” Copilot Chat MCP 文档:
______________________________________________________________________
code.visualstudio.com/docs/copilot/customization/mcp-servers 的中文翻译是:“code.visualstudio.com 的文档:Copilot 自定义设置/多连接点服务器(MCP 服务器)”
🛠️ 当前状态
| 领域 | 备注 | |||
|---|---|---|---|---|
| 服务器 | ✅ HTTP 正常工作,已通过 VS Code Copilot Chat MCP 集成验证。 | add | 工具 | ✅ echo , |
| 已注册。 | greeting | 资源 | ☐ resources/list待添加/待测试于 | |
| 。 | ||||
| 根据您的指示,以下是原文内容的翻译:。 |
______________________________________________________________________
| 日志记录 | ☐ 结构化日志记录和指标待处理。 |
🧾 许可证
______________________________________________________________________
_麻省理工学院(MIT)_
