MCP服务器准确性评估工具

用于评估MCP服务器对已知问题和答案的准确性的工具。

  • by GSA-TTS
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 GSA-TTS/mcp-data-check

使用说明

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_<timestamp>.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-4o OpenAI)
  • -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)