使用说明
MCP宇宙
什么是MCP宇宙?
MCP Universe是一个全面的框架,旨在开发、测试和基准测试AI代理。它为在各种任务环境中构建和评估AI代理和LLM提供了一个强大的平台。该框架还支持与外部MCP服务器的无缝集成,并促进复杂的代理编排工作流程。
与依赖于过于简单任务的现有基准不同,MCP Universe通过评估LLM来解决关键差距 现实世界场景 通过与实际MCP服务器的交互,捕捉实际应用程序的挑战,例如:
- 🎯 长期推理 跨多步骤任务
- 🔧 大型、陌生的工具空间 配备多种MCP服务器
- 🌍 真实世界的数据源 以及生活环境
- ⚡ 动态评价 具有时间敏感性的地面真相
业绩亮点
即使是最先进的模型在现实世界的MCP交互中也显示出明显的局限性:
- 🥇 GPT-5:成功率43.72%
- 🥈 Grok-4:33.33%的成功率
- 🥉 第4.0-条-附件:成功率29.44%
这突显了现实世界MCP服务器交互的挑战性,以及当前LLM代理的巨大改进空间。
目录
架构概述
MCPUniverse架构由以下关键组件组成:
- 代理 (
mcpuniverse/agent/):不同代理类型的基本实现 - 工作流 (
mcpuniverse/workflows/):编排和协调层 - MCP服务器 (
mcpuniverse/mcp/):协议管理和外部服务集成 - LLM集成 (
mcpuniverse/llm/):多提供商语言模型支持 - 基准测试 (
mcpuniverse/benchmark/):评价和测试框架 - 仪表盘 (
mcpuniverse/dashboard/):可视化和监控界面
下图说明了高级视图:
┌─────────────────────────────────────────────────────────────────┐
│ Application Layer │
├─────────────────────────────────────────────────────────────────┤
│ Dashboard │ Web API │ Python Lib │ Benchmarks │
│ (Gradio) │ (FastAPI) │ │ │
└─────────────┬─────────────────┬────────────────┬────────────────┘
│ │ │
┌─────────────▼─────────────────▼────────────────▼────────────────┐
│ Orchestration Layer │
├─────────────────────────────────────────────────────────────────┤
│ Workflows │ Benchmark Runner │
│ (Chain, Router, etc.) │ (Evaluation Engine) │
└─────────────┬─────────────────┬────────────────┬────────────────┘
│ │ │
┌─────────────▼─────────────────▼────────────────▼────────────────┐
│ Agent Layer │
├─────────────────────────────────────────────────────────────────┤
│ BasicAgent │ ReActAgent │ FunctionCall │ Other │
│ │ │ Agent │ Agents │
└─────────────┬─────────────────┬────────────────┬────────────────┘
│ │ │
┌─────────────▼─────────────────▼────────────────▼────────────────┐
│ Foundation Layer │
├─────────────────────────────────────────────────────────────────┤
│ MCP Manager │ LLM Manager │ Memory Systems │ Tracers │
│ (Servers & │ (Multi-Model │ (RAM, Redis) │ (Logging) │
│ Clients) │ Support) │ │ │
└─────────────────┴─────────────────┴─────────────────┴───────────┘
可以找到更多信息 这里.
入门指南
我们跟随 这 特征分支工作流 为了简单起见,在这个回购中。为了确保代码质量, 皮林特 已集成到我们的CI中,以执行Python编码标准。
先决条件
- python:需要3.10或更高版本。
- 码头工人:用于运行Docker化的MCP服务器。
- PostgreSQL (可选):用于数据库存储和持久化。
- 瑞迪斯 (可选):用于缓存和内存管理。
安装
-
克隆存储库
git clone https://github.com/SalesforceAIResearch/MCP-Universe.git cd MCP-Universe -
创建并激活虚拟环境
python3 -m venv venv source venv/bin/activate -
安装依赖项
pip install -r requirements.txt pip install -r dev-requirements.txt -
平台特定要求
Linux:
sudo apt-get install libpq-devmacOS:
brew install postgresql -
配置预提交挂钩
pre-commit install -
环境配置
cp .env.example .env # Edit .env with your API keys and configuration
快速测试
要运行基准测试,您首先需要设置环境变量:
- 复制
.env.example将文件转换为名为的新文件.env. - 在
.env文件,为代理使用的各种服务设置所需的API密钥, 例如OPENAI_API_KEY和GOOGLE_MAPS_API_KEY.
要以编程方式执行基准测试,请执行以下操作:
from mcpuniverse.tracer.collectors import MemoryCollector # You can also use SQLiteCollector
from mcpuniverse.benchmark.runner import BenchmarkRunner
async def test():
trace_collector = MemoryCollector()
# Choose a benchmark config file under the folder "mcpuniverse/benchmark/configs"
benchmark = BenchmarkRunner("dummy/benchmark_1.yaml")
# Run the specified benchmark
results = await benchmark.run(trace_collector=trace_collector)
# Get traces
trace_id = results[0].task_trace_ids["dummy/tasks/weather_1.json"]
trace_records = trace_collector.get(trace_id)
评估LLM和代理
本节提供了使用MCP Universe基准套件评估LLM和AI代理的全面说明。该框架支持跨多个领域的评估,包括网络搜索、位置导航、浏览器自动化、财务分析、存储库管理和3D设计。
先决条件
在运行基准评估之前,请确保您已完成 入门指南 部分,并具有以下内容:
- Python:3.10或更高版本
- Docker:已在您的环境中安装并可用
- 通过安装所有必需的依赖项
pip install -r requirements.txt - 活动虚拟环境
- 为您打算评估的服务提供适当的API访问权限
环境配置
1.初始设置
复制环境模板并配置API凭据:
cp .env.example .env
2.API密钥和配置
在您的 .env 文件。所需的密钥取决于您计划评估的基准域:
核心LLM提供商
| 环境变量 | 提供者 | 描述 | 必需 |
|---|---|---|---|
OPENAI_API_KEY |
OpenAI | GPT模型的API密钥(GPT-5等) | 所有域 |
ANTHROPIC_API_KEY |
Anthropic | Claude模型的API密钥 | 所有域 |
GEMINI_API_KEY |
Gemini模型的API密钥 | 所有域 |
备注:您只需要为要在评估中使用的LLM提供程序配置API密钥。
特定域服务
| 环境变量 | 服务 | 描述 | 设置说明 |
|---|---|---|---|
SERP_API_KEY |
SerpAPI | 用于搜索基准评估的Web搜索API | 获取API密钥 |
GOOGLE_MAPS_API_KEY |
谷歌地图 | 地理定位和地图服务 | 安装指南 |
GITHUB_PERSONAL_ACCESS_TOKEN |
GitHub | 用于存储库操作的个人访问令牌 | 令牌设置 |
GITHUB_PERSONAL_ACCOUNT_NAME |
GitHub | 您的GitHub用户名 | 不适用 |
NOTION_API_KEY |
Notion | Notion工作区访问的集成令牌 | 集成设置 |
NOTION_ROOT_PAGE |
Notion | Notion工作区的根页面ID | 请参阅下面的配置示例 |
系统路径
| 环境变量 | 描述 | 示例 |
|---|---|---|
BLENDER_APP_PATH |
Blender可执行文件的完整路径(我们使用v4.4.0) | /Applications/Blender.app/Contents/MacOS/Blender |
MCPUniverse_DIR |
通往MCP Universe存储库的绝对路径 | /Users/username/MCP-Universe |
配置示例
Notion根页面ID: 如果您的Notion页面URL为:
https://www.notion.so/your_workspace/MCP-Evaluation-1dd6d96e12345678901234567eaf9eff
集 NOTION_ROOT_PAGE=MCP-Evaluation-1dd6d96e12345678901234567eaf9eff
搅拌机安装:
- 从以下网址下载Blender v4.4.0 blender.org
- 按照以下步骤安装我们经过修改的Blender MCP服务器 安装指南
- 设置Blender可执行文件的路径
⚠️ 安全建议
🔒 重要安全通知
在运行基准测试之前,请仔细阅读并遵循这些安全指南:
-
🚨 GitHub集成: 关键的 -我们强烈建议使用专用的测试GitHub帐户进行基准测试评估。AI代理将在GitHub存储库上执行实际操作,这可能会修改或损坏您的个人存储库。
-
🔐 API密钥管理:
- 安全存储API密钥,永远不要将其提交到版本控制
- 使用环境变量或安全密钥管理系统
- 定期轮换API密钥以增强安全性
-
🛡️ 访问权限:
- 为每个服务集成授予最低限度的必要权限
- 审查API关键作用域并将其限制为仅需要的操作
- 监控API的使用情况并设置适当的费率限制
-
⚡ 搅拌机操作:3D设计基准测试将执行Blender命令,这些命令可能会在您的系统上修改或创建文件。确保您有足够的备份,并在必要时在隔离环境中运行。
基准配置
域特定配置文件
每个基准域都有一个专用的YAML配置文件,位于 mcpuniverse/benchmark/configs/test/。要评估LLM/代理,请修改相应的配置文件:
| 域 | 配置文件 | 描述 |
|---|---|---|
| 网络搜索 | web_search.yaml |
搜索引擎和信息检索任务 |
| 位置导航 | location_navigation.yaml |
地理和地图相关查询 |
| 浏览器自动化 | browser_automation.yaml |
Web交互和自动化场景 |
| 财务分析 | financial_analysis.yaml |
市场数据分析和财务计算 |
| 存储库管理 | repository_management.yaml |
Git操作和代码库任务 |
| 3D设计 | 3d_design.yaml |
基于Blender的3D建模和设计任务 |
LLM模型配置
在每个配置文件中,更新LLM规范以匹配您的目标模型:
kind: llm
spec:
name: llm-1
type: openai # or anthropic, google, etc.
config:
model_name: gpt-4o # Replace with your target model
执行
运行个人基准
使用以下命令执行特定的域基准测试:
# Set Python path and run individual benchmarks
export PYTHONPATH=.
# Location Navigation
python tests/benchmark/test_benchmark_location_navigation.py
# Browser Automation
python tests/benchmark/test_benchmark_browser_automation.py
# Financial Analysis
python tests/benchmark/test_benchmark_financial_analysis.py
# Repository Management
python tests/benchmark/test_benchmark_repository_management.py
# Web Search
python tests/benchmark/test_benchmark_web_search.py
# 3D Design
python tests/benchmark/test_benchmark_3d_design.py
批处理执行
对于所有领域的综合评估:
#!/bin/bash
export PYTHONPATH=.
domains=("location_navigation" "browser_automation" "financial_analysis"
"repository_management" "web_search" "3d_design")
for domain in "${domains[@]}"; do
echo "Running benchmark: $domain"
python "tests/benchmark/test_benchmark_${domain}.py"
echo "Completed: $domain"
done
保存运行日志
如果你想保存运行日志,你可以通过 trace_collector 对于基准运行函数:
from mcpuniverse.tracer.collectors import FileCollector
trace_collector = FileCollector(log_file="log/location_navigation.log")
benchmark_results = await benchmark.run(trace_collector=trace_collector)
将基准测试结果保存到报告中
如果要保存基准测试结果的报告,可以使用 BenchmarkReport 要转储报告,请执行以下操作:
from mcpuniverse.benchmark.report import BenchmarkReport
report = BenchmarkReport(benchmark, trace_collector=trace_collector)
report.dump()
可视化代理运行信息
要运行具有中间结果的基准测试并查看实时进度,请通过 callbacks=get_vprint_callbacks() 转到run函数:
from mcpuniverse.callbacks.handlers.vprint import get_vprint_callbacks
benchmark_results = await benchmark.run(
trace_collector=trace_collector,
callbacks=get_vprint_callbacks()
)
这将在基准运行时打印出中间结果。
有关更多详细信息,请参阅代码中的文档或存储库中的现有配置示例。
创建自定义基准
基准由三个主要配置元素定义:任务定义, 代理/工作流定义和基准配置本身。下面是一个例子 使用一个简单的“天气预报”任务。
任务定义
任务定义以JSON格式提供,例如:
{
"category": "general",
"question": "What's the weather in San Francisco now?",
"mcp_servers": [
{
"name": "weather"
}
],
"output_format": {
"city": "<City>",
"weather": "<Weather forecast results>"
},
"evaluators": [
{
"func": "json -> get(city)",
"op": "=",
"value": "San Francisco"
}
]
}
字段描述:
- 类别:任务类别,例如“一般”、“谷歌地图”等。您可以为此属性设置任何值。
- 问题:此任务中您要问的主要问题。这被视为用户消息。
- mcp服务器:此框架中支持的MCP服务器列表。
- 输出格式:代理响应的理想输出格式。
- 评估师:要评估的测试列表。对于每个测试/评估器,它有三个属性:“func”表示 如何从代理响应中提取值,“op”是比较运算符,“value”是基本事实 价值。 它将评估 op(函数(…)、值、op_args…)“op”可以是“=”、“<”、“>”或其他自定义运算符。
在“evaluators”中,您需要编写一个规则(“func”属性),显示如何提取测试值。在示例中 上面,“json->get(city)”将首先进行json解码,然后提取密钥“city”的值。有几个 此仓库中的预定义函数:
- JSON:执行JSON解码。
- 得到:获取键的值。
- 长度:获取列表的长度。
- 遍历:执行FOR-EACH循环。
例如,让我们定义
data = {"x": [{"y": [1]}, {"y": [1, 1]}, {"y": [1, 2, 3, 4]}]}
然后 get(x) -> foreach -> get(y) -> len 将执行以下操作:
- 获取“x”的值:
[{"y": [1]}, {"y": [1, 1]}, {"y": [1, 2, 3, 4]}]. - 执行foreach循环并获取“y”的值:
[[1], [1, 1], [1, 2, 3, 4]]. - 获取每个列表的长度:
[1, 2, 4].
如果这些预定义函数还不够,您可以实现自定义函数。 有关更多详细信息,请查看 这 文档.
基准定义
在YAML文件中定义代理和基准。以下是一个简单的天气预报基准:
kind: llm
spec:
name: llm-1
type: openai
config:
model_name: gpt-4o
---
kind: agent
spec:
name: ReAct-agent
type: react
config:
llm: llm-1
instruction: You are an agent for weather forecasting.
servers:
- name: weather
---
kind: benchmark
spec:
description: Test the agent for weather forecasting
agent: ReAct-agent
tasks:
- dummy/tasks/weather.json
基准定义主要包括两部分:代理定义和基准配置。基准配置很简单——您只需要指定要使用的代理(通过定义的代理名称)和要评估的任务列表。每个任务条目都是任务配置文件 路径。它可以是完整文件路径或部分文件路径。如果它是一个部分文件路径(如“dummy/tasks/weather.json”), 它应该放在 文件夹 mcpuniverse/基准测试/配置 在这个回购中。
该框架提供了一种灵活的方法来定义简单代理(如ReAct)和更复杂的多步骤代理 工作流程。
- 指定LLM: 首先声明希望代理使用的大型语言模型(LLM)。每个LLM组件
必须分配一个唯一的名称(例如。,
"llm-1").这些名称用作框架用于连接的标识符 将不同的组件放在一起。 - 定义代理: 接下来,通过提供代理名称并选择代理类来定义代理。代理类包括
可用
这 麦克普纳律师事务所 包裹。
常用的课程包括
"basic","function-call",以及"react"在代理规范范围内(spec.config),您还必须通过设置"llm"现场。 - 创建复杂的工作流: 除了简单的代理之外,该框架还支持复杂、, 多个代理交互或协作以解决更复杂任务的编排工作流。
例如:
kind: llm
spec:
name: llm-1
type: openai
config:
model_name: gpt-4o
---
kind: agent
spec:
name: basic-agent
type: basic
config:
llm: llm-1
instruction: Return the latitude and the longitude of a place.
---
kind: agent
spec:
name: function-call-agent
type: function-call
config:
llm: llm-1
instruction: You are an agent for weather forecast. Please return the weather today at the given latitude and longitude.
servers:
- name: weather
---
kind: workflow
spec:
name: orchestrator-workflow
type: orchestrator
config:
llm: llm-1
agents:
- basic-agent
- function-call-agent
---
kind: benchmark
spec:
description: Test the agent for weather forecasting
agent: orchestrator-workflow
tasks:
- dummy/tasks/weather.json
引用
如果您在研究中使用MCP Universe,请引用我们的论文:
@misc{mcpuniverse,
title={MCP-Universe: Benchmarking Large Language Models with Real-World Model Context Protocol Servers},
author={Ziyang Luo and Zhiqi Shen and Wenzhuo Yang and Zirui Zhao and Prathyusha Jwalapuram and Amrita Saha and Doyen Sahoo and Silvio Savarese and Caiming Xiong and Junnan Li},
year={2025},
eprint={2508.14704},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2508.14704},
}
