321 lines
7.3 KiB
Markdown
321 lines
7.3 KiB
Markdown
# 自定义请求头功能实现总结
|
||
|
||
## 📋 功能概述
|
||
|
||
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
|