429-throttle-mcp
Transparent rate-limiting MCP proxy that prevents HTTP 429 errors by throttling API calls and tokens. Includes tools to check usage and dynamically adjust rate limits.
README
429-throttle-mcp
English | 中文
不再被 API 429 拒绝 — 一个带速率限制的 MCP 代理,让模型在长程任务中自动控制调用节奏。
是什么
很多免费大模型 API(Grok、Gemini、Dots 等)每分钟只能调用 30 次左右。模型在做长程任务(搜索 + 生成 PPT、批量调用工具)时,很容易超出限额被 429 拒绝。
429-throttle-mcp 在这个痛点上提供了一个透明限流层:
模型 → call_api 工具 → 限流器 → 实际 API 请求 → 返回结果 + 用量快照
模型不需要知道速率限制的存在,它只需要正常调用 call_api。限流逻辑在 MCP 内部透明执行——额度够就放行,不够就告诉模型等多久再重试。
包结构
Monorepo,包含两个独立 npm 包,共享核心限流逻辑:
429-throttle-mcp/
├── packages/
│ ├── rate-limiter.js # 核心限流逻辑(共享)
│ ├── 429-throttle-mcp/ # MCP Server 包
│ │ ├── package.json
│ │ ├── server.js
│ │ └── README.md
│ └── dsh-throttle/ # DSH Plugin 包
│ ├── package.json
│ ├── plugin.js
│ └── README.md
├── dsh-manifest.json
├── README.md
└── .env.example
| 包名 | 安装 | 用途 |
|---|---|---|
429-throttle-mcp |
npm i 429-throttle-mcp |
MCP Server(ZCode 等 MCP 客户端) |
dsh-throttle |
npm i dsh-throttle |
DeepSeek Harness Plugin |
核心参数
| 参数 | 默认值 | 说明 |
|---|---|---|
MAX_CALLS |
30 | 每分钟最大调用次数 (RPM) |
MAX_TOKENS |
750000 | 每分钟最大 Token 数 (TPM),含请求体和响应体 |
暴露的工具
call_api
通过限流代理发送 HTTP 请求。所有外部 API 调用必须经过此工具。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url |
string | ✅ | 目标 API 的完整 URL |
method |
string | ❌ | HTTP 方法,默认 GET |
body |
string | ❌ | 请求体,JSON 字符串 |
headers |
string | ❌ | 自定义请求头,JSON 字符串 |
返回:API 响应 + _meta.rateLimit 用量快照。如果被限流拒绝,返回 RATE_LIMIT_EXCEEDED 错误,包含 retryAfterSeconds 建议等待时间。
get_rate_limit_status
查询当前速率限制使用情况。返回已用/剩余调用次数和 Token 数,以及建议。不包含队列计数器,避免用户焦虑。
set_rate_limit
动态调整限流参数(对应滑块调节,实时生效无需重启)。
| 参数 | 类型 | 说明 |
|---|---|---|
callsPerMinute |
number | 每分钟最大调用次数 (RPM) |
tokensPerMinute |
number | 每分钟最大 Token 数 (TPM) |
安装
MCP 客户端(如 ZCode)
npm install 429-throttle-mcp
在 MCP 配置中添加:
{
"mcpServers": {
"429-throttle-mcp": {
"command": "node",
"args": ["node_modules/429-throttle-mcp/server.js"],
"env": {
"MAX_CALLS": "30",
"MAX_TOKENS": "750000"
}
}
}
}
DeepSeek Harness
npm install dsh-throttle
在 DSH 配置中添加:
{
"plugins": {
"dsh-throttle": {
"maxCalls": 30,
"maxTokens": 750000
}
}
}
工作流示例
模型在做品牌 PPT 搜索任务时:
- 调用
get_rate_limit_status→ 确认额度充足 - 调用
call_api→ 搜索品牌关键词 - 如果被拒绝 → 等待
retryAfterSeconds后重试 - 重复 2-3 直到收集完所有信息
- 调用
set_rate_limit→ 收紧限流参数用于生成阶段
限流算法
滑动窗口 + 令牌桶(Sliding Window + Token Bucket):维护 60 秒滑动窗口,每次调用记录时间戳和 token 消耗。窗口外的旧记录自动清理。超过限制时计算最早记录的剩余等待时间。
并发安全:tryConsume() 是同步函数,在 Node.js 单线程事件循环中天然串行化,不会出现竞态条件。
为什么用这个而不是 prompt 里写"慢点调用"?
| 方式 | 效果 |
|---|---|
| Prompt 写"每 2 秒调用一次" | ❌ 模型没有秒表,不会遵守,burst 出去照样 429 |
| 外部脚本限流 | ❌ 需要额外进程,模型不感知,出错难调试 |
| MCP 限流代理(本项目) | ✅ 模型无感,透明把关,结构化错误 + 等待建议 |
Application scenario Keyword
429报错, anti 429, MCP限流, 大模型每分钟调用限制, 免费大模型速率限制, Agent批量调用触发429, MCP排队调用, RPM, TPM, rate limiter mcp, quota guard, mcp server, mcp proxy, throttle, llm api quota, cop, HTTP 429, Too Many Requests, rate limiting, token bucket, sliding window, API proxy, LLM rate limit, AI API throttle, concurrent rate limit, 30 calls per minute
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。