MCP TypeScript SDK全攻略:构建AI上下文管理的标准化解决方案
开篇:AI开发的上下文困境与破局之道
当你在构建基于大语言模型的应用时,是否曾遇到这些棘手问题:如何让AI准确理解应用的业务逻辑?怎样确保不同LLM之间的上下文格式一致?如何安全高效地为模型提供外部工具调用能力?这些问题的核心在于缺乏标准化的上下文管理方案,而MCP TypeScript SDK正是为解决这些挑战而生。
Model Context Protocol(模型上下文协议,简称MCP)是一种标准化方式,用于为大语言模型提供上下文,将上下文提供与LLM交互的关注点分离。本文将带你深入探索MCP TypeScript SDK,从核心概念到实战开发,再到进阶应用,全方位掌握这一强大工具。
一、核心功能解析:MCP如何重塑AI上下文管理
1.1 MCP基础:理解AI的"通用翻译官"
什么是MCP,它如何解决上下文碎片化问题?
想象你正在国际会议上担任翻译,面对来自不同国家(不同LLM)的参会者,他们说着各自的语言(上下文格式)。你的任务是将信息准确地从一种语言转换为另一种语言。这就是MCP的核心作用——作为AI与应用之间的"通用翻译官",标准化上下文的传递方式。
MCP TypeScript SDK是这一协议的官方实现,它提供了创建MCP服务器和客户端的完整工具集,支持多种传输方式,使应用能够以一致的方式与各种LLM交互。
📌 核心价值:MCP消除了不同LLM之间的上下文格式差异,使开发者能够专注于业务逻辑而非格式适配。
1.2 McpServer:AI服务的"中央调度中心"
MCP服务器如何协调工具、资源和提示的交互?
McpServer是MCP协议的核心组件,可类比为AI服务的"中央调度中心"。它负责管理所有工具、资源和提示,处理客户端请求,并确保协议合规性。创建服务器的基本代码如下:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
const server = new McpServer({
name: 'weather-service',
version: '1.0.0'
});
这段代码创建了一个名为"weather-service"的MCP服务器实例,它将成为我们所有AI功能的基础。
1.3 三大核心组件:工具、资源与提示
MCP如何组织AI能力,满足不同场景需求?
MCP定义了三种核心组件,就像一家AI服务公司的三个部门:
工具(Tools):AI的"行动部门"
工具是AI可以调用的功能模块,负责执行具体操作。例如,我们可以创建一个温度转换工具:
import { z } from 'zod';
server.registerTool(
'temperature-converter',
{
title: '温度转换器',
description: '在摄氏度和华氏度之间进行温度转换',
inputSchema: z.object({
value: z.number().describe('要转换的温度值'),
fromUnit: z.enum(['celsius', 'fahrenheit']).describe('原始单位'),
toUnit: z.enum(['celsius', 'fahrenheit']).describe('目标单位')
}),
outputSchema: z.object({
result: z.number().describe('转换后的温度值'),
unit: z.enum(['celsius', 'fahrenheit']).describe('结果单位')
})
},
async ({ value, fromUnit, toUnit }) => {
let result;
if (fromUnit === 'celsius' && toUnit === 'fahrenheit') {
result = (value * 9/5) + 32;
} else if (fromUnit === 'fahrenheit' && toUnit === 'celsius') {
result = (value - 32) * 5/9;
} else {
result = value; // 单位相同,直接返回原值
}
return {
content: [{ type: 'text', text: `${value}°${fromUnit === 'celsius' ? 'C' : 'F'} = ${result.toFixed(2)}°${toUnit === 'celsius' ? 'C' : 'F'}` }],
structuredContent: { result: parseFloat(result.toFixed(2)), unit: toUnit }
};
}
);
资源(Resources):AI的"知识库"
资源是向AI提供的结构化数据,如配置信息、用户资料等。例如,我们可以创建一个城市天气数据资源:
import { ResourceTemplate } from '@modelcontextprotocol/sdk/core/shared/uriTemplate.js';
// 静态资源 - 天气服务配置
server.registerResource(
'weather-config',
'config://weather-service',
{
title: '天气服务配置',
description: '天气服务的API配置信息',
mimeType: 'application/json'
},
async () => ({
contents: [{
uri: 'config://weather-service',
text: JSON.stringify({
apiEndpoint: 'https://api.weather.com/v1',
timeout: 5000,
cacheTTL: 300
})
}]
})
);
// 动态资源 - 城市天气数据
server.registerResource(
'city-weather',
new ResourceTemplate('weather://cities/{cityId}', { list: undefined }),
{
title: '城市天气数据',
description: '获取特定城市的天气信息'
},
async (uri, { cityId }) => {
// 实际应用中这里会调用天气API
const mockWeatherData = {
cityId,
temperature: 22.5,
condition: 'sunny',
humidity: 65,
updatedAt: new Date().toISOString()
};
return {
contents: [{
uri: uri.href,
text: JSON.stringify(mockWeatherData)
}]
};
}
);
提示(Prompts):AI的"工作指南"
提示是预定义的对话模板,帮助引导AI生成特定类型的响应。例如,我们可以创建一个天气报告生成提示:
server.registerPrompt(
'generate-weather-report',
{
title: '生成天气报告',
description: '根据天气数据生成自然语言报告',
argsSchema: z.object({
city: z.string().describe('城市名称'),
weatherData: z.object({
temperature: z.number(),
condition: z.string(),
humidity: z.number()
}).describe('天气数据对象')
})
},
({ city, weatherData }) => ({
messages: [
{
role: 'system',
content: {
type: 'text',
text: '你是一位专业的气象播报员,请根据提供的天气数据,生成一份简洁、友好的天气报告。'
}
},
{
role: 'user',
content: {
type: 'text',
text: `请生成${city}的天气报告,当前数据:温度${weatherData.temperature}°C,天气状况${weatherData.condition},湿度${weatherData.humidity}%。`
}
}
]
})
);
1.4 常见问题:MCP核心概念理解
Q1: 工具和资源的主要区别是什么? A1: 工具是主动执行操作并产生副作用的功能(如调用API、计算),而资源是被动提供数据的组件(如配置信息、静态数据)。工具设计为模型控制(AI决定何时调用),资源设计为应用驱动(应用决定何时提供)。
Q2: 如何决定是创建工具还是资源? A2: 如果需要执行计算、修改状态或与外部系统交互,使用工具;如果只需提供数据或信息,使用资源。一个经验法则:工具会"做某事",资源会"提供某物"。
Q3: 提示(Prompts)的使用场景是什么? A3: 提示适用于需要标准化对话流程的场景,如客户支持模板、代码审查指南、报告生成等。它们可以封装领域专业知识,确保AI以一致的方式处理特定类型的请求。
二、实战开发指南:从零构建MCP应用
2.1 环境搭建:准备你的MCP开发环境
如何配置一个高效的MCP开发环境?
在开始编码前,我们需要准备好开发环境。MCP TypeScript SDK需要Node.js环境,推荐使用LTS版本。
-
安装Node.js和npm 确保安装Node.js 14+和npm 6+。可以通过以下命令检查版本:
node -v npm -v -
创建项目并安装依赖
mkdir mcp-weather-app cd mcp-weather-app npm init -y npm install @modelcontextprotocol/sdk express zod npm install --save-dev typescript tsx @types/express -
配置TypeScript 创建
tsconfig.json文件:{ "compilerOptions": { "target": "ES2020", "module": "ESNext", "moduleResolution": "NodeNext", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"] }
2.2 服务器实现:构建你的MCP服务
如何从零开始创建一个完整的MCP服务器?
让我们构建一个天气服务MCP服务器,整合前面提到的温度转换工具、天气资源和报告提示。
创建src/server.ts文件:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
import express from 'express';
import { z } from 'zod';
import { ResourceTemplate } from '@modelcontextprotocol/sdk/core/shared/uriTemplate.js';
// 创建MCP服务器
const server = new McpServer({
name: 'weather-service',
version: '1.0.0',
description: '提供天气相关功能的MCP服务器'
});
// 注册温度转换工具
server.registerTool(
'temperature-converter',
{
title: '温度转换器',
description: '在摄氏度和华氏度之间进行温度转换',
inputSchema: z.object({
value: z.number().describe('要转换的温度值'),
fromUnit: z.enum(['celsius', 'fahrenheit']).describe('原始单位'),
toUnit: z.enum(['celsius', 'fahrenheit']).describe('目标单位')
}),
outputSchema: z.object({
result: z.number().describe('转换后的温度值'),
unit: z.enum(['celsius', 'fahrenheit']).describe('结果单位')
})
},
async ({ value, fromUnit, toUnit }) => {
let result;
if (fromUnit === 'celsius' && toUnit === 'fahrenheit') {
result = (value * 9/5) + 32;
} else if (fromUnit === 'fahrenheit' && toUnit === 'celsius') {
result = (value - 32) * 5/9;
} else {
result = value; // 单位相同,直接返回原值
}
return {
content: [{ type: 'text', text: `${value}°${fromUnit === 'celsius' ? 'C' : 'F'} = ${result.toFixed(2)}°${toUnit === 'celsius' ? 'C' : 'F'}` }],
structuredContent: { result: parseFloat(result.toFixed(2)), unit: toUnit }
};
}
);
// 注册天气配置资源
server.registerResource(
'weather-config',
'config://weather-service',
{
title: '天气服务配置',
description: '天气服务的API配置信息',
mimeType: 'application/json'
},
async () => ({
contents: [{
uri: 'config://weather-service',
text: JSON.stringify({
apiEndpoint: 'https://api.weather.com/v1',
timeout: 5000,
cacheTTL: 300
})
}]
})
);
// 注册城市天气数据资源
server.registerResource(
'city-weather',
new ResourceTemplate('weather://cities/{cityId}', { list: undefined }),
{
title: '城市天气数据',
description: '获取特定城市的天气信息'
},
async (uri, { cityId }) => {
// 在实际应用中,这里会调用外部天气API
const mockWeatherData = {
cityId,
temperature: 22.5,
condition: 'sunny',
humidity: 65,
updatedAt: new Date().toISOString()
};
return {
contents: [{
uri: uri.href,
text: JSON.stringify(mockWeatherData)
}]
};
}
);
// 注册天气报告生成提示
server.registerPrompt(
'generate-weather-report',
{
title: '生成天气报告',
description: '根据天气数据生成自然语言报告',
argsSchema: z.object({
city: z.string().describe('城市名称'),
weatherData: z.object({
temperature: z.number(),
condition: z.string(),
humidity: z.number()
}).describe('天气数据对象')
})
},
({ city, weatherData }) => ({
messages: [
{
role: 'system',
content: {
type: 'text',
text: '你是一位专业的气象播报员,请根据提供的天气数据,生成一份简洁、友好的天气报告。'
}
},
{
role: 'user',
content: {
type: 'text',
text: `请生成${city}的天气报告,当前数据:温度${weatherData.temperature}°C,天气状况${weatherData.condition},湿度${weatherData.humidity}%。`
}
}
]
})
);
// 设置Express和HTTP传输
const app = express();
app.use(express.json());
// 健康检查端点
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok', service: 'weather-mcp-server' });
});
// MCP端点
app.post('/mcp', async (req, res) => {
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: undefined, // 无会话模式
enableJsonResponse: true
});
// 当客户端连接关闭时清理传输
res.on('close', () => {
transport.close();
});
await server.connect(transport);
await transport.handleRequest(req, res, req.body);
});
// 启动服务器
const port = parseInt(process.env.PORT || '3000');
app.listen(port, () => {
console.log(`MCP天气服务运行在 http://localhost:${port}/mcp`);
console.log('健康检查: http://localhost:${port}/health');
});
2.3 传输方式:选择适合你的通信渠道
MCP支持哪些传输方式,各有什么适用场景?
MCP SDK提供多种传输方式,就像不同的通信渠道,适用于不同场景:
Streamable HTTP:远程通信的首选
Streamable HTTP是最常用的传输方式,适用于客户端和服务器分离的场景。它支持双向通信和流式响应,适合大多数生产环境。
上面的服务器示例已经实现了Streamable HTTP传输。客户端连接代码如下:
import { StreamableHttpClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
import { McpClient } from '@modelcontextprotocol/sdk/client/index.js';
async function main() {
const transport = new StreamableHttpClientTransport({
url: 'http://localhost:3000/mcp'
});
const client = new McpClient(transport);
await client.connect();
console.log('已连接到MCP服务器');
// 调用温度转换工具
const conversionResult = await client.callTool('temperature-converter', {
value: 25,
fromUnit: 'celsius',
toUnit: 'fahrenheit'
});
console.log('温度转换结果:', conversionResult.structuredContent);
// 获取资源
const configResource = await client.getResource('config://weather-service');
console.log('服务配置:', JSON.parse(configResource.contents[0].text));
// 使用提示
const weatherData = {
temperature: 22.5,
condition: 'sunny',
humidity: 65
};
const promptResult = await client.getPrompt('generate-weather-report', {
city: '北京',
weatherData
});
console.log('天气报告提示:', promptResult.messages);
await client.disconnect();
}
main().catch(console.error);
Stdio:本地进程间通信
Stdio传输适用于本地集成,如与另一个进程(如Python脚本)通信。实现方式如下:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new McpServer({
name: 'local-weather-service',
version: '1.0.0'
});
// 注册工具、资源和提示...
const transport = new StdioServerTransport();
await server.connect(transport);
console.log('Stdio MCP服务器已启动');
客户端可以通过标准输入输出与服务器通信,适用于本地开发和简单集成。
2.4 客户端实现:与MCP服务器交互
如何构建一个完整的MCP客户端,与服务器进行交互?
下面是一个完整的MCP客户端实现,展示了如何调用工具、获取资源和使用提示:
创建src/client.ts文件:
import { McpClient } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHttpClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
class WeatherMcpClient {
private client: McpClient;
private transport: StreamableHttpClientTransport;
constructor(serverUrl: string) {
this.transport = new StreamableHttpClientTransport({ url: serverUrl });
this.client = new McpClient(this.transport);
}
async connect(): Promise<void> {
await this.client.connect();
console.log('已连接到MCP天气服务');
}
async disconnect(): Promise<void> {
await this.client.disconnect();
console.log('已断开与MCP天气服务的连接');
}
async convertTemperature(value: number, fromUnit: 'celsius' | 'fahrenheit', toUnit: 'celsius' | 'fahrenheit'): Promise<{ result: number, unit: string }> {
const result = await this.client.callTool('temperature-converter', {
value,
fromUnit,
toUnit
});
return result.structuredContent as { result: number, unit: string };
}
async getCityWeather(cityId: string): Promise<any> {
const resource = await this.client.getResource(`weather://cities/${cityId}`);
return JSON.parse(resource.contents[0].text);
}
async generateWeatherReport(city: string, weatherData: any): Promise<any> {
const prompt = await this.client.getPrompt('generate-weather-report', {
city,
weatherData
});
return prompt.messages;
}
}
// 使用客户端
async function main() {
const client = new WeatherMcpClient('http://localhost:3000/mcp');
try {
await client.connect();
// 转换温度
const tempResult = await client.convertTemperature(25, 'celsius', 'fahrenheit');
console.log(`温度转换结果: 25°C = ${tempResult.result}°${tempResult.unit.toUpperCase()}`);
// 获取城市天气
const weatherData = await client.getCityWeather('beijing');
console.log('北京天气数据:', weatherData);
// 生成天气报告
const reportPrompt = await client.generateWeatherReport('北京', weatherData);
console.log('天气报告提示:');
reportPrompt.forEach((msg: any) => {
console.log(`${msg.role}: ${msg.content.text}`);
});
} catch (error) {
console.error('操作出错:', error);
} finally {
await client.disconnect();
}
}
main();
客户端-服务器交互流程
以下是客户端与MCP服务器交互的基本流程:
-
连接建立:
- 客户端创建StreamableHTTP传输实例,指向服务器URL
- 客户端初始化McpClient并调用connect()
- 服务器创建StreamableHTTPServerTransport并处理连接
-
工具调用:
- 客户端调用callTool()方法,传入工具名称和参数
- 服务器接收请求,验证参数,执行工具函数
- 服务器返回结果,客户端处理响应
-
资源获取:
- 客户端调用getResource(),指定资源URI
- 服务器定位资源处理函数,执行并返回数据
- 客户端解析并使用资源数据
-
提示使用:
- 客户端调用getPrompt(),传入提示名称和参数
- 服务器生成提示消息模板,返回给客户端
- 客户端使用提示消息与LLM交互
-
连接关闭:
- 客户端调用disconnect()
- 服务器清理资源,关闭连接
2.5 常见问题:MCP开发实战
Q1: 如何处理MCP服务器的错误和异常? A1: 实现全局错误处理中间件,捕获工具执行和资源获取过程中的异常。使用try/catch包装关键操作,并返回结构化错误信息。对于Streamable HTTP传输,确保正确处理连接关闭事件,避免资源泄漏。
Q2: 如何为MCP服务器添加身份验证和授权? A2: 可以在HTTP传输层添加中间件(如JWT验证),或实现MCP协议级别的auth扩展。例如:
// HTTP层认证中间件
app.use('/mcp', (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: '未授权访问' });
}
// 验证token...
next();
});
Q3: 如何测试MCP服务器的功能? A3: 使用MCP SDK提供的测试工具,或编写单元测试。可以使用Jest等测试框架,结合Mock传输测试服务器逻辑。例如:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { MockServerTransport } from '@modelcontextprotocol/sdk/test/mocks/transport.js';
describe('温度转换工具', () => {
it('应该正确将摄氏度转换为华氏度', async () => {
const server = new McpServer({ name: 'test-server', version: '1.0.0' });
// 注册温度转换工具...
const transport = new MockServerTransport();
await server.connect(transport);
// 模拟客户端调用
transport.receive({
type: 'toolCall',
toolName: 'temperature-converter',
parameters: { value: 0, fromUnit: 'celsius', toUnit: 'fahrenheit' },
id: 'test-call-1'
});
// 验证响应
const response = await transport.getNextResponse();
expect(response.type).toBe('toolResult');
expect(response.structuredContent.result).toBeCloseTo(32);
});
});
三、进阶应用场景:MCP的高级用法
3.1 部署策略:从开发到生产
如何将MCP服务器部署到生产环境,确保可靠性和性能?
MCP服务器的部署策略应根据应用规模和需求选择:
单节点部署
适合开发环境和小型应用,直接运行服务器实例:
# 开发环境
npx tsx src/server.ts
# 生产环境
npm run build
node dist/server.js
多节点部署
对于生产环境,通常需要多节点部署以确保高可用性:
-
无状态模式: 配置Streamable HTTP传输不跟踪会话,适合简单API代理:
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined // 禁用会话 }); -
持久存储模式: 使用数据库存储会话状态,适合需要会话连续性的场景:
import { DatabaseEventStore } from './databaseEventStore.js'; const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: () => crypto.randomUUID(), eventStore: new DatabaseEventStore() // 数据库事件存储 }); -
分布式消息路由: 结合消息队列实现跨节点会话路由,适合大规模部署:
[客户端] → [负载均衡器] ↓ ↓ [MCP节点1] [MCP节点2] ↓ ↓ [消息队列]
性能优化检查表
| 优化项 | 描述 | 实现方法 |
|---|---|---|
| 连接池 | 复用HTTP连接 | 使用agent选项配置Node.js HTTP连接池 |
| 会话管理 | 合理管理会话生命周期 | 设置会话超时,定期清理过期会话 |
| 资源缓存 | 缓存频繁访问的资源 | 实现基于TTL的资源缓存机制 |
| 负载均衡 | 分散请求压力 | 使用Nginx或云服务提供商的负载均衡 |
| 异步处理 | 避免阻塞操作 | 将耗时操作放入异步队列处理 |
| 监控告警 | 实时监控系统状态 | 集成Prometheus等监控工具 |
| 限流保护 | 防止过载 | 实现请求限流中间件 |
| 代码优化 | 提高执行效率 | 定期性能分析,优化热点代码 |
3.2 高级功能:探索MCP的隐藏能力
MCP有哪些高级功能可以提升AI应用的质量和效率?
动态服务器配置
MCP支持运行时动态修改服务器配置,如添加工具或资源:
// 动态注册工具
app.post('/admin/add-tool', async (req, res) => {
const { name, definition, handler } = req.body;
server.registerTool(name, definition, handler);
res.json({ success: true, message: `工具 ${name} 已添加` });
});
通知防抖
减少频繁资源更新导致的通知风暴:
import { debounce } from 'lodash';
// 创建防抖通知函数
const debouncedNotify = debounce((resourceUri: string) => {
server.notifyResourceChange(resourceUri);
}, 1000); // 1秒防抖
// 资源更新时调用
debouncedNotify('weather://cities/beijing');
代理授权请求
将授权请求代理到上游服务:
server.setAuthHandler(async (authRequest) => {
// 将授权请求转发到上游认证服务
const response = await fetch('https://auth-service.example.com/authorize', {
method: 'POST',
body: JSON.stringify(authRequest),
headers: { 'Content-Type': 'application/json' }
});
return response.json();
});
3.3 常见问题:MCP进阶应用
Q1: 如何实现MCP服务器的高可用部署? A1: 结合无状态设计和负载均衡实现高可用。使用多个MCP服务器实例,前端配置负载均衡器分发请求。对于需要会话状态的场景,使用共享事件存储(如Redis)确保所有节点可以访问相同的会话数据。
Q2: 如何处理大规模工具和资源的组织问题? A2: 采用模块化设计,将工具和资源按功能分组,使用插件系统动态加载。例如:
// 工具模块
import { weatherTools } from './tools/weather.js';
import { conversionTools } from './tools/conversion.js';
// 注册所有工具
weatherTools.forEach(tool => server.registerTool(...tool));
conversionTools.forEach(tool => server.registerTool(...tool));
Q3: MCP如何与现有系统集成? A3: 使用MCP作为中间层,通过工具封装现有系统API。例如,将CRM系统封装为MCP工具,使AI能够查询客户数据:
server.registerTool(
'get-customer-data',
{
title: '获取客户数据',
description: '查询客户信息',
inputSchema: z.object({ customerId: z.string() }),
outputSchema: z.object({ /* 客户数据结构 */ })
},
async ({ customerId }) => {
// 调用现有CRM API
const response = await fetch(`https://crm.example.com/api/customers/${customerId}`, {
headers: { 'Authorization': `Bearer ${process.env.CRM_TOKEN}` }
});
const customerData = await response.json();
return {
content: [{ type: 'text', text: JSON.stringify(customerData) }],
structuredContent: customerData
};
}
);
四、学习路径与资源导航
4.1 学习路径图
掌握MCP TypeScript SDK的渐进式学习路径:
-
基础阶段:
- 理解MCP核心概念(服务器、工具、资源、提示)
- 实现简单的MCP服务器和客户端
- 掌握Streamable HTTP传输方式
-
进阶阶段:
- 学习高级功能(动态配置、通知防抖)
- 实现完整的认证和授权机制
- 掌握测试策略和最佳实践
-
专家阶段:
- 设计高可用的MCP部署架构
- 优化性能和资源利用
- 构建复杂的工具生态系统
4.2 学习资源对比
| 资源类型 | 适用场景 | 优势 | 局限性 |
|---|---|---|---|
| 官方文档 | 全面了解MCP协议和SDK | 权威、详细 | 可能过于技术化 |
| 示例代码 | 快速上手具体功能 | 实践性强 | 覆盖场景有限 |
| 单元测试 | 理解边界情况和最佳实践 | 展示测试策略 | 碎片化,缺乏系统性 |
| 集成测试 | 了解系统交互 | 展示完整流程 | 复杂度高,入门门槛高 |
| API参考 | 查找特定方法和参数 | 准确、详细 | 缺乏上下文和示例 |
4.3 官方资源
- 项目仓库:通过以下命令获取完整代码
git clone https://gitcode.com/GitHub_Trending/ty/typescript-sdk - 核心实现:packages/server/src/server/mcp.ts
- 示例代码:
- 服务器示例:examples/server/
- 客户端示例:examples/client/
- 测试用例:test/integration/
结语:MCP赋能AI应用开发
MCP TypeScript SDK为构建标准化、可扩展的AI应用提供了强大工具。通过本文的学习,你已经掌握了从基础概念到高级应用的全流程知识。无论是构建简单的工具调用,还是复杂的多节点部署,MCP都能帮助你以一致的方式管理AI上下文,显著提升开发效率和系统可靠性。
随着AI技术的不断发展,MCP作为连接应用与LLM的标准化协议,将在构建智能应用中发挥越来越重要的作用。现在就开始你的MCP之旅,打造更强大、更灵活的AI应用吧!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0133- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
MiniCPM-V-4.6这是 MiniCPM-V 系列有史以来效率与性能平衡最佳的模型。它以仅 1.3B 的参数规模,实现了性能与效率的双重突破,在全球同尺寸模型中登顶,全面超越了阿里 Qwen3.5-0.8B 与谷歌 Gemma4-E2B-it。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
MusicFreeDesktop插件化、定制化、无广告的免费音乐播放器TypeScript00