13.6 MCP 输出限制与管理
第 13 章 · MCP 高级应用 · 第4部分:模型上下文协议 MCP
了解和管理 MCP 服务器的输出限制,确保高效使用。
输出限制#
默认限制#
MCP 工具输出有默认限制:
- 令牌限制: 10,000 令牌
- 字符限制: 约 40,000 字符
- 响应时间: 30 秒超时
增加输出限制#
使用 MAX_MCP_OUTPUT_TOKENS 环境变量增加限制:
设置 50,000 令牌限制
MAX_MCP_OUTPUT_TOKENS=50000 claude
设置 100,000 令牌限制
MAX_MCP_OUTPUT_TOKENS=100000 claude
超时设置#
使用 MCP_TIMEOUT 环境变量设置超时:
bash复制# 设置 10 秒超时MCP_TIMEOUT=10000 claude # 设置 60 秒超时MCP_TIMEOUT=60000 claude
输出管理#
分页处理#
当输出超过限制时,使用分页:
第 1 页
查询用户表的前 100 条记录
第 2 页
查询用户表的第 101-200 条记录
第 3 页
查询用户表的第 201-300 条记录
bash复制### 流式输出 使用流式输出处理大结果:
bash
流式输出
流式输出所有用户数据
输出到文件
将用户数据输出到文件 users.json
批处理#
批处理#
使用批处理处理大量数据:
bash复制# 批量处理批量处理用户数据,每批 100 条
输出优化#
查询优化#
优化查询以减少输出:
bash复制# 只查询需要的列查询用户表的 ID 和姓名 # 使用过滤条件查询用户表中活跃的用户 # 限制结果数量查询用户表的前 100 条记录
数据聚合#
聚合数据以减少输出:
聚合数据
查询用户表的总数和平均年龄
分组统计
按部门统计用户数量
bash复制### 缓存结果 缓存结果以减少重复查询: ```bash # 启用缓存 启用用户表缓存 # 查看缓存 显示缓存状态 # 清除缓存 清除用户表缓存 ``` ## 输出监控 ### 监控输出大小 ```bash # 查看输出统计 显示 MCP 输出统计 ``` **输出示例**: ``` MCP 输出统计: github: > - 平均输出:5,000 令牌 > - 最大输出:15,000 令牌 > - 超限次数:5 database: > - 平均输出:8,000 令牌 > - 最大输出:25,000 令牌 > - 超限次数:10 ``` ### 监控响应时间 # 查看响应时间 显示 MCP 响应时间 ``` > **输出示例**: ```> MCP 响应时间: github: > - 平均响应:100ms > - 最大响应:500ms > - 超时次数:2 database: > - 平均响应:50ms > - 最大响应:200ms > - 超时次数:1 ## 输出警告 ### 警告类型 #### 1. 输出超限警告 警告:MCP 工具输出超过 10,000 令牌限制 建议:增加 MAX_MCP_OUTPUT_TOKENS 或优化查询 #### 2. 响应超时警告 警告:MCP 工具响应超过 30 秒超时 建议:增加 MCP_TIMEOUT 或优化查询 #### 3. 输出截断警告 警告:MCP 工具输出被截断 建议:使用分页或流式输出 ### 处理警告 ```bash # 处理输出超限警告 增加 MAX_MCP_OUTPUT_TOKENS 到 50,000 # 处理响应超时警告 增加 MCP_TIMEOUT 到 60 秒 # 处理输出截断警告 使用分页查询 ``` ## 输出格式化 ### JSON 格式 ```bash # 输出为 JSON 查询用户表,输出为 JSON ``` ### CSV 格式 ```bash # 输出为 CSV 查询用户表,输出为 CSV ``` ### Markdown 格式 ```bash # 输出为 Markdown 查询用户表,输出为 Markdown 表格 ``` ## 输出存储 ## 输出存储 ### 保存到文件 ```bash # 保存到文件 将用户数据保存到 users.json # 追加到文件 将用户数据追加到 users.json ``` ### 导出到数据库 ```bash # 导出到数据库 将用户数据导出到数据库 ``` ### 上传到云存储 ```bash # 上传到 S3 将用户数据上传到 S3 ``` ## 输出安全 ### 敏感数据过滤 ```bash # 过滤敏感数据 查询用户表,过滤密码字段 ``` ### 数据脱敏 ```bash # 脱敏数据 查询用户表,脱敏邮箱地址 ``` ### 访问控制 ```bash # 限制输出访问 限制用户表输出只能被管理员访问 ``` ## 最佳实践 ### 1. 合理设置限制 ```bash # 根据需求设置限制 MAX_MCP_OUTPUT_TOKENS=50000 claude MCP_TIMEOUT=30000 claude ``` ### 2. 优化查询 ```bash # 只查询需要的数据 查询用户表的 ID 和姓名 # 使用过滤条件 查询用户表中活跃的用户 # 限制结果数量 查询用户表的前 100 条记录 ``` ### 3. 使用分页 ```bash # 使用分页处理大数据 查询用户表,每页 100 条 ``` ### 4. 启用缓存 ```bash # 启用缓存减少重复查询 启用用户表缓存 ``` ### 5. 监控输出 ```bash # 定期监控输出统计 显示 MCP 输出统计 # 识别超限情况 显示超限次数 ``` ## 故障排除 ### 输出超限 > **问题**: 输出超过限制 > **解决方案**: ```bash # 1. 增加限制 MAX_MCP_OUTPUT_TOKENS=50000 claude # 2. 优化查询 只查询需要的列 # 3. 使用分页 分页查询数据 # 4. 使用流式输出 流式输出数据 ``` ### 响应超时 > **问题**: 响应超时 > **解决方案**: ```bash # 1. 增加超时 MCP_TIMEOUT=60000 claude # 2. 优化查询 使用索引优化查询 # 3. 减少数据量 限制查询结果数量 # 4. 使用后台任务 在后台运行长时间查询 ``` ### 输出截断 > **问题**: 输出被截断 > **解决方案**: ```bash # 1. 使用分页 分页查询数据 # 2. 使用流式输出 流式输出数据 # 3. 保存到文件 将数据保存到文件 # 4. 增加限制 MAX_MCP_OUTPUT_TOKENS=100000 claude ```