mcp数据检查
根据已知问题和答案评估MCP服务器的准确性。
安装
pip install mcp-data-check或者从源代码安装:
pip install -e .用法
Python API
人为(默认)
from mcp_data_check import run_evaluation
results = run_evaluation(
questions_filepath="questions.csv",
api_key="sk-ant-...",
server_url="https://mcp.example.com/sse"
)
print(f"Pass rate: {results['summary']['pass_rate']:.1%}")
print(f"Passed: {results['summary']['passed']}/{results['summary']['total']}")开放人工智能
from mcp_data_check import run_evaluation
results = run_evaluation(
questions_filepath="questions.csv",
api_key="sk-...",
server_url="https://mcp.example.com/sse",
provider="openai",
model="gpt-4o"
)命令行
人为(默认)
mcp-data-check https://mcp.example.com/sse -q questions.csv -k YOUR_API_KEY开放人工智能
mcp-data-check https://mcp.example.com/sse -q questions.csv -p openai -m gpt-4o -k YOUR_API_KEY基线比较(MCP与无工具)
# Anthropic
mcp-data-check https://mcp.example.com/sse -q questions.csv --compare
# OpenAI
mcp-data-check https://mcp.example.com/sse -q questions.csv -p openai -m gpt-4o --compare每个问题都运行 --repeats 每种模式的次数(默认值5)。通过/失败由多数票决定。结果保存到 ./results/comparison_.json.
选项:
-q, --questions:问题路径CSV文件(必填)-p, --provider:要使用的LLM提供程序:anthropic(默认)或openai-k, --api-key:所选提供程序的API密钥(默认为ANTHROPIC_API_KEY或OPENAI_API_KEY任何人)-o, --output:结果输出目录(默认:./results)-m, --model:用于评估的模型(默认值:claude-sonnet-4-20250514;使用例如。gpt-4oOpenAI)-n, --server-name:MCP服务器的名称(默认值:mcp-server)-r, --repeats:每个问题的运行次数(默认值:5;多数票决定通过/失败)-v, --verbose:打印详细进度--compare:在有和没有MCP服务器的情况下运行每个问题,并报告增量
基线比较(Python API)
人类
from mcp_data_check import Evaluator
evaluator = Evaluator(server_url="https://mcp.example.com/sse", api_key="sk-ant-...")
questions = evaluator.load_questions("questions.csv")
comparison = evaluator.run_comparison(questions, repeats=5, verbose=True)
print(f"MCP pass rate: {comparison.mcp_pass_rate:.1%}")
print(f"Baseline pass rate: {comparison.baseline_pass_rate:.1%}")
print(f"Delta: {comparison.mcp_pass_rate - comparison.baseline_pass_rate:+.1%}")
evaluator.save_comparison(comparison, "./results")开放人工智能
from mcp_data_check import Evaluator
evaluator = Evaluator(
server_url="https://mcp.example.com/sse",
api_key="sk-...",
provider="openai",
model="gpt-4o"
)
questions = evaluator.load_questions("questions.csv")
comparison = evaluator.run_comparison(questions, repeats=5, verbose=True)
print(f"MCP pass rate: {comparison.mcp_pass_rate:.1%}")
print(f"Baseline pass rate: {comparison.baseline_pass_rate:.1%}")CSV格式问题
CSV文件的问题必须有三列:
| 列 | 说明 |
|---|---|
question | 向MCP服务器提出的问题 |
expected_answer | 与预期答案进行比较 |
eval_type | 评价方法: numeric, string,或 llm_judge |
例子:
question,expected_answer,eval_type
How many grants were awarded in 2023?,1234,numeric
What organization received the most funding?,NIH,string
Explain the grant distribution,Most grants went to research institutions...,llm_judge评估类型
- 数字的:从回复中提取数字,并与5%的容差进行比较
- 字符串:检查响应中是否出现预期字符串(不区分大小写)
- llm_judge:使用所选模型从语义上评估响应是否正确
返回值
这 run_evaluation 函数返回一个字典:
{
"summary": {
"total": 10,
"passed": 8,
"failed": 2,
"pass_rate": 0.8,
"by_eval_type": {
"numeric": {"total": 5, "passed": 4},
"string": {"total": 3, "passed": 3},
"llm_judge": {"total": 2, "passed": 1}
}
},
"results": [
{
"question": "...",
"expected_answer": "...",
"eval_type": "numeric",
"model_response": "...",
"passed": True,
"details": {...},
"error": None,
"time_to_answer": 2.35,
"tools_called": [
{
"tool_name": "get_grants",
"server_name": "mcp-server",
"input": {"year": 2023}
}
]
},
...
],
"metadata": {
"server_url": "https://mcp.example.com/sse",
"model": "claude-sonnet-4-20250514",
"provider": "anthropic",
"timestamp": "20250127_143022"
}
}结果字段
每个结果 results 数组包含:
| 字段 | 描述 |
|---|---|
question | 最初提出的问题 |
expected_answer | CSV的预期答案 |
eval_type | 使用的评估方法 |
model_response | 模型的完整响应文本 |
passed | 评估是否通过 |
details | 其他评估细节 |
error | 如果评估失败,则显示错误消息 |
time_to_answer | 重复的平均响应时间(秒) |
tools_called | 响应期间调用的MCP工具列表 |
repeat_count | 问题运行的次数 |
repeat_pass_count | 通过的运行次数(超出 repeat_count) |
这 tools_called 数组包含以下对象:
tool_name:所调用的MCP工具的名称server_name:提供该工具的MCP服务器的名称input:传递给工具的参数
需求
- Python 3.10+
- 您选择的提供商的API密钥(Anthropic或OpenAI)
