Token导航 LogoToken导航TokenDH.com
MCP Stress Tested logo
运维云端stdio官方级别未说明来源级核验

MCP Stress Tested

MCP Server

一个用于验证Model Context Protocol(MCP)性能的测试工具,包含9个Python实验和一个真实的MCP stdio服务器,用于测量工具模式膨胀、循环乘数效应等关键性能指标。

工具数

0

提示词数

0

GitHub Stars

1

资源数

0
PythonClaude云端部署Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Techryptic

提供方

Techryptic

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -r requirements.txt

详细介绍

我对MCP的批评者进行了压力测试

Python

License Tests MCP

每个人都在热议Anthropic的模型上下文协议(MCP)。但同样的批评不断涌现:象征性的膨胀、延迟、除了挥手回应什么都没有的冷启动。 所以我自己制作了一个马具来测量它,当然也是为了学习。

此回购包含 9个Python实验+一个真正的MCP stdio服务器 验证对MCP的每一个主要批评。

______________________________________________________________________

关键结果

测试索赔状态关键发现
01工具架构膨胀已验证100工具= +18468个代币 (486×架空)
02循环乘数已验证3-tool工作流程= 4个完整的LLM通行证,代币增长71%
03结果污染已验证全原木废料 71%代币 vs过滤
04大海捞针⚠️ 无定论的100项目量表100%准确(声称:10-50%失败)
05工具模糊已验证相似名称: 40%准确率 与100%具有不同名称的情况相比
06缓存无效⚠️ 无定论的3.3%延迟差异(需要Anthropic API进行验证)
07工具搜索延迟已验证添加额外的转弯,但保存 10k+代币 当许多工具
08注射攻击抵抗模型固定在提供的工具上,但存在攻击面
09输出架构模糊已验证缺少模式会使代码生成变得脆弱
主控程序冷启动开销测量平均约368毫秒 (生成时间:2毫秒,初始化时间:360毫秒)
主控程序工作流编排有效的服务器端链接: 字节数减少52%, 3→1 电话

什么是真实的:

  • 工具模式膨胀巨大(100个工具每回合18k+令牌)
  • 循环乘数复合成本(用户发送1条消息→ 模型处理4+个请求)
  • 结果污染严重(返回原始数据浪费70%以上的令牌)
  • 冷启动时间约为350-370ms(适用于长会话,不适用于无服务器)
  • 工具命名很重要(名称不明确会使准确率降至40%)

什么是可修复的:

  • 工具搜索(仅加载相关工具,节省10k+代币)
  • 服务器端编排(链式工具,将往返次数减少50%以上)
  • 输出模式(使编程使用可靠)
  • 智能过滤(从大型数据集中删除70%以上的令牌)

什么是基础:

  • 工具模式的代币税(如果工具在提示中,您需要支付)
  • 循环乘数(多步=多调用(上下文就是这样工作的))
  • 冷启动开销(生成+握手需要时间)
  • 长寿命与无服务器(MCP在IDE/聊天中大放异彩,在边缘功能方面很尴尬)

📋 我测试了什么

第一阶段:Python实验(9个测试)

每个实验都验证了来自 YouTube视频批评MCP:

  1. 工具架构选项卡 -使用0、10、50、100工具测量令牌开销
  2. 循环乘数效应 -在多步骤工作流程中跟踪每回合代币增长
  3. 结果污染 -比较完整结果与过滤结果令牌的使用情况
  4. 草垛针故障 -从大数据集中提取测试模型精度
  5. 工具选择错误 -使用不同或模糊的工具名称测量精度
  6. 缓存失效 -比较静态与动态工具定义的延迟
  7. 工具搜索延迟 -从工具搜索步骤测量开销
  8. 注入漏洞 -尝试对抗性工具的重新定义
  9. 输出模式歧义 -比较有/没有模式的代码生成

第2阶段:真正的MCP服务器(2个基准)

