mcp压缩机
   
mcp-compressor 帮助代理使用大型MCP服务器,而无需在工具描述和模式上花费大量上下文。
它可以作为CLI MCP代理运行,也可以直接从Python、TypeScript或Rust嵌入。
- 文档:
- 仓库:
- 博客:
为什么选择mcp压缩机?
一个强大的MCP服务器可以暴露数十或数百个工具。每个工具都有一个名称、描述、输入模式,有时还有大型嵌套的JSON模式详细信息。在代理完成任何有用的工作之前,将所有这些提前发送到模型可能会浪费数千个令牌。
例如,大型公共MCP服务器仅在工具描述上就可能花费数千或数万个令牌。这就产生了三个问题:
- 模型将上下文花费在他们可能永远不会调用的工具上,
- 对于携带工具列表的每个请求,成本都会增加,
- 添加多个MCP服务器会迅速超出实际的上下文预算。
mcp-compressor 更改交互模式:模型首先看到一个小的压缩表面,只要求所选工具的完整模式,然后调用该工具。
模式1:压缩MCP代理
当您希望任何MCP客户端看到较小的刀具表面时,请使用此选项。
sequenceDiagram
participant Client as MCP client / agent
participant Proxy as mcp-compressor
participant Backend as Backend MCP server
Client->>Proxy: tools/list
Proxy->>Backend: tools/list
Backend-->>Proxy: all backend tools and schemas
Proxy-->>Client: compact wrapper tools
Client->>Proxy: get_tool_schema(tool_name)
Proxy-->>Client: full schema for selected tool
Client->>Proxy: invoke_tool(tool_name, input)
Proxy->>Backend: tools/call selected backend tool
Backend-->>Proxy: tool result
Proxy-->>Client: result前端通常只公开:
get_tool_schemainvoke_tool- 可选地
list_tools在max压缩
模式2:SDK和生成客户端的本地代理
当您的应用程序想要直接嵌入压缩并从代码或shell命令调用工具时,请使用此选项。
flowchart LR
App[Python / TypeScript / Rust app]
SDK[CompressorClient]
Proxy[Local Rust proxy\n/token auth]
Generated[Generated CLI / Python / TS clients]
Backend[MCP backend servers]
App --> SDK
SDK --> Proxy
Generated --> Proxy
Proxy --> BackendSDK在进程内启动Rust代理。生成的客户端使用会话令牌调用该代理。你的应用确实如此 不 需要生成一个 mcp-compressor stdio子流程。
特性
- 压缩MCP代理 对于现有的MCP客户端。
- 压缩级别:
low,medium,high,max. - Python、TypeScript和Rust SDK 与对齐
CompressorClientAPI。 - 本地TypeScript工具压缩 用于AI SDK风格的进程内工具。
- CLI模式和代码模式生成的客户端:shell命令加上Python/TypeScript函数。
- 只是Bash集成 面向命令的代理。
- 远程流式HTTP MCP后端.
- OAuth支持 对于支持浏览器授权的提供商。
- 工具过滤器和TOON输出 以进一步减少上下文。
- Atlassian MCP示例 首先使用OAuth。
快速示例
===“CLI”
mcp-compressor -c medium -- python server.py
python
from mcp_compressor import CompressorClient
with CompressorClient( servers={"alpha": {"command": "python", "args": ["server.py"]}}, compression_level="medium", ) as proxy: print([tool.name for tool in proxy.tools]) print(proxy.invoke("echo", {"message": "hello"}))
===“TypeScript”
import { CompressorClient } from "@atlassian/mcp-compressor";
const proxy = await new CompressorClient({ servers: { alpha: { command: "python", args: ["server.py"] } }, compressionLevel: "medium", }).connect();
try { console.log(proxy.tools.map((tool) => tool.name)); console.log(await proxy.invoke("echo", { message: "hello" })); } finally { proxy.close(); }
===“生锈”
use mcp_compressor::compression::CompressionLevel; use mcp_compressor::sdk::{CompressorClient, ServerConfig}; use serde_json::json;
let proxy = CompressorClient::builder() .server("alpha", ServerConfig::command("python").arg("server.py")) .compression_level(CompressionLevel::Medium) .build() .connect() .await?;
let result = proxy.invoke("echo", json!({ "message": "hello" })).await?;
生成的客户端
命令行接口命令模式 生成shell命令:
mcp-compressor --cli-mode --server-name atlassian -- https://mcp.atlassian.com/v1/mcp
atlassian get-accessible-atlassian-resources代码模式 生成Python或TypeScript函数:
# generated-py/atlassian.py
import atlassian
resources = atlassian.getAccessibleAtlassianResources()import { getAccessibleAtlassianResources } from "./generated-ts/atlassian.ts";
const resources = await getAccessibleAtlassianResources();看 代码模式和生成的客户端 了解更多细节。
