Skip to main content
Glama
mcp-response-fix-summary.md5.57 kB
# MCP 工具响应格式修复总结 > 日期:2025-06-28 > 修复状态:✅ 完成 > 兼容性:100% 符合 MCP 官方标准 ## 📋 修复概述 根据 `mcp-tool-response-validation.md` 文档的分析,我们识别并修复了 MCPToolResponse 接口中所有不符合 MCP 官方标准的问题。 ## 🔍 识别的问题 ### 1. 资源类型不匹配 ❌ - **问题**:只有通用的 `resource` 类型,缺少 `resource_link` 区分 - **影响**:无法正确表示不同类型的资源引用 ### 2. 缺少 annotations 支持 ❌ - **问题**:所有 ContentBlock 都缺少标准的 `annotations` 字段 - **影响**:无法提供内容的元数据和展示提示 ### 3. _meta 字段位置错误 ❌ - **问题**:`_meta` 字段只在 Response 级别,缺少 ContentBlock 级别支持 - **影响**:无法为单个内容块提供元数据 ## 🔧 修复方案 ### 1. 完善类型定义 创建了完整的 TypeScript 接口定义: ```typescript // 基础注解接口 export interface Annotations { audience?: ("user" | "assistant")[]; priority?: number; lastModified?: string; } // 各种内容类型 export interface TextContent { type: "text"; text: string; annotations?: Annotations; _meta?: { [key: string]: unknown }; } export interface ImageContent { type: "image"; data: string; mimeType: string; annotations?: Annotations; _meta?: { [key: string]: unknown }; } export interface AudioContent { type: "audio"; data: string; mimeType: string; annotations?: Annotations; _meta?: { [key: string]: unknown }; } export interface ResourceLink { type: "resource_link"; uri: string; name?: string; description?: string; mimeType?: string; annotations?: Annotations; _meta?: { [key: string]: unknown }; } export interface EmbeddedResource { type: "resource"; resource: TextResourceContents | BlobResourceContents; annotations?: Annotations; _meta?: { [key: string]: unknown }; } // 内容块联合类型 export type ContentBlock = | TextContent | ImageContent | AudioContent | ResourceLink | EmbeddedResource; // 最终的响应接口 export interface MCPToolResponse { content: ContentBlock[]; structuredContent?: { [key: string]: unknown }; isError?: boolean; _meta?: { [key: string]: unknown }; } ``` ### 2. 添加辅助函数 创建了便捷的内容创建函数: ```typescript function createTextContent(text: string, meta?: { [key: string]: unknown }): TextContent; function createImageContent(data: string, mimeType: string, meta?: { [key: string]: unknown }): ImageContent; function createAudioContent(data: string, mimeType: string, meta?: { [key: string]: unknown }): AudioContent; function createResourceLink(uri: string, name?: string, description?: string, mimeType?: string, meta?: { [key: string]: unknown }): ResourceLink; ``` ### 3. 更新实现代码 修改了现有代码中创建内容的地方,使用新的辅助函数并添加元数据: ```typescript // 修复前 content: [{ type: 'text', text: fullResponseText }] // 修复后 content: [createTextContent(fullResponseText, { httpStatus: statusCode, method: method.toUpperCase(), url, timestamp: new Date().toISOString() })] ``` ## ✅ 验证结果 ### 1. 兼容性测试 ✅ 创建了 `test-mcp-compliance.ts` 验证文件,所有测试通过: - ✅ 文本内容创建成功 - ✅ 图像内容创建成功 - ✅ 音频内容创建成功 - ✅ 资源链接创建成功 - ✅ 嵌入资源创建成功 - ✅ 完整响应创建成功 - ✅ 错误响应创建成功 ### 2. 构建测试 ✅ 整个项目构建成功,包括: - ✅ mcp-swagger-parser 包构建成功 - ✅ mcp-swagger-server 包构建成功 - ✅ mcp-swagger-api 包构建成功 - ✅ mcp-swagger-ui 包构建成功 ### 3. 类型检查 ✅ 所有 TypeScript 类型检查通过,无编译错误。 ## 📊 修复前后对比 | 特性 | 修复前 | 修复后 | 符合度提升 | |------|--------|--------|-----------| | 基本结构 | ✅ | ✅ | 0% | | 文本内容 | ✅ | ✅ | 0% | | 图像内容 | ✅ | ✅ | 0% | | 音频内容 | ✅ | ✅ | 0% | | isError | ✅ | ✅ | 0% | | structuredContent | ✅ | ✅ | 0% | | 资源类型 | ❌ (60%) | ✅ (100%) | +40% | | annotations 支持 | ❌ (0%) | ✅ (100%) | +100% | | _meta 位置 | ❌ (50%) | ✅ (100%) | +50% | | **总体符合度** | **80%** | **100%** | **+20%** | ## 🎯 影响和好处 ### 1. 标准兼容性 ✅ - 现在 100% 符合 MCP 官方标准 - 可以与所有 MCP 客户端正常工作 - 未来升级更容易 ### 2. 功能增强 ✅ - 支持 annotations 提供更丰富的内容元数据 - 区分不同类型的资源引用 - 更灵活的 _meta 字段使用 ### 3. 向后兼容 ✅ - 现有代码继续正常工作 - 新功能为可选项,不破坏现有实现 - 渐进式升级路径 ### 4. 开发体验 ✅ - 提供了便捷的辅助函数 - 更好的 TypeScript 类型支持 - 清晰的文档和示例 ## 📚 相关文档 - [MCP 工具响应验证分析](./mcp-tool-response-validation.md) - 详细分析文档 - [MCP 与 JSON-RPC 2.0 关系说明](./mcp-jsonrpc-relationship.md) - 协议关系解析 - [test-mcp-compliance.ts](../packages/mcp-swagger-parser/test-mcp-compliance.ts) - 验证测试代码 ## 🎉 总结 通过这次修复,我们的 MCP 工具响应格式现在完全符合官方标准,提供了更好的功能性和互操作性。所有修改都保持了向后兼容性,确保现有代码能够继续正常工作。 这是一个成功的标准化改进!✨

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zaizaizhao/mcp-swagger-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server