前言
在MCP(模型上下文协议)的世界中,SDK(软件开发工具包)是开发者构建应用的重要工具。作为MCP生态中最活跃的SDK之一,TypeScript-SDK提供了简洁而强大的接口,帮助开发者快速构建高效的MCP应用。本文将带你深入了解MCP的TypeScript-SDK,掌握其核心概念和使用方法,让你能够轻松开发基于MCP的智能应用。
什么是MCP TypeScript-SDK?
MCP TypeScript-SDK是模型上下文协议的官方TypeScript实现,它为开发者提供了一套完整的工具,用于创建符合MCP规范的客户端和服务器应用。简单来说,这个SDK就像是MCP世界的"瑞士军刀",帮助你:
- 创建MCP服务器,向AI模型提供各种资源和工具
- 开发MCP客户端,连接并使用这些资源和工具
- 处理所有MCP协议消息和生命周期事件
TypeScript-SDK的设计理念是"简单易用但功能强大",即使你不是TypeScript专家,也能轻松上手并构建复杂的MCP应用。
为什么选择TypeScript-SDK?
在众多编程语言中,TypeScript-SDK具有以下优势:
- 类型安全:TypeScript的静态类型系统能够在编译时捕获许多潜在错误
- 开发效率高:完善的类型定义和智能提示提高了开发速度
- 生态系统丰富:能够与Node.js、Express等流行框架无缝集成
- 官方支持:作为MCP的官方SDK之一,它始终与最新协议保持同步
- 跨平台:可以在浏览器、Node.js甚至Deno等多种环境中运行
SDK的核心组件
MCP TypeScript-SDK主要包含以下核心组件:
1. 服务器(Server)
服务器是SDK中最常用的组件之一,它允许你创建MCP服务器以向AI模型提供各种功能。SDK提供两种服务器实现:
- 低级服务器(Server):提供完全控制,适合需要自定义行为的高级用例
- 高级服务器(McpServer):提供便捷的API,简化资源、工具和提示的创建
2. 客户端(Client)
客户端组件用于连接MCP服务器并使用其功能。它提供了一套简洁的API,用于:
- 列出和调用工具
- 读取资源
- 获取和使用提示模板
3. 传输层(Transport)
传输层处理客户端和服务器之间的通信。SDK支持多种传输方式:
- 标准输入/输出(stdio):适用于命令行工具和本地集成
- HTTP + SSE:用于远程服务器通信
- 可流式HTTP:支持双向通信的现代HTTP传输
4. 工具链(Utilities)
SDK还提供了一系列实用工具,帮助开发者处理:
- 资源模板
- OAuth认证
- 错误处理
- 类型转换
快速上手:创建你的第一个MCP服务器
让我们通过一个简单例子,体验TypeScript-SDK的强大。以下代码创建了一个基本的MCP服务器,提供计算器功能和动态问候资源:
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";// 创建MCP服务器
const server = new McpServer({name: "简易演示服务器",version: "1.0.0"
});// 添加加法工具
server.tool("add", { a: z.number(), b: z.number() },async ({ a, b }) => ({content: [{ type: "text", text: String(a + b) }]})
);// 添加动态问候资源
server.resource("greeting",new ResourceTemplate("greeting://{name}", { list: undefined }),async (uri, { name }) => ({contents: [{uri: uri.href,text: `你好,${name}!`}]})
);// 启动服务器(通过标准输入/输出传输)
const transport = new StdioServerTransport();
await server.connect(transport);
这个简单的例子展示了SDK的核心功能:
- 创建服务器实例
- 定义工具(使用Zod进行参数验证)
- 创建动态资源(使用资源模板)
- 连接传输层启动服务器
深入理解:SDK的核心概念
要掌握TypeScript-SDK,理解以下核心概念至关重要:
资源(Resources)
资源是提供给AI模型的只读信息。在SDK中,你可以创建两种类型的资源:
1. 静态资源:URI固定,内容可以是静态的或动态生成的
server.resource("配置信息","config://app",async (uri) => ({contents: [{uri: uri.href,text: "应用配置信息在这里"}]})
);
2. 动态资源:使用资源模板创建,URI包含参数
server.resource("用户资料",new ResourceTemplate("users://{userId}/profile", { list: undefined }),async (uri, { userId }) => ({contents: [{uri: uri.href,text: `用户${userId}的资料数据`}]})
);
工具(Tools)
工具允许AI执行操作并获取结果。SDK中的工具定义包括:
- 名称
- 参数模式(使用Zod定义)
- 处理函数
// 带外部API调用的异步工具
server.tool("fetch-weather",{ city: z.string() },async ({ city }) => {const response = await fetch(`https://api.weather.com/${city}`);const data = await response.text();return {content: [{ type: "text", text: data }]};}
);
提示(Prompts)
提示是可重用的模板,帮助AI与服务器高效交互:
server.prompt("review-code"