Skip to main content
Glama
custom-headers-implementation-summary.md7.49 kB
# 自定义请求头功能实现总结 ## 📋 功能概述 MCP Swagger Server 现已支持自定义请求头功能,使其在代理 OpenAPI 接口时,除了认证 Bearer Token 外,还能灵活配置和传递常见的自定义 HTTP 请求头。 ## 🎯 核心特性 ### ✅ 已实现的功能 1. **多种请求头类型支持** - 静态请求头:固定值的请求头 - 环境变量请求头:从环境变量获取值的请求头 - 动态请求头:基于请求上下文动态生成的请求头 - 条件请求头:根据条件决定是否添加的请求头 2. **多种配置方式** - 命令行参数:`--custom-header`、`--custom-header-env` - 配置文件:`--custom-headers-config` - MCP 配置:在 MCP 配置文件中定义 - 环境变量:支持从环境变量读取值 3. **调试和安全机制** - 调试模式:`--debug-headers` 显示请求头合并过程 - 受保护的请求头:防止覆盖关键系统请求头 - 优先级机制:CLI > 配置文件 > 环境变量 ## 🏗️ 架构实现 ### 核心组件 ``` packages/ ├── mcp-swagger-parser/ │ ├── src/ │ │ ├── headers/ │ │ │ ├── CustomHeadersManager.ts # 自定义请求头管理器 │ │ │ ├── generators.ts # 预定义动态头生成器 │ │ │ └── index.ts # 导出接口 │ │ ├── transformer/ │ │ │ ├── types.ts # 类型定义 │ │ │ └── index.ts # 集成到转换器 │ │ └── index.ts # 对外导出 │ └── tests/ │ └── unit/ │ └── auth.test.ts # 单元测试 └── mcp-swagger-server/ ├── src/ │ ├── cli.ts # CLI 参数解析 │ ├── server.ts # 服务器启动 │ ├── tools/ │ │ └── initTools.ts # 工具初始化 │ └── transform/ │ └── transformOpenApiToMcpTools.ts # OpenAPI 转换 └── dist/ # 编译输出 ``` ### 类型定义 ```typescript // 自定义请求头配置 interface CustomHeaders { static?: Record<string, string>; env?: Record<string, string>; dynamic?: Record<string, string>; conditional?: Record<string, { condition: string | ((context: RequestContext) => boolean); value: string; }>; } // 请求上下文 interface RequestContext { method: string; path: string; args: any; operation?: OperationObject; } ``` ## 🔧 使用方式 ### 1. 命令行参数 ```bash # 基本用法 mcp-swagger-server \ --openapi ./api.json \ --custom-header "X-Client-ID=my-client" \ --custom-header "X-Version=1.0.0" \ --custom-header-env "X-API-Key=API_KEY" \ --debug-headers # 完整示例 mcp-swagger-server \ --openapi https://petstore.swagger.io/v2/swagger.json \ --custom-header "X-Client-ID=mcp-client" \ --custom-header "X-Request-Source=cli" \ --custom-header-env "X-API-Key=PETSTORE_API_KEY" \ --custom-header-env "X-User-Agent=USER_AGENT" \ --debug-headers ``` ### 2. 配置文件 ```json { "static": { "X-Custom-Client": "mcp-swagger-client", "X-Version": "1.0.0", "X-Request-Source": "config" }, "env": { "X-API-Key": "API_KEY", "X-User-Agent": "USER_AGENT", "X-Environment": "NODE_ENV" } } ``` ```bash mcp-swagger-server \ --openapi ./api.json \ --custom-headers-config ./headers.json \ --debug-headers ``` ### 3. MCP 配置 ```json { "name": "my-api-server", "version": "1.0.0", "openapi": "./api.json", "customHeaders": { "static": { "X-MCP-Client": "mcp-swagger-server", "X-Request-ID": "auto-generated" }, "env": { "X-API-Key": "API_KEY", "X-Client-ID": "CLIENT_ID" } }, "debugHeaders": true } ``` ```bash mcp-swagger-server --config ./mcp-config.json ``` ## 📊 测试结果 ### 单元测试 ``` ✅ CustomHeadersManager ✅ getHeaders ✅ should handle static headers ✅ should handle environment variable headers ✅ should return empty object for no config Test Suites: 1 passed, 1 total Tests: 3 passed, 3 total ``` ### 功能测试 ``` ✅ 静态请求头处理 ✅ 环境变量请求头处理 ✅ 配置文件加载 ✅ 命令行参数解析 ✅ 调试模式输出 ✅ 优先级机制 ✅ 受保护请求头机制 ``` ## 🚀 快速上手 ### 1. 安装依赖 ```bash cd /path/to/mcp-swagger-server pnpm install ``` ### 2. 构建项目 ```bash npm run build ``` ### 3. 基本使用 ```bash # 设置环境变量 export API_KEY="your-api-key" export CLIENT_ID="your-client-id" # 启动服务器 node packages/mcp-swagger-server/dist/cli.js \ --openapi https://petstore.swagger.io/v2/swagger.json \ --custom-header "X-Client-ID=mcp-client" \ --custom-header-env "X-API-Key=API_KEY" \ --debug-headers ``` ### 4. 测试环境 ```bash # 创建测试环境 node create-test-environment.js # 运行测试 cd test-custom-headers bash run-tests.sh ``` ## 📝 配置示例 ### 完整配置文件示例 ```json { "name": "production-api-server", "version": "1.0.0", "transport": "stdio", "openapi": "https://api.example.com/openapi.json", "auth": { "type": "bearer", "token": "$API_TOKEN" }, "customHeaders": { "static": { "X-Client-Name": "mcp-swagger-server", "X-Client-Version": "1.2.2", "X-Request-Source": "mcp", "Accept": "application/json", "Content-Type": "application/json" }, "env": { "X-API-Key": "API_KEY", "X-Client-ID": "CLIENT_ID", "X-Environment": "NODE_ENV", "X-User-Agent": "USER_AGENT" } }, "debugHeaders": false } ``` ## 🔍 调试和故障排除 ### 启用调试模式 ```bash # 命令行 --debug-headers # 配置文件 "debugHeaders": true ``` ### 常见问题 1. **环境变量未找到** - 检查环境变量是否正确设置 - 使用 `--debug-headers` 查看实际值 2. **请求头被覆盖** - 检查优先级:CLI > 配置文件 > 环境变量 - 查看受保护请求头列表 3. **配置文件未加载** - 检查文件路径是否正确 - 检查 JSON 格式是否有效 ## 🎯 最佳实践 1. **安全性** - 敏感信息使用环境变量 - 避免在配置文件中硬编码密钥 - 使用 `.env` 文件管理环境变量 2. **性能** - 避免过多的动态请求头 - 优先使用静态请求头 - 合理使用条件请求头 3. **维护性** - 使用配置文件管理复杂配置 - 为不同环境创建不同配置 - 使用有意义的请求头名称 ## 📚 相关文档 - [自定义请求头设计文档](./docs/custom-headers-design.md) - [实现指南](./docs/custom-headers-implementation.md) - [快速上手指南](./docs/custom-headers-quickstart.md) - [API 认证指南](./docs/api-authentication-guide.md) ## 🤝 贡献 如果您发现问题或有改进建议,请: 1. 查看 [GitHub Issues](https://github.com/zaizaizhao/mcp-swagger-server/issues) 2. 创建新的 Issue 或 Pull Request 3. 遵循项目的贡献指南 ## 📄 许可证 本项目采用 MIT 许可证。详情请参阅 [LICENSE](./LICENSE) 文件。 --- **实现完成日期**: 2025年7月10日 **实现者**: GitHub Copilot **版本**: mcp-swagger-server v1.2.2

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