大语言模型工具使用评估框架

MCP-Bench是一个用于评估大型语言模型在工具使用场景中能力的综合框架,通过模型上下文协议(MCP)实现端到端的评估流程。

  • by ChetanMadadi
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ChetanMadadi/MCP-Attacks-Overtool

使用说明

MCP-Bench:通过MCP服务器使用大型语言模型(LLM)代理进行复杂现实世界任务的基准测试工具

概述

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

新闻

  • [2025-09] MCP-Bench 被接受为2025年NeurIPS大会上关于智能体扩展环境的研讨会论文。

排行榜

排名 模型 总体得分
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

总评分为所有评估维度上的平均表现,包括基于规则的模式理解、由大型语言模型(以o4-mini作为评判模型)评判的任务完成度、工具使用以及规划有效性。评分是针对单服务器和多服务器设置的平均值。

快速入门

安装

  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
# Install MCP server dependencies
bash ./install.sh
cd ..
  1. 设置环境变量
# Create .env file with API keys
# Default setup uses both OpenRouter and Azure OpenAI
# For Azure OpenAI, you also need to set your API version in file benchmark_config.yaml (line205)
# For OpenRouter-only setup, see "Optional: Using only OpenRouter API" section below
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:

# View configured API keys
cat ./mcp_servers/api_key

所需API密钥包括(这些API密钥免费且易于获取。您可以在10分钟内获取所有密钥):

  • NPS_API_KEY国家公园管理局API密钥(用于nationalparks服务器)- 获取API密钥
  • NASA_API_KEYNASA开放数据API密钥(用于nasa-mcp服务器)- 获取API密钥
  • HF_TOKENHugging Face 令牌(用于 huggingface-mcp-server)- 获取令牌
  • GOOGLE_MAPS_API_KEY谷歌地图API密钥(用于mcp-google-map服务器)- 获取API密钥
  • NCI_API_KEY国家癌症研究所API密钥(用于biomcp服务器)- 获取API密钥 这个API密钥注册网站可能需要美国IP地址才能访问,如果您在获取这个API密钥时遇到困难,请参阅问题#10。

基本用法

# 1. Verify all MCP servers can be connected
##You should see "28/28 servers connected" 
##and "All successfully connected servers returned tools!" after running this
python ./utils/collect_mcp_info.py


# 2. List available models
source .env
python run_benchmark.py --list-models 

# 3. Run benchmark (gpt-oss-20b as an example)
##Must use o4-mini as judge model (hard-coded in line 429-436 in ./benchmark/runner.py) to reproduce the results.
## run all tasks
source .env
python run_benchmark.py --models gpt-oss-20b

## single server tasks
source .env
python run_benchmark.py --models gpt-oss-20b \
--tasks-file tasks/mcpbench_tasks_single_runner_format.json

## two server tasks
source .env
python run_benchmark.py --models gpt-oss-20b \
--tasks-file tasks/mcpbench_tasks_multi_2server_runner_format.json

## three server tasks
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-4 或者 meta-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"  # The exact model ID from OpenRouter
    )
    
  3. 验证模型是否可用

    source .env
    python run_benchmark.py --list-models
    # Your new model should appear in the list
    
  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模型:

# Comment out or remove the Azure section (lines 69-109)
# if os.getenv("AZURE_OPENAI_API_KEY") and os.getenv("AZURE_OPENAI_ENDPOINT"):
#     configs["o4-mini"] = ModelConfig(...)
#     ...

# Add Azure models through OpenRouter (in the OpenRouter section around line 106)
if os.getenv("OPENROUTER_API_KEY"):
    # Add OpenAI models via OpenRouter
    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"
    )
    
    
    # Keep existing OpenRouter models...

这样所有模型都将通过OpenRouter的统一API进行访问。

MCP 服务器

MCP-Bench 包含 28 种不同的 MCP 服务器:

项目结构

mcp-bench/
├── agent/                     # Task execution agents
│   ├── __init__.py
│   ├── executor.py           # Multi-round task executor with retry logic
│   └── execution_context.py  # Execution context management
├── benchmark/                 # Evaluation framework
│   ├── __init__.py
│   ├── evaluator.py          # LLM-as-judge evaluation metrics
│   ├── runner.py             # Benchmark orchestrator
│   ├── results_aggregator.py # Results aggregation and statistics
│   └── results_formatter.py  # Results formatting and display
├── config/                    # Configuration management
│   ├── __init__.py
│   ├── benchmark_config.yaml # Benchmark configuration
│   └── config_loader.py      # Configuration loader
├── llm/                       # LLM provider abstractions
│   ├── __init__.py
│   ├── factory.py            # Model factory for multiple providers
│   └── provider.py           # Unified provider interface
├── mcp_modules/              # MCP server management
│   ├── __init__.py
│   ├── connector.py          # Server connection handling
│   ├── server_manager.py     # Multi-server orchestration
│   ├── server_manager_persistent.py # Persistent connection manager
│   └── tool_cache.py         # Tool call caching mechanism
├── synthesis/                # Task generation
│   ├── __init__.py
│   ├── task_synthesis.py     # Task generation with fuzzy conversion
│   ├── generate_benchmark_tasks.py # Batch task generation script
│   ├── benchmark_generator.py # Unified benchmark task generator
│   ├── README.md             # Task synthesis documentation
│   └── split_combinations/   # Server combination splits
│       ├── mcp_2server_combinations.json
│       └── mcp_3server_combinations.json
├── utils/                    # Utilities
│   ├── __init__.py
│   ├── collect_mcp_info.py  # Server discovery and tool collection
│   ├── local_server_config.py # Local server configuration
│   └── error_handler.py     # Error handling utilities
├── tasks/                    # Benchmark task files
│   ├── mcpbench_tasks_single_runner_format.json
│   ├── mcpbench_tasks_multi_2server_runner_format.json
│   └── mcpbench_tasks_multi_3server_runner_format.json
├── mcp_servers/             # MCP server implementations (28 servers)
│   ├── api_key              # API keys configuration file
│   ├── commands.json        # Server command configurations
│   ├── install.sh          # Installation script for all servers
│   ├── requirements.txt    # Python dependencies
│   └── [28 server directories]
├── cache/                   # Tool call cache directory (auto-created)
├── run_benchmark.py         # Main benchmark runner script
├── README.md               # Project documentation
├── .gitignore              # Git ignore configuration
└── .gitmodules             # Git submodules configuration

引用

如果您在研究中使用了MCP-Bench,请引用:

@article{wang2025mcpbench,
  title={MCP-Bench: Benchmarking Tool-Using LLM Agents with Complex Real-World Tasks via MCP Servers},
  author={Wang, Zhenting and Chang, Qi and Patel, Hemani and Biju, Shashank and Wu, Cheng-En and Liu, Quan and Ding, Aolin and Rezazadeh, Alireza and Shah, Ankit and Bao, Yujia and Siow, Eugene},
  journal={arXiv preprint arXiv:2508.20453},
  year={2025}
}

明星历史

致谢

  • 建立在……之上 模型上下文协议 由Anthropic开发
  • 感谢所有使用过的开源MCP服务器实现