utcp-mcp网关
🚀 The Smarter Way to Use MCP — Save 90%+ Tokens with Code Mode
English | 中文
Inspired by Claude Skills' Progressive Disclosure
claude skills alternative · mcp token optimization · progressive tool discovery · mcp response filtering
______________________________________________________________________
The Story / 故事
我注意到 克劳德技能 工作得非常好——克劳德动态地发现并加载它需要的技能,避免了上下文过载。 但大多数代理框架呢?他们一次将500多个工具定义转储到上下文中。MCP的反应如何?通常有10000多个字符的原始数据浪费了您的令牌。 所以我建立在UTCP之上: 渐进式发现+代码模式+LLM过滤 --使用MCP的更智能方式。 最好的部分?只需添加一个配置块。适用于Claude Desktop、Windsurf、Cursor、Dify和任何兼容MCP的客户端。不需要额外的服务器。
寻找。..?
- ✅ 克劳德技能替代品 对于您的MCP设置
- ✅ 更好的MCP工具管理 没有上下文重载
- ✅ 渐进式工具发现 --按需加载工具
- ✅ OpenAPI/Swagger到工具 --将REST API注册为工具
- ✅ MCP令牌优化 --减少90%+代币浪费
- ✅ MCP响应滤波 --智能摘要
你来对地方了。
这是什么?
LLM擅长编写代码,但在工具调用方面很糟糕。
传统的MCP将工具直接暴露给LLM,但LLM在以下方面遇到了困难:
- 工具太多(500+定义=混淆)
- 巨大的响应(10000+个字符=浪费的令牌)
- 多次往返(15次以上API调用=缓慢且昂贵)
utcp-mcp-gateway 修复了所有这些问题:
| 问题 | 解决方案 |
|---|---|
| 500+工具定义 | 渐进式发现 --只装载需要的东西 |
| 10000+个字符响应 | LLM过滤 --智能摘要(缩小97%!) |
| API往返15次以上 | 代码模式 --一个代码块,一次执行 |
Traditional: User → LLM → Tool1 → LLM → Tool2 → LLM → Tool3 → Result
(15+ calls, $26/day, slow)
Code Mode: User → LLM writes code → Execute all at once → Result
(1 call, $0.87/day, fast)结果:每年节省9536美元 (基准源)
特性
| 特性 | 描述 |
|---|---|
| 🔌 通用MCP | 连接任何HTTP或stdio MCP服务器 |
| 📜 OpenAPI支持 | 直接从OpenAPI/Swagger规范注册REST API |
| 🧠 LLM过滤 | 智能摘要(响应减少97%!) |
| 🔍 渐进式发现 | search_tools -查找工具而不加载所有500个定义 |
| ⚡ 代码模式 | 在一次调用中执行TypeScript工具链 |
| 🔒 安全沙盒 | 代码在隔离环境中运行 |
| 📦 零配置 | 仅环境变量,无配置文件 |
快速开始
无需配置文件! 只需添加到Claude Desktop配置中:
模式1:HTTP MCP(远程)
{
"mcpServers": {
"gateway": {
"command": "npx",
"args": ["-y", "utcp-mcp-gateway"],
"env": {
"MCP_URL": "https://mcp.context7.com/mcp",
"MCP_NAME": "context7",
"LLM_API_KEY": "sk-xxx",
"LLM_BASE_URL": "https://api.openai.com/v1",
"LLM_MODEL": "gpt-4o-mini"
}
}
}
}模式2:stdio MCP(本地)
{
"mcpServers": {
"gateway": {
"command": "npx",
"args": ["-y", "utcp-mcp-gateway"],
"env": {
"MCP_COMMAND": "npx",
"MCP_ARGS": "-y,@anthropic/mcp-server-filesystem",
"MCP_NAME": "filesystem",
"MCP_TRANSPORT": "stdio",
"LLM_API_KEY": "sk-xxx"
}
}
}
}⚠️ Windows用户: 使用cmd /c npx而不是npx: ``json "command": "cmd", "args": ["/c", "npx", "-y", "utcp-mcp-gateway"]``
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
MCP_URL | HTTP模式 | MCP服务器URL |
MCP_COMMAND | stdio模式 | 运行MCP的命令 |
MCP_ARGS | stdio模式 | 参数(逗号分隔) |
MCP_NAME | ✅ | MCP命名空间 |
MCP_TRANSPORT | 没有 | http (默认)或 stdio |
LLM_API_KEY | 用于筛选 | 任何与OpenAI兼容的API密钥 |
LLM_BASE_URL | 用于筛选 | API端点(默认值:OpenAI) |
LLM_MODEL | 用于过滤 | 型号名称(默认:gpt-4o-mini) |
就是这样!重新启动Claude Desktop并尝试: *“搜索React useState示例”*
运作原理
┌──────────────┐ ┌─────────────────────────────────┐ ┌─────────────┐
│ Your AI │────▶│ utcp-mcp-gateway │────▶│ Any MCP │
│ (Claude etc) │ │ ┌─────────┐ ┌─────────────┐ │ │ (Context7) │
└──────────────┘ │ │ UTCP │ │ LLM Filter │ │ └─────────────┘
│ │ search │ │ 10K→300char │ │
│ └─────────┘ └─────────────┘ │
└─────────────────────────────────┘Gateway为您的AI提供了4个工具:
| 工具 | 参数 | 功能 |
|---|---|---|
search_tools | query, limit | 按关键字查找工具。返回带有TypeScript接口的工具 |
list_tools | - | 列出已连接MCP的所有已注册工具 |
tool_info | tool_name | 获取特定工具的详细TypeScript接口 |
call_tool_chain | code, timeout, max_output_size, filter_response, purpose | 执行一次调用多个工具的TypeScript代码 |
上下文感知摘要
使用时 call_tool_chain 随着 filter_response: true,您可以提供 purpose 用于指导LLM摘要的参数:
call_tool_chain({
code: "const docs = await context7.context7_get_library_docs({...}); return docs;",
filter_response: true,
purpose: "Find React useState usage examples"
})LLM将只提取与您的目的相关的信息,而不是通用的摘要。
示例流程
User: "How do I use React useState?"
1. AI calls search_tools("react") → Returns tools with TypeScript interfaces
2. AI calls call_tool_chain with code:
const id = await context7.context7_resolve_library_id({ libraryName: "react" });
const docs = await context7.context7_get_library_docs({ libraryId: id, topic: "useState" });
return docs;
3. Gateway executes code and returns result
4. AI receives structured response代币储蓄基准
| MCP服务 | 原始 | 筛选 | 节省 |
|---|---|---|---|
| 上下文7(文档) | 10625个字符 | 326个字符 | 97% |
| DeepWiki(维基) | 3318个字符 | 400个字符 | 88% |
配置
单MCP
MCP_URL=https://mcp.context7.com/mcp
MCP_NAME=context7多个MCP(推荐:编号样式)
使用编号的环境变量进行清晰配置:
{
"mcpServers": {
"gateway": {
"command": "npx",
"args": ["-y", "utcp-mcp-gateway"],
"env": {
"MCP_1_NAME": "context7",
"MCP_1_URL": "https://mcp.context7.com/mcp",
"MCP_2_NAME": "filesystem",
"MCP_2_COMMAND": "npx",
"MCP_2_ARGS": "-y,@anthropic/mcp-server-filesystem,/path/to/dir",
"LLM_API_KEY": "sk-xxx",
"MAX_RESPONSE_CHARS": "10000"
}
}
}
}编号变量:
MCP_1_NAME,MCP_1_URL-第一个MCP(HTTP模式)MCP_2_NAME,MCP_2_COMMAND,MCP_2_ARGS-第二MCP(标准输入模式)- 多达
MCP_20_*支持
多个MCP(替代方案:半导体风格)
{
"env": {
"MCP_URL": "https://mcp.context7.com/mcp;https://mcp.deepwiki.com/mcp",
"MCP_NAME": "context7;deepwiki"
}
}LLM设置
| 变量 | 默认值 | 描述 |
|---|---|---|
LLM_API_KEY | - | OpenAI/OpenRouter API密钥 |
LLM_BASE_URL | OpenAI | 自定义端点(兼容OpenAI) |
LLM_MODEL | gpt-4o-mini | 摘要模型 |
ENABLE_LLM_FILTER | true | 启用/禁用筛选 |
MAX_RESPONSE_CHARS | 10000 | LLM汇总前的最大响应长度 |
FORCE_LLM_FILTER | false | 强制对所有响应进行LLM摘要 |
智能路由器设置(v0.1.20+)
| 变量 | 默认值 | 描述 |
|---|---|---|
ENABLE_LLM_SEARCH | true | 使用LLM进行智能刀具搜索 |
ROUTER_MODEL | (使用LLM_MODEL) | 刀具布线模型(建议使用更快的模型) |
它是如何工作的:
list_tools返回简短摘要而不是完整模式(保存标记)search_tools使用LLM了解意图并推荐相关工具(使用完整的描述以确保准确性)- 如果LLM不可用,则返回关键字搜索
- 如果LLM返回的名称略有不同,则对工具名称进行模糊匹配
- 在LLM摘要之前预截断大型响应(>20万个字符)
OpenAPI设置(v0.1.24+)
直接从OpenAPI/Swagger规范注册REST API:
# Example: APIs.guru (public API directory)
OPENAPI_1_NAME=apisguru
OPENAPI_1_URL=https://api.apis.guru/v2/openapi.yaml
# Example with authentication
OPENAPI_2_NAME=my_api
OPENAPI_2_URL=https://api.example.com/openapi.json
OPENAPI_2_AUTH_TYPE=api-key
OPENAPI_2_AUTH_TOKEN=sk-xxx
OPENAPI_2_AUTH_VAR=X-Api-Key
OPENAPI_2_AUTH_LOCATION=header| 变量 | 必填 | 描述 |
|---|---|---|
OPENAPI_N_NAME | ✅ | 工具源名称 |
OPENAPI_N_URL | ✅ | OpenAPI规范URL |
OPENAPI_N_AUTH_TYPE | ❌ | api-key, bearer, basic,或 none |
OPENAPI_N_AUTH_TOKEN | ❌ | 身份验证令牌/密钥 |
OPENAPI_N_AUTH_VAR | ❌ | 标题名称(默认值: Authorization) |
OPENAPI_N_AUTH_LOCATION | ❌ | header, query,或 cookie |
它是如何工作的:
- 下载并解析OpenAPI 2.0/3.0规范
- 将每个操作转换为UTCP工具
- 工具名称=OpenAPI规范中的操作ID
- 工具描述=OpenAPI规范的摘要或描述
- 支持API密钥、承载、基本和OAuth2身份验证
要求:
- 每个API操作都必须具有
operationId(跳过没有它的操作) - 文件上传参数(
type: file)UTCP SDK不支持
______________________________________________________________________
故事
我发现 克劳德技能 效果惊人 — Claude 动态发现并只加载需要的技能,避免上下文过载。 但大多数 Agent 框架?一次性把 500+ 工具定义塞进上下文。而且 MCP 响应?经常是 10,000+ 字符的原始数据,白白浪费 Token。 于是我在 UTCP 基础上做了这个:渐进式发现 + Code Mode + LLM 过滤 — 更聪明的 MCP 使用方式。 最棒的是?只需加一段配置。兼容 Claude Desktop、Windsurf、Cursor、Dify 等所有 MCP 客户端。无需额外服务器。
你在找...?
- ✅ Claude Skills 替代方案 — 用于你的 MCP 配置
- ✅ 更好的 MCP 工具管理 — 无上下文过载
- ✅ 渐进式工具发现 — 按需加载工具
- ✅ OpenAPI 转工具 — 直接从 OpenAPI/Swagger 注册 REST API
- ✅ MCP Token 优化 — 减少 90%+ Token 浪费
- ✅ MCP 响应过滤 — 智能摘要
你来对地方了。
这是什么?
LLM 擅长写代码,但不擅长调用工具。
传统 MCP 直接把工具暴露给 LLM — 但 LLM 面临:
- 工具太多(500+ 定义 = 困惑)
- 响应太大(10,000+ 字符 = 浪费 Token)
- 往返太多(15+ 次 API 调用 = 慢且贵)
utcp-mcp-gateway 一次解决所有问题:
| 问题 | 解决方案 |
|---|---|
| 500+ 工具定义 | 渐进式发现 — 只加载需要的 |
| 10,000+ 字符响应 | LLM 过滤 — 智能摘要(缩小 97%!) |
| 15+ 次 API 往返 | 代码模式 — 一段代码,一次执行 |
传统方式: 用户 → LLM → 工具1 → LLM → 工具2 → LLM → 工具3 → 结果
(15+ 次调用, $26/天, 慢)
Code Mode: 用户 → LLM 写代码 → 一次执行全部 → 结果
(1 次调用, $0.87/天, 快)结果:每年节省 $9,536 (基准测试来源)
核心功能
| 功能 | 说明 |
|---|---|
| 🔌 通用 MCP | 连接任意 HTTP 或 stdio MCP |
| 📜 OpenAPI 支持 | 直接从 OpenAPI/Swagger 规范注册 REST API |
| 🧠 LLM 过滤 | 智能摘要(响应缩小 97%!) |
| 🔍 渐进式发现 | search_tools - 按需搜索,无需加载全部 500 个工具 |
| ⚡ 代码模式 | 一次调用执行 TypeScript 代码链 |
| 🔒 安全沙箱 | 代码在隔离环境运行 |
| 📦 零配置 | 只需环境变量,无需配置文件 |
快速开始
零配置文件! 直接添加到 Claude Desktop 配置:
模式 1:HTTP MCP(远程)
{
"mcpServers": {
"gateway": {
"command": "npx",
"args": ["-y", "utcp-mcp-gateway"],
"env": {
"MCP_URL": "https://mcp.context7.com/mcp",
"MCP_NAME": "context7",
"LLM_API_KEY": "sk-xxx",
"LLM_BASE_URL": "https://api.openai.com/v1",
"LLM_MODEL": "gpt-4o-mini"
}
}
}
}模式 2:stdio MCP(本地)
{
"mcpServers": {
"gateway": {
"command": "npx",
"args": ["-y", "utcp-mcp-gateway"],
"env": {
"MCP_COMMAND": "npx",
"MCP_ARGS": "-y,@anthropic/mcp-server-filesystem",
"MCP_NAME": "filesystem",
"MCP_TRANSPORT": "stdio",
"LLM_API_KEY": "sk-xxx"
}
}
}
}⚠️ Windows 用户: 使用cmd /c npx代替npx: ``json "command": "cmd", "args": ["/c", "npx", "-y", "utcp-mcp-gateway"]``
环境变量
| 变量 | 必填 | 说明 |
|---|---|---|
MCP_URL | HTTP 模式 | MCP 服务器 URL |
MCP_COMMAND | stdio 模式 | 运行 MCP 的命令 |
MCP_ARGS | stdio 模式 | 参数(逗号分隔) |
MCP_NAME | ✅ | MCP 命名空间 |
MCP_TRANSPORT | 否 | http(默认)或 stdio |
LLM_API_KEY | 过滤用 | 任意 OpenAI 兼容的 API Key |
LLM_BASE_URL | 过滤用 | API 端点(默认 OpenAI) |
LLM_MODEL | 过滤用 | 模型名称(默认 gpt-4o-mini) |
配置好后重启 Claude Desktop,试试:*"搜索 React useState 用法"*
工作原理
┌──────────────┐ ┌─────────────────────────────────┐ ┌─────────────┐
│ 你的 AI │────▶│ utcp-mcp-gateway │────▶│ 任意 MCP │
│ (Claude 等) │ │ ┌─────────┐ ┌─────────────┐ │ │ (Context7) │
└──────────────┘ │ │ UTCP │ │ LLM 过滤器 │ │ └─────────────┘
│ │ 搜索 │ │ 10K→300字符 │ │
│ └─────────┘ └─────────────┘ │
└─────────────────────────────────┘Gateway 向你的 AI 暴露 4 个工具:
| 工具 | 参数 | 作用 |
|---|---|---|
search_tools | query, limit | 按关键词搜索工具,返回带 TypeScript 接口的工具列表 |
list_tools | - | 列出所有已注册的工具 |
tool_info | tool_name | 获取特定工具的详细 TypeScript 接口 |
call_tool_chain | code, timeout, max_output_size, filter_response, purpose | 执行 TypeScript 代码,一次调用多个工具 |
上下文感知摘要
使用 call_tool_chain 时,设置 filter_response: true 并提供 purpose 参数,LLM 会根据你的目的智能提取相关信息:
call_tool_chain({
code: "const docs = await context7.context7_get_library_docs({...}); return docs;",
filter_response: true,
purpose: "查找 React useState 的用法示例"
})LLM 会只提取与你目的相关的信息,而不是泛泛的摘要。
调用流程示例
用户: "React useState 怎么用?"
1. AI 调用 search_tools("react") → 返回带 TypeScript 接口的工具
2. AI 调用 call_tool_chain 执行代码:
const id = await context7.context7_resolve_library_id({ libraryName: "react" });
const docs = await context7.context7_get_library_docs({ libraryId: id, topic: "useState" });
return docs;
3. Gateway 执行代码并返回结果
4. AI 收到结构化响应Token 节省实测
| MCP 服务 | 原始响应 | 过滤后 | 节省 |
|---|---|---|---|
| Context7 | 10,625 字符 | 326 字符 | 97% |
| DeepWiki | 3,318 字符 | 400 字符 | 88% |
配置说明
单个 MCP
MCP_URL=https://mcp.context7.com/mcp
MCP_NAME=context7多个 MCP(推荐:编号方式)
使用编号环境变量进行清晰配置:
{
"mcpServers": {
"gateway": {
"command": "npx",
"args": ["-y", "utcp-mcp-gateway"],
"env": {
"MCP_1_NAME": "context7",
"MCP_1_URL": "https://mcp.context7.com/mcp",
"MCP_2_NAME": "filesystem",
"MCP_2_COMMAND": "npx",
"MCP_2_ARGS": "-y,@anthropic/mcp-server-filesystem,/path/to/dir",
"LLM_API_KEY": "sk-xxx",
"MAX_RESPONSE_CHARS": "10000"
}
}
}
}编号变量:
MCP_1_NAME,MCP_1_URL- 第一个 MCP(HTTP 模式)MCP_2_NAME,MCP_2_COMMAND,MCP_2_ARGS- 第二个 MCP(stdio 模式)- 最多支持
MCP_20_*
多个 MCP(备选:分号方式)
{
"env": {
"MCP_URL": "https://mcp.context7.com/mcp;https://mcp.deepwiki.com/mcp",
"MCP_NAME": "context7;deepwiki"
}
}LLM 配置
| 变量 | 默认值 | 说明 |
|---|---|---|
LLM_API_KEY | - | OpenAI/OpenRouter API 密钥 |
LLM_BASE_URL | OpenAI | 自定义端点(兼容 OpenAI 格式) |
LLM_MODEL | gpt-4o-mini | 摘要用的模型 |
ENABLE_LLM_FILTER | true | 开启/关闭过滤 |
MAX_RESPONSE_CHARS | 10000 | 超过此长度时使用 LLM 摘要 |
FORCE_LLM_FILTER | false | 强制所有响应都经过 LLM 摘要 |
智能路由配置 (v0.1.20+)
| 变量 | 默认值 | 说明 |
|---|---|---|
ENABLE_LLM_SEARCH | true | 使用 LLM 智能搜索工具 |
ROUTER_MODEL | (复用 LLM_MODEL) | 路由用的模型(建议用更快的模型) |
工作原理:
list_tools返回精简摘要而非完整 schema(节省 token)search_tools使用 LLM 理解意图并推荐相关工具(使用全量描述确保准确性)- LLM 不可用时回退到关键词搜索
- 工具名模糊匹配,容错 LLM 返回格式不完全一致的情况
- 超大响应(>200k 字符)预截断后再进行 LLM 摘要
OpenAPI 配置 (v0.1.24+)
直接从 OpenAPI/Swagger 规范注册 REST API:
# 示例:APIs.guru(公开的 API 目录)
OPENAPI_1_NAME=apisguru
OPENAPI_1_URL=https://api.apis.guru/v2/openapi.yaml
# 带认证的示例
OPENAPI_2_NAME=my_api
OPENAPI_2_URL=https://api.example.com/openapi.json
OPENAPI_2_AUTH_TYPE=api-key
OPENAPI_2_AUTH_TOKEN=sk-xxx
OPENAPI_2_AUTH_VAR=X-Api-Key
OPENAPI_2_AUTH_LOCATION=header| 变量 | 必填 | 说明 |
|---|---|---|
OPENAPI_N_NAME | ✅ | 工具源名称 |
OPENAPI_N_URL | ✅ | OpenAPI 规范地址 |
OPENAPI_N_AUTH_TYPE | ❌ | api-key、bearer、basic 或 none |
OPENAPI_N_AUTH_TOKEN | ❌ | 认证令牌/密钥 |
OPENAPI_N_AUTH_VAR | ❌ | 头名称(默认 Authorization) |
OPENAPI_N_AUTH_LOCATION | ❌ | header、query 或 cookie |
工作原理:
- 下载并解析 OpenAPI 2.0/3.0 规范
- 每个操作转换为一个 UTCP 工具
- 工具名 = OpenAPI 规范中的 operationId
- 工具描述 = OpenAPI 规范中的 summary 或 description
- 支持 API Key、Bearer、Basic 和 OAuth2 认证
注意事项:
- API 操作必须有
operationId(没有的会被跳过) - 文件上传参数(
type: file)不被 UTCP SDK 支持
______________________________________________________________________
Credits / 致谢
这个项目建立在令人惊叹的开源工作之上:
- UTCP(通用工具调用协议) -使这成为可能的协议
- @utcp/代码模式 -代码执行能力
- @utcp/sdk -UTCP-SDK
- @模型上下文协议/sdk -Anthropic的MCP SDK
许可证
麻省 理工© 2025 清洁
