
MCP-Bench 是一个全面的评估框架,旨在通过模型上下文协议(MCP)来评估大型语言模型(LLMs)在工具使用场景中的能力。该基准测试提供了一个端到端的流程,用于评估不同 LLM 在发现、选择和利用工具解决实际任务方面的有效性。
| 排名 | 模型 | 总分 |
|---|---|---|
| 1 | gpt-5 | 0.749 |
| 2 | o3 | 0.715 |
| 3 | gpt-oss-120b | 0.692 |
| 4 | gemini-2.5-pro | 0.690 |
| 5 | claude-sonnet-4 | 0.681 |
| 6 | qwen3-235b-a22b-2507 | 0.678 |
| 7 | glm-4.5 | 0.668 |
| 8 | gpt-oss-20b | 0.654 |
| 9 | kimi-k2 | 0.629 |
| 10 | qwen3-30b-a3b-instruct-2507 | 0.627 |
| 11 | gemini-2.5-flash-lite | 0.598 |
| 12 | gpt-4o | 0.595 |
| 13 | gemma-3-27b-it | 0.582 |
| 14 | llama-3-3-70b-instruct | 0.558 |
| 15 | gpt-4o-mini | 0.557 |
| 16 | mistral-small-2503 | 0.530 |
| 17 | llama-3-1-70b-instruct | 0.510 |
| 18 | nova-micro-v1 | 0.508 |
| 19 | llama-3-2-90b-vision-instruct | 0.495 |
| 20 | llama-3-1-8b-instruct | 0.428 |
总分代表了所有评估维度上的平均表现,包括基于规则的模式理解、LLM 判断的任务完成度、工具使用以及规划效果。分数是在单服务器和多服务器设置下平均得出的。
git clone https://github.com/accenture/mcp-bench.git
cd mcp-bench
conda create -n mcpbench python=3.10
conda activate mcpbench
cd mcp_servers
# 安装 MCP 服务器依赖
bash ./install.sh
cd ..
# 创建包含 API 密钥的 .env 文件
# 默认设置同时使用 OpenRouter 和 Azure OpenAI
# 对于仅使用 Azure OpenAI 的情况,还需在文件 benchmark_config.yaml(第205行)中设置你的 API 版本
# 对于仅使用 OpenRouter 的设置,请参阅下面的“可选:仅使用 OpenRouter API”部分
cat > .env << EOF
export OPENROUTER_API_KEY="your_openrouterkey_here"
export AZURE_OPENAI_API_KEY="your_azureopenai_apikey_here"
export AZURE_OPENAI_ENDPOINT="your_azureopenai_endpoint_here"
EOF
一些 MCP 服务器需要外部 API 密钥才能正常工作。这些密钥会自动从 ./mcp_servers/api_key 加载。你需要自己在文件 ./mcp_servers/api_key 中设置这些密钥:
# 查看已配置的 API 密钥
cat ./mcp_servers/api_key
所需 API 密钥包括(这些 API 密钥都是免费且容易获取的。你可以在10分钟内获得所有这些密钥):
NPS_API_KEY:国家公园服务 API 密钥(用于 nationalparks 服务器)- 获取 API 密钥NASA_API_KEY:NASA 开放数据 API 密钥(用于 nasa-mcp 服务器)- 获取 API 密钥HF_TOKEN:Hugging Face 令牌(用于 huggingface-mcp-server)- 获取令牌GOOGLE_MAPS_API_KEY:Google 地图 API 密钥(用于 mcp-google-map 服务器)- 获取 API 密钥NCI_API_KEY:国家癌症研究所 API 密钥(用于 biomcp 服务器)- 获取 API 密钥 此 API 密钥注册网站可能需要美国 IP 才能访问,如果你遇到获取此 API 密钥的问题,请参阅问题 #10。# 1. 验证所有 MCP 服务器是否可以连接
##你应该看到 "28/28 服务器已连接"
##并且 "所有成功连接的服务器返回了工具!" 在运行后
python ./utils/collect_mcp_info.py
# 2. 列出可用模型
source .env
python run_benchmark.py --list-models
# 3. 运行基准测试(以 gpt-oss-20b 为例)
##必须使用 o4-mini 作为评判模型(在 ./benchmark/runner.py 的第429-436行硬编码)以重现结果。
## 运行所有任务
source .env
python run_benchmark.py --models gpt-oss-20b
## 单服务器任务
source .env
python run_benchmark.py --models gpt-oss-20b \
--tasks-file tasks/mcpbench_tasks_single_runner_format.json
## 两服务器任务
source .env
python run_benchmark.py --models gpt-oss-20b \
--tasks-file tasks/mcpbench_tasks_multi_2server_runner_format.json
## 三服务器任务
source .env
python run_benchmark.py --models gpt-oss-20b \
--tasks-file tasks/mcpbench_tasks_multi_3server_runner_format.json
要添加来自 OpenRouter 的新模型:
在 OpenRouter 上找到你的模型
anthropic/claude-sonnet-4 或 meta-llama/llama-3.3-70b-instruct)添加模型配置
llm/factory.py 并在 OpenRouter 部分(大约第152行)添加你的模型configs["your-model-name"] = ModelConfig(
name="your-model-name",
provider_type="openrouter",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1",
model_name="provider/model-id" # 来自 OpenRouter 的确切模型 ID
)
验证模型可用性
source .env
python run_benchmark.py --list-models
# 你的新模型应该出现在列表中
使用你的模型运行基准测试
source .env
python run_benchmark.py --models your-model-name
如果你只想使用 OpenRouter 而不使用 Azure:
cat > .env << EOF
OPENROUTER_API_KEY=your_openrouterkey_here
EOF
编辑 llm/factory.py 并注释掉 Azure 部分(第69-101行),然后通过 OpenRouter 添加 Azure 模型:
# 注释或删除 Azure 部分(第69-109行)
# if os.getenv("AZURE_OPENAI_API_KEY") and os.getenv("AZURE_OPENAI_ENDPOINT"):
# configs["o4-mini"] = ModelConfig(...)
# ...
# 通过 OpenRouter 添加 Azure 模型(在 OpenRouter 部分大约第106行)
if os.getenv("OPENROUTER_API_KEY"):
# 通过 OpenRouter 添加 OpenAI 模型
configs["gpt-4o"] = ModelConfig(
name="gpt-4o",
provider_type="openrouter",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1",
model_name="openai/gpt-4o"
)
configs["gpt-4o-mini"] = ModelConfig(
name="gpt-4o-mini",
provider_type="openrouter",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1",
model_name="openai/gpt-4o-mini"
)
configs["o3"] = ModelConfig(
name="o3",
provider_type="openrouter",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1",
model_name="openai/o3"
)
configs["o4-mini"] = ModelConfig(
name="o4-mini",
provider_type="openrouter",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1",
model_name="openai/o4-mini"
)
configs["gpt-5"] = ModelConfig(
name="gpt-5",
provider_type="openrouter",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1",
model_name="openai/gpt-5"
)
# 保持现有的 OpenRouter 模型...
这样所有模型都将通过 OpenRouter 统一 API 访问。
MCP-Bench 包含 28 种多样化的 MCP 服务器:
mcp-bench/
├── agent/ # 任务执行代理
│ ├── __init__.py
│ ├── executor.py # 具有重试逻辑的多轮任务执行器
│ └── execution_context.py # 执行上下文管理
├── benchmark/ # 评估框架
│ ├── __init__.py
│ ├── evaluator.py # LLM 作为评判者的评估指标
│ ├── runner.py # 基准测试协调器
│ ├── results_aggregator.py # 结果聚合和统计
│ └── results_formatter.py # 结果格式化和显示
├── config/ # 配置管理
│ ├── __init__.py
│ ├── benchmark_config.yaml # 基准测试配置
│ └── config_loader.py # 配置加载器
├── llm/ # LLM 提供商抽象
│ ├── __init__.py
│ ├── factory.py # 多提供商模型工厂
│ └── provider.py # 统一提供商接口
├── mcp_modules/ # MCP 服务器管理
│ ├── __init__.py
│ ├── connector.py # 服务器连接处理
│ ├── server_manager.py # 多服务器协调
│ ├── server_manager_persistent.py # 持久连接管理器
│ └── tool_cache.py # 工具调用缓存机制
├── synthesis/ # 任务生成
│ ├── __init__.py
│ ├── task_synthesis.py # 具有模糊转换的任务生成
│ ├── generate_benchmark_tasks.py # 批量任务生成脚本
│ ├── benchmark_generator.py # 统一基准任务生成器
│ ├── README.md # 任务合成文档
│ └── split_combinations/ # 服务器组合拆分
│ ├── mcp_2server_combinations.json
│ └── mcp_3server_combinations.json
├── utils/ # 实用工具
│ ├── __init__.py
│ ├── collect_mcp_info.py # 服务器发现和工具收集
│ ├── local_server_config.py # 本地服务器配置
│ └── error_handler.py # 错误处理实用工具
├── tasks/ # 基准测试任务文件
│ ├── mcpbench_tasks_single_runner_format.json
│ ├── mcpbench_tasks_multi_2server_runner_format.json
│ └── mcpbench_tasks_multi_3server_runner_format.json
├