MCP TypeScript SDK v2 快速入门:用一个文件暴露 AI 工具
本文基于 MCP 官方 TypeScript SDK v2 文档整理。v2 对应新的稳定规范线,与旧版
@modelcontextprotocol/sdk的导入方式不同。
MCP 把 AI 应用与外部工具、数据源之间的连接标准化。服务端暴露 Tools、Resources 和 Prompts,Claude Code、VS Code、Cursor 或自研 Host 负责连接服务器并把能力交给模型。
最小工具服务器
官方 v2 SDK 将服务端拆成独立包。下面的服务器通过 stdio 暴露一个天气工具:
import { McpServer } from '@modelcontextprotocol/server'
import { serveStdio } from '@modelcontextprotocol/server/stdio'
import * as z from 'zod/v4'
serveStdio(() => {
const server = new McpServer({
name: 'weather',
version: '1.0.0'
})
server.registerTool(
'get-forecast',
{
description: '查询城市天气预报',
inputSchema: z.object({ city: z.string().min(1) })
},
async ({ city }) => ({
content: [{ type: 'text', text: city + ':晴' }]
})
)
return server
})SDK 会在 handler 执行前根据 Zod schema 验证输入,但业务权限仍需自己实现。
三类原语怎么分工
- Tools:模型可选择调用的动作,例如查询订单、创建工单。
- Resources:由应用选择并提供的上下文,例如文件、数据库记录。
- Prompts:用户可主动选择的模板或工作流入口。
不要把所有能力都设计成 Tool。只读且适合浏览的数据更适合 Resource;稳定的交互模板更适合 Prompt。
从本地走向远程
stdio 适合本地进程和桌面开发工具。远程服务通常使用 Streamable HTTP,并需要补齐:
- OAuth 或受控访问令牌
- Host/Origin 校验
- 请求体与 schema 深度限制
- 超时、取消与并发控制
- 工具调用审计和敏感参数脱敏
升级旧版时不要只改包名。先核对目标规范版本、传输方式和 Host 的兼容性,再逐个迁移工具并跑协议测试。
本文转载自 Model Context Protocol · 作者 MCP Maintainers,版权归原作者所有。
原文链接:https://ts.sdk.modelcontextprotocol.io/v2/
抓取时间:2026年10月22日
本文采用 aggregate 索引策略。