构建了一个Node.js MCP stdio服务器来测试协议级行为:

  1. 创业基准 -测量冷启动时间、状态持久性、无服务器友好性
  2. 工作流基准测试 -测试编程工具调用(服务器端编排)

______________________________________________________________________

🚀 快速入门指南

先决条件

  • Python 3.9+
  • Node.js 18+
  • OpenRouter API密钥(或修改为直接使用Anthropic/OpenAI)

设置

# 1. Clone the repo
git clone https://github.com/yourusername/MCP-Test.git
cd MCP-Test

# 2. Install Python dependencies
pip install -r requirements.txt

# 3. Install Node.js dependencies (for MCP server)
cd mcp && npm install && cd ..

# 4. Configure API key
echo "OPENROUTER_API_KEY=your_key_here" > .env

运行Python实验

# Run individual test
python run_test.py 01    # Tool schema bloat
python run_test.py 02    # Loop multiplier
python run_test.py 03    # Result pollution

# Run all 9 tests (uses API credits: ~$0.25-0.45)
python run_test.py all

运行MCP服务器基准测试

cd mcp

# Test 1: Cold start + statefulness
npm run bench:startup

# Test 2: Workflow orchestration
npm run bench:workflow

# Run all benchmarks
npm run bench:all

结果保存到: mcp/results/*.jsonmcp/results/summary.csv

______________________________________________________________________

📁 项目结构

MCP-Test/
├── experiments/                    # Python test suite
│   ├── common/
│   │   ├── openrouter_provider.py  # API calls with usage tracking
│   │   ├── agent_loop.py           # Tool-calling loop with metrics
│   │   ├── stub_tools.py           # Safe local tool implementations
│   │   └── token_count.py          # Token estimation utilities
│   └── cases/
│       ├── test_01_tool_schema_bloat.py
│       ├── test_02_loop_multiplier.py
│       ├── test_03_result_pollution.py
│       ├── test_04_needle_haystack.py
│       ├── test_05_tool_selection.py
│       ├── test_06_cache_invalidation.py
│       ├── test_07_tool_search_latency.py
│       ├── test_08_injection_simulation.py
│       └── test_09_output_schema.py
├── mcp/                            # Real MCP server (Node.js)
│   ├── server.ts                   # MCP stdio server
│   ├── bench/
│   │   ├── startup.ts              # Cold start benchmark
│   │   └── workflow.ts             # Orchestration benchmark
│   └── results/                    # Benchmark output
├── run_test.py                     # Test runner
├── requirements.txt                # Python dependencies
└── README.md                       # This file

📖 结果和理解

示例输出(测试01:工具模式块)

================================================================================
TEST 01: Tool Schema Bloat
================================================================================

============================================================
Running: No tools
============================================================
Tool schema size: 0 tokens (no tools)

RESULTS:
  Turns: 1
  Total tokens: 38
  Prompt tokens: 33
  Completion tokens: 5

============================================================
Running: Large (100 tools)
============================================================
Tool schema size: 17,501 tokens (~98,060 chars)

RESULTS:
  Turns: 1
  Total tokens: 18,506
  Prompt tokens: 18,447
  Completion tokens: 59

================================================================================
SUMMARY: Tool Schema Bloat Impact
================================================================================

Configuration             Tools      Tool Tokens     Total Tokens    Overhead
--------------------------------------------------------------------------------
No tools                  0          0               38              -
Large (100 tools)         100        17,501          18,506          +18,468 (48600%)

VERDICT:
  ✓ Tool definitions add 18,468 tokens (487.0x more)
  ✓ This overhead is repeated on EVERY turn in the loop
  ✓ CLAIM VALIDATED: Large tool schemas bloat context massively

寻找什么

代币指标:

  • 工具架构大小:仅通过工具定义添加的令牌
  • 代币总数:完成请求成本(提示+完成)
  • 开销:与基线相比,额外的令牌(无工具)
  • 每轮增长:多步骤工作流中上下文如何增长

延迟度量:

  • 冷启动时间:生成+初始化MCP服务器的时间
  • 每转延迟:每个推理过程的API响应时间
  • 总延迟:端到端工作流时间

准确性指标:

  • 选择精度:选择正确的工具(%)
  • 提取精度:提取的正确数据(%)
  • 故障率:错误的结果或错误(%)

成本估算

使用 anthropic/claude-3.5-sonnet 通过OpenRouter:

  • 测试01-03:每个约0.10-0.20美元
  • 测试04-09:每个约0.05-0.15美元
  • 全部9项测试:总计约0.25-0.45美元

MCP基准是本地的(没有API成本)。

______________________________________________________________________

🔍 详细调查结果

1.工具模式块是真实的

索赔:“对话开始前,58个工具=55k个令牌”

测试:使用0、10、50、100个工具测量令牌开销。

结果: ✅ 已验证

  • 0个工具:38个令牌
  • 100个工具:18506个令牌(工具定义:17501)
  • 开销:+18468个代币(486倍以上)
  • 每次转弯都重复 在多步骤对话中

为什么这很重要:如果你按代币支付,加载100个不相关的工具每回合需要花费约18000个代币。

______________________________________________________________________

2.循环乘数是残酷的

索赔:每次工具调用时都显示“整个历史与模型一起重新运行”

测试:在3工具工作流程中跟踪每轮代币增长。

结果: ✅ 已验证

  • 4次完整的模型推理过程 (1次初始+3次工具返回)
  • 总共3503个代币 (3134次提示,369次完成)
  • 总延迟17.83秒
  • 提示词元 增长71% 从第一回合开始→ 转4圈(579→988)

为什么? 每个回合包括:

  • 原始系统提示
  • 原始用户消息
  • 所有工具定义(重复)
  • 以前的助手消息
  • 以前的工具调用结果

为什么这很重要:用户发送1条消息。模型处理4个请求。代币成本复合。

______________________________________________________________________

3.中间结果污染环境

索赔:“即使不需要,10MB日志文件也会进入上下文”

测试:比较完整日志与过滤日志令牌的使用情况。

结果: ✅ 已验证

  • 返回完整日志: 23582个字符 (约3930个代币)→ 总计8097个代币
  • 预过滤(13条错误行): 490个字符总计2324个代币
  • 储蓄: 71%

为什么这很重要:返回原始数据集是浪费的。服务器端过滤(或“程序化工具调用”)大大降低了令牌成本。

______________________________________________________________________

4.干草堆中的针“10-50%失败”

索赔:“最佳情况下10%的查找失败,最差情况下50%的查找失败”

测试:10次试验,从100名总用户中提取5名管理员用户。

结果: ⚠️ 非决定性的

  • 模型准确率:10/10完美匹配(100%)
  • 代码准确性:100%(确定性)

警告:在这个规模(100个项目)下,模型一次也没有失败。“10-50%失败”索赔可能适用于 *大得多* 数据集(1000个项目),但我没有在这里重现。

为什么这很重要:基于代码的过滤始终是100%可靠的。模型提取通常很好,但不能保证。

______________________________________________________________________

5.工具模糊会破坏准确性

索赔:“相似的名称会导致失败”

测试:将准确度与不同与模糊的工具名称进行比较。

结果: ✅ 已验证

  • 不同的名称 (1个工具):100%正确选择(5/5次试验)
  • 相似名称 (5个工具: notify_user, notification_send_user, notification_send_users): 40%正确 (2/5次试验)

为什么这很重要:当工具名称重叠时,模型会出现问题。明确的命名或明确的示例至关重要。

______________________________________________________________________

6.缓存无效影响

索赔:“开始时的任何更改都会破坏缓存”

测试:将延迟与静态和动态工具定义进行比较。

结果: ⚠️ 非决定性的

  • 静态工具:平均延迟5.91秒
  • 动态工具 (每次请求更改):平均延迟6.11s
  • 差异: 3.3%

警告:OpenRouter不会像Anthropic的API那样公开缓存遥测。这个测试需要Anthropic的 cache_control 头球是决定性的。

为什么这很重要Anthropic的快速缓存可以将成本降低90%,但对静态前缀的任何更改都会使缓存无效。动态工具加载完全中断了缓存。

______________________________________________________________________

7.工具搜索增加了延迟

索赔:“刀具搜索会增加额外的转弯开销”

测试:在有和没有工具搜索步骤的情况下测量延迟。

结果: ✅ 已验证(有权衡)

  • 直接执行:20.32秒,3494个代币
  • 使用工具搜索:16.94秒,2517个代币
  • 额外延迟:-3.38秒(更快!)
  • 代币节省:-977个代币

权衡:工具搜索增加了一个额外的回合,但是 保存令牌 当你有很多工具的时候。值得拥有100多种工具。

为什么这很重要Anthropic的工具搜索功能有助于解决臃肿问题,但增加了复杂性。

______________________________________________________________________

8.注射漏洞

索赔:“历史上的工具定义可能被劫持”

测试:试图重新定义对抗性工具和注入虚假工具。

结果: ✅ 模型抵制 (但存在攻击面)

  • 工具重新定义尝试:失败
  • 假工具注射:失败

为什么这很重要:模型在此测试中受到抵制,但攻击面存在(特别是如果工具定义被加载到消息历史记录中而不是系统提示中)。防御:对输入进行消毒+保持工具对服务器的控制。

______________________________________________________________________

9.输出模式歧义

索赔:“无返回格式标准”

测试:比较了有/没有输出模式的代码生成。

结果: ✅ 已验证

  • 没有模式:模型必须猜测输出格式→ 脆性代码生成
  • 使用模式:模型知道确切的格式→ 可靠解析

为什么这很重要:MCP工具定义通常缺少输出模式。这使得“编程工具调用”(模型编写代码解析输出)变得脆弱。解决方案:将输出模式添加到工具定义中(但很少有人这样做,因为它是可选的)。

______________________________________________________________________

10.MCP冷启动顶置

测试:真正的Node.js MCP stdio服务器启动基准测试。

结果: ✅ 测量

  • 产卵时间:~2ms(快速)
  • 初始化/握手:约360毫秒(慢速)
  • 总计: 平均约368毫秒 (5次跑步)

为什么这很重要:冷启动并不可怕,但足以排除“MCP无处不在,就像无服务器一样”。对于长期会话来说很好,对于一次性调用来说很尴尬。

______________________________________________________________________

11.工作流编排工作

测试:比较传统(3个单独的工具调用)与工作流(1个编排的调用)。

结果: ✅ 有效的

  • 传统:3次调用,496字节,2.31ms
  • 工作流程:1个调用,239字节,1.26ms
  • 储蓄:字节数减少52%,往返次数减少2次

为什么这很重要:服务器端编排(在返回模型之前链接工具)是一种有效的缓解措施,可以减少往返和令牌浪费。

______________________________________________________________________

🗣️ 社区在说什么

除了技术测试,以下是开发人员对MCP的评价:

来源关键引文/见解背景链接
@vyrotek(2026年1月24日)“几年前感觉就像一个死规范。”在MCP上下文中指JSON-RPC,指出它似乎已经过时,但正在重新出现。查看帖子
@aparnadhinak(2026年1月24日)“同意,并不是说MCP已经死了。评论我们看到的势头转变。”观察到MCP的转变,这意味着它正在减弱。查看帖子
@elvissun(2026年1月24日)“这些技能中没有MCP。你无法获得搜索量或反向链接配置文件,因此它实际上是无用的。”批评缺乏MCP集成的技能,使其在没有真正的API功能的情况下变得无用。查看帖子
@trungking(2026年1月24日)“但随着时间的推移,现在只使用了一些MCP,其他一切都死了,几乎没有人谈论它。”关于MCP的炒作逐渐消退,大多数实现都没有被使用和遗忘。查看帖子
@AlexWalz\_(2026年1月24日)“我的主要问题是,随着渐进式披露原则的实施,MCP是否已经死亡?”认为MCP会导致重复调用和代币浪费,这表明API等替代方案更好。查看帖子
@anders36415(2026年1月24日)“RAG已经过时了,我假设MCP将是下一个。”预测MCP在RAG衰落后会过时。查看帖子
@\_overment(2026年1月24日)“为什么模型上下文协议不起作用”客座文章从开发人员和用户的角度分析了MCP的挫折感。查看帖子
@chaseadams(2025年11月5日)“这篇Anthropic帖子证实了我在MCP上看到的情况:提前加载所有定义会快速燃烧代币。它还埋下了MCP造成上下文腐烂的隐患。”强调代币燃烧和上下文退化是主要缺陷。查看帖子
@alxfazio(2025年12月17日)“mcps是混蛋。为什么即使你不使用它们,它们也会被加载到上下文中?技能已经解决了这个问题……”批评不必要的上下文加载;称赞技能优越。查看帖子
@thdxr(2025年11月9日)“大多数mcp服务器都是垃圾,经常崩溃……这真的感觉像是我讨厌的那种产品……”列出了实际的抱怨:不稳定、臃肿、没有实质内容的炒作。查看帖子
@lsof(2026年1月22日)“模型上下文协议(MCP)-直接连接到企业系统的人工智能模型会给安全工具带来盲点。规模风险:一个受损的MCP服务器=数据/令牌/API暴露。”强调MCP实现中的安全风险和盲点。查看帖子
@thedaldirector(2026年1月24日)“我认为MCP无论如何都必须被淘汰,因为它是一种无效的上下文引入方式,同时消耗了太多的代币。”由于效率低下和安全风险,呼吁逐步淘汰MCP。查看帖子
@raythurnvoid(2026年1月24日)“嘿,我试过剧作家测试,我完全失败了,你认为今天可行吗?顺便说一句,剧作家远比光标浏览器、困惑浏览器、浏览器库和剧作家MCP好”这意味着剧作家MCP比剧作家等替代品差。查看帖子

这些真实世界的观察结果与该测试套件中的许多技术发现一致。

______________________________________________________________________

如果您正在采用MCP,请使用以下清单:

  • \[ \] 使用工具搜索 如果你有10个以上的工具。每回合18k代币加起来很快。
  • \[ \] 清楚地命名工具。 避免 send_email_user, send_user_email, email_send_user模型精度储罐。
  • \[ \] 添加输出模式 工具定义。有助于代码生成+调试。
  • \[ \] 过滤服务器端的大型数据集 在回到上下文之前。不要转储23kb日志。
  • \[ \] 编排多步骤工作流 如果可能的话,在服务器上。减少往返次数。
  • \[ \] 预计约350ms冷启动 对于Node.js服务器。适合聊天,不适合边缘功能。
  • \[ \] 使用提示缓存 (Anthropic的cache_control)将成本削减90%,但保持工具定义不变。

令牌膨胀和循环乘数是真实的。他们也是 *可预测的* 并且在许多情况下是可修复的。

🙏 贡献

想添加更多测试吗?线束已准备就绪:

  1. 在中添加新的测试文件 experiments/cases/
  2. 使用 AgentLoop 以及存根工具 experiments/common/
  3. 更新 run_test.py 包括新的测试

如果您发现错误或有想法,请打开问题或PR!

______________________________________________________________________

📄 许可证

MIT许可证-自由使用。

______________________________________________________________________

🔗 学分

基于对a的分析 YouTube视频 讨论MCP故障模式和Anthropic提出的解决方案。

使用Python、Node.js、OpenRouter和健康的怀疑论构建。 🧪

目录标签

目录标签

PythonClaude云端部署性能测试本地部署MCP验证工具模式分析Python实验Node.js服务器

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

api-key

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdioapi-key部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP