MCP Chaos Rig
A local MCP server that breaks on demand. Test your client against auth failures, disappearing tools, flaky responses, and token expiry, all from a web UI.
______________________________________________________________________
问题
您正在构建一个MCP客户端。您需要测试OAuth流、令牌刷新、工具发现、错误处理和会话生命周期。生产服务器不会按命令发生故障。你需要一个这样的服务器。
Chaos Rig做什么
运行一个本地MCP服务器,在那里你可以控制一切:
- 中断身份验证:强制会话中期使用401和500,按需过期令牌,拒绝刷新令牌
- 破碎工具:禁用要触发的工具
tools/changed,实时切换架构版本 - 断裂可靠性:添加随机延迟,使工具调用以可配置的速率失败
- 看到一切:实时请求日志显示入站JSON-RPC调用和出站SSE响应,点击展开正文
测试场景
| 场景 | 如何测试 |
|---|---|
| OAuth 2.1同意流程 | 使用交互式同意页面:批准、拒绝、无效代码、篡改状态 |
| 固定标头身份验证 | 切换到标头模式,配置键值对,验证客户端是否发送它们 |
| 缺少/错误的标头 | 发送缺少或不匹配标头的请求——401,包含详细信息 |
| 会话中的令牌拒绝 | 在客户端连接时将“拒绝OAuth”切换到401或500 |
| 令牌到期和刷新 | 将访问令牌TTL设置为短值,观察客户端刷新 |
| 拒绝刷新令牌 | 切换“拒绝刷新令牌”以强制重新身份验证 |
| 错误的客户端刷新 | 启用“强制刷新令牌所有权”--捕获丢失凭据的客户端并重新注册 |
| 作用域发现冲突 | 在元数据和WWW-Authenticate标头中设置不同的作用域,测试客户端信任的作用域 |
| 工具消失 | 禁用“工具”选项卡中的工具。客户端收到 tools/changed |
| 工具模式更改 | 在v1和v2模式之间切换回显或添加 |
| 不稳定的工具调用 | 设置0-100%的失败率。失败的呼叫返回 isError: true |
| 慢速响应 | 启用具有可配置延迟范围的慢速模式 |
| PKCE代码交换 | OAuth同意页面提供“错误代码”和“错误状态”选项 |
| 数据库支持的工具 | 在真实SQLite联系人数据库上的CRUD操作 |
______________________________________________________________________
快速开始
npx mcp-chaos-rig控制面板位于 本地主机:4100/ui,MCP端点位于 http://localhost:4100/mcp。需要节点20+。
如果您更喜欢全局安装:
npm install -g mcp-chaos-rig
mcp-chaos-rig或者从源代码运行:
git clone https://github.com/Typewise/mcp-chaos-rig.git
cd mcp-chaos-rig
npm install
npm run dev远程访问
如果您的生产环境需要访问Chaos Rig,请通过隧道(ngrok、Cloudflare隧道等)公开它并设置 BASE_URL 因此OAuth重定向可以正确解析:
BASE_URL=https://your-tunnel.example.dev npx mcp-chaos-rig认证状态
所有状态都在内存中,并在重新启动时重置。持票人以代币开始 test-token-123 (更改前有效)。OAuth令牌按TTL过期。启用时,刷新令牌跟踪每个客户端的所有权。重启后,在所有权关闭的情况下进行一次刷新以重新播种,然后将其打开。
______________________________________________________________________
控制面板选项卡
服务器
配置身份验证模式、慢速模式(随机延迟)和片状工具(失败率%)。
| 身份验证模式 | 行为 |
|---|---|
| 无 | 所有请求都通过 |
| 熊 | 需要 Authorization: Bearer test-token-123 |
| OAuth 2.1 | 带有交互式同意页面的完整授权流程 |
Bearer和OAuth模式支持故障注入:强制401或500响应以测试错误处理。
OAuth模式添加了访问令牌TTL、刷新令牌拒绝和刷新令牌所有权强制的控制。OAuth端点列在可折叠的部分中。
工具
打开/关闭工具。禁用发送 tools/changed 连接的客户。一些工具(echo、add)支持版本切换。
可用工具:
echo:返回您的消息(v2添加了格式选项)add:将两个数字相加(v2接受数组)get-time:当前服务器时间为ISO 8601random-number:范围内的随机整数reverse:反转字符串list-contacts,search-contacts,create-contact,update-contact,delete-contact:SQLite CRUD
联系人
查看并重置支持联系人工具的SQLite数据库。从三个种子记录开始。
日志
实时请求日志,显示入站请求和出站SSE响应。显示时间戳、源(mcp/auth/sse)、方法、状态、JSON-RPC方法、工具名称和参数。单击任何截断的body或args行以展开它。保留最后200个条目。
______________________________________________________________________
OAuth同意页面
当auth模式为OAuth时,授权端点会显示一个交互式同意页面:
| 按钮 | 结果 |
|---|---|
| 批准 | 使用有效授权码重定向 |
| 拒绝 | 重定向为 error=access_denied |
| 错误代码 | 使用无效代码重定向(令牌交换失败) |
| 错误状态 | 重定向被篡改的状态参数 |
______________________________________________________________________
