返回市场
MCP基准测试

MCP基准测试

作者:Accenture385 星标更新:2025-10-08

项目介绍

MCP-Bench:通过MCP服务器评估大型语言模型在复杂现实任务中的工具使用能力

arXiv Leaderboard License: Apache 2.0 Python Version MCP Protocol

MCP-Bench

概述

MCP-Bench 是一个全面的评估框架,旨在通过模型上下文协议(MCP)来评估大型语言模型(LLMs)在工具使用场景中的能力。该基准测试提供了一个端到端的流程,用于评估不同 LLM 在发现、选择和利用工具解决实际任务方面的有效性。

新闻

  • [2025-09] MCP-Bench 被接受为 NeurIPS 2025 工作坊关于代理扩展环境的一部分。

排行榜

排名模型总分
1gpt-50.749
2o30.715
3gpt-oss-120b0.692
4gemini-2.5-pro0.690
5claude-sonnet-40.681
6qwen3-235b-a22b-25070.678
7glm-4.50.668
8gpt-oss-20b0.654
9kimi-k20.629
10qwen3-30b-a3b-instruct-25070.627
11gemini-2.5-flash-lite0.598
12gpt-4o0.595
13gemma-3-27b-it0.582
14llama-3-3-70b-instruct0.558
15gpt-4o-mini0.557
16mistral-small-25030.530
17llama-3-1-70b-instruct0.510
18nova-micro-v10.508
19llama-3-2-90b-vision-instruct0.495
20llama-3-1-8b-instruct0.428

总分代表了所有评估维度上的平均表现,包括基于规则的模式理解、LLM 判断的任务完成度、工具使用以及规划效果。分数是在单服务器和多服务器设置下平均得出的。

快速开始

安装

  1. 克隆仓库
git clone https://github.com/accenture/mcp-bench.git
cd mcp-bench
  1. 安装依赖
conda create -n mcpbench python=3.10
conda activate mcpbench
cd mcp_servers
# 安装 MCP 服务器依赖
bash ./install.sh
cd ..
  1. 设置环境变量
# 创建包含 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
  1. 配置 MCP 服务器 API 密钥

一些 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 的新模型:

  1. 在 OpenRouter 上找到你的模型

    • 访问 OpenRouter 模型 浏览可用模型
    • 复制模型 ID(例如,anthropic/claude-sonnet-4meta-llama/llama-3.3-70b-instruct
  2. 添加模型配置

    • 编辑 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
    )
    
  3. 验证模型可用性

    source .env
    python run_benchmark.py --list-models
    # 你的新模型应该出现在列表中
    
  4. 使用你的模型运行基准测试

    source .env
    python run_benchmark.py --models your-model-name
    

可选:仅使用 OpenRouter API

如果你只想使用 OpenRouter 而不使用 Azure:

  1. 设置仅包含 OpenRouter 的 .env 文件:
cat > .env << EOF
OPENROUTER_API_KEY=your_openrouterkey_here
EOF
  1. 修改代码以通过 OpenRouter 访问 Azure 模型:

编辑 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 服务器

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
├