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