mcp-compressor
mcp-compressor
MCPツールによって消費されるトークンを削減するためのMCPサーバーラッパーです。
Githubリポジトリ: https://github.com/atlassian-labs/mcp-compressor/
TypeScriptドキュメント (GH Pages): https://atlassian-labs.github.io/mcp-compressor/typescript/
TypeScriptパッケージコード: https://github.com/atlassian-labs/mcp-compressor/blob/main/typescript/
ブログ: https://www.atlassian.com/blog/developer/mcp-compression-preventing-tool-bloat-in-ai-agents/
📋 新着情報
2026-04-06 — TypeScript実装
圧縮コンセプト、OAuthサポート、プロセス内ランタイムAPI、TypeScript CLIモードを共通化したTypeScript実装を追加しました。
2026-04-06 — シングルサーバーMCP設定JSON文字列
COMMAND_OR_URLに単一のMCP設定JSON文字列を指定できるようになりました。現時点では、mcpServersにはサーバーを1つだけ含める必要があり、明示的に指定されない限り、そのキーがデフォルトの--server-nameになります。
2026-03-24 — CLIモード
--cli-mode— ラップされたMCPサーバーをローカルCLIに変換します。実行可能なシェルスクリプト(Unix)または.cmdファイル(Windows)を生成するため、エージェントやユーザーは構造化されたツール呼び出しではなく、使い慣れたコマンドライン規則を通じてバックエンドと対話できます。
2026-03-24 — TOON出力
--toonify— ラップされたバックエンドツールからのJSONレスポンスを、JSONに代わる人間やLLMが読みやすいコンパクトな形式であるTOON形式に自動変換します。
概要
MCP Compressorは、既存のModel Context Protocol (MCP)サーバーをラップし、ツール記述を圧縮してトークン消費量を大幅に削減するプロキシサーバーです。すべてのツールと完全なスキーマを直接言語モデルに公開するのではなく、2段階のインターフェースを提供します。
get_tool_schema(tool_name)- 必要に応じて特定のツールの完全なスキーマを取得するinvoke_tool(tool_name, tool_input)- 指定された引数でツールを実行する
このアプローチにより、初期コンテキストで送信されるトークン数が劇的に削減され、同時に完全な機能が維持されます。
なぜこれが必要なのか?
MCPサーバーの人気は爆発的に高まっていますが、そのツール記述はすべてのLLMリクエストにおいてかなりのトークンを消費します。例えば:
公式の GitHub MCPサーバー は94個のツールを公開しており、17,600トークンを消費します
公式の Atlassian MCPサーバー は約10,000トークンを消費します
ツール記述だけで3万トークン以上を消費するため、プロンプトキャッシュによってはリクエストごとに 1〜10セント のコストがかかる可能性があります。MCP Compressorは、数十個のツールをわずか2つのラッパーツールに置き換えることで、機能を完全に維持したまま 70〜97%のトークン削減 を実現します。これにより、以下が可能になります:
コンテキストウィンドウを溢れさせることなく、多くのMCPサーバーを追加する
トークンベースのAPI料金における大幅なコスト削減
複数のサーバーにまたがる数百、数千のツールをエージェントに提供するサポート
機能
Python + TypeScript実装: 成熟したPython実装に加え、Node.jsユーザー向けのTypeScriptパッケージ
トークン削減: 圧縮レベルとツール数に応じて、ツール記述を最大99%圧縮
複数の圧縮レベル:
low、medium、high、maxから選択可能ユニバーサルな互換性: あらゆるMCPサーバー(stdio、HTTP、SSE)で動作
TOON出力変換:
--toonifyを使用して、JSONバックエンドツールの結果をTOONにオプションで変換CLIモード:
--cli-modeを使用して、あらゆるMCPサーバーをローカルCLIに変換。使い慣れたコマンドライン構文でバックエンドと対話できるシェルスクリプトを生成機能損失ゼロ: すべてのツールはラッパーインターフェースを通じて完全にアクセス可能
簡単な統合: 既存のMCPサーバーのドロップイン置換
Python vs TypeScript
機能 | Python | TypeScript |
コア圧縮プロキシサーバー | ✅ | ✅ |
stdio / ストリーム可能なHTTP / SSEバックエンド | ✅ | ✅ |
シングルサーバーMCP設定JSON文字列入力 | ✅ | ✅ |
永続的なOAuthサポート | ✅ | ✅ |
CLIモード | ✅ 成熟 | ✅ 利用可能 |
アプリ/エージェント埋め込み用プロセス内ランタイムAPI | ⚠️ 非ファーストクラス | ✅ ファーストクラス |
プロンプト/リソースパススルーの同等性 | ✅ より広範 | ⚠️ より限定的 |
本番環境での成熟度 | ✅ 主要な実装 | ⚠️ 新しい実装 |
現在、最も成熟した機能セットが必要な場合はPython実装を使用してください。Node.jsネイティブな使用、プロセス内埋め込み、またはより緊密なTypeScriptエコシステムとの統合が必要な場合は、TypeScript実装を使用してください。
インストール
pipまたはuvを使用してインストールします:
pip install mcp-compressor
# or
uv pip install mcp-compressorクイックスタート
基本的な使用方法
コマンドまたはURLを指定して、任意のMCPサーバーをラップします:
# Wrap a stdio MCP server
uvx mcp-compressor uvx mcp-server-fetch
# Wrap a remote HTTP MCP server
uvx mcp-compressor https://example.com/server/mcp
# Wrap a remote SSE MCP server
uvx mcp-compressor https://example.com/server/sse利用可能な引数の詳細なドキュメントについては、uvx mcp-compressor --help を参照してください。
圧縮レベル
--compression-level または -c フラグを使用して、適用する圧縮量を制御します:
# Low
mcp-compressor uvx mcp-server-fetch -c low
# Medium (default)
mcp-compressor uvx mcp-server-fetch -c medium
# High
mcp-compressor uvx mcp-server-fetch -c high
# Max
mcp-compressor uvx mcp-server-fetch -c maxCLIモード
ラップされたバックエンドをローカルのコマンドラインツールのように動作させたい場合は、ここから始めてください:
mcp-compressor --cli-mode --server-name atlassian -- https://mcp.atlassian.com/v1/mcp次に、生成されたCLIスクリプトを使用します:
atlassian --help--cli-mode は、ラップされたバックエンドを多くのMCPツールとして公開する代わりに、発見用の単一のヘルプツールを備えたローカルCLIに変換します。
これは、エージェントにシェルスタイルのインターフェースで作業させたい場合や、バックエンドサーバーが直接的なMCPツール呼び出しよりもコマンドやフラグとして扱う方が理にかなっている場合に特に便利です。
flowchart LR
Client["MCP Client / Agent"] -->|discovers| HelpTool["<server_name>_help"]
HelpTool -->|explains commands| GeneratedCLI["Generated local CLI script\n(e.g. atlassian)"]
User["User or Agent"] -->|runs CLI subcommands| GeneratedCLI
GeneratedCLI --> Bridge["Local HTTP bridge\n127.0.0.1:<port>"]
Bridge --> Compressor["mcp-compressor\n--cli-mode"]
Compressor --> Backend["Wrapped MCP server"]
Backend --> Compressor
Compressor --> Bridge
Bridge --> GeneratedCLICLIモードが重要な理由
多数ではなく1つのツール: MCPクライアントは、ラッパーツールセットの代わりに単一の
<server_name>_helpツールを認識します自然なシェルUX: バックエンドツールは、JSONスキーマから派生したフラグを持つCLIサブコマンドになります
エージェントに適している: エージェントはヘルプを検査し、コンテキストに完全なMCPツールサーフェスを保持することなく、ローカルコマンドを繰り返し呼び出すことができます
OAuthも動作: ラップされたバックエンドがOAuthを必要とする場合、CLIモードはローカルCLIを生成する前にその接続フローを実行します
デフォルトでTOON: コンパクトで読みやすい出力のために、CLIモードでは
--toonifyが自動的に有効になります
CLIモードのクイックスタート
# Wrap a remote MCP server as a local CLI
uvx mcp-compressor --cli-mode --server-name atlassian -- https://mcp.atlassian.com/v1/mcp
# Or pass a single MCP config JSON string
uvx mcp-compressor --cli-mode '{"mcpServers": {"atlassian": {"url": "https://mcp.atlassian.com/v1/mcp"}}}'CLIモードが開始されると、以下の処理が行われます:
必要に応じてOAuthを含む、ラップされたバックエンドサーバーに接続します
127.0.0.1:<port>でローカルHTTPブリッジを開始します実行可能なスクリプトを生成します。Unixでは通常
PATHにあれば~/.local/bin/<name>に、そうでなければ現在のディレクトリに書き込まれます。WindowsではPATH上の適切なディレクトリに.cmdランチャーを書き込みますクライアントが生成されたCLIとそのサブコマンドを発見できるように、
<server_name>_helpという名前の単一のMCPツールを公開します
起動後の使用例:
# Top-level help — lists all subcommands
atlassian --help
# Per-tool help — shows flags derived from the backend tool schema
atlassian get-confluence-page --help
# Invoke a tool using ordinary CLI flags
atlassian get-confluence-page --cloud-id abc123 --page-id 456
# Escape hatch for complex inputs
atlassian create-jira-issue --json '{"cloudId":"abc","projectKey":"PROJ","summary":"Bug"}'CLIサブコマンド名は、バックエンドツール名の snake_case から kebab-case への変換です(例: getConfluencePage → get-confluence-page)。
生成されたスクリプトは、mcp-compressor --cli-mode が実行されている間のみ機能します。
ローカルブリッジを特定のポートに固定したい場合は --cli-port を使用してください。
高度なオプション
Stdioサーバー
# Set working directory
mcp-compressor uvx mcp-server-fetch --cwd /path/to/dir
# Pass environment variables (supports environment variable expansion)
mcp-compressor uvx mcp-server-fetch \
-e API_KEY=${MY_API_KEY} \
-e DEBUG=trueリモートサーバー (HTTP/SSE)
# Add custom headers
mcp-compressor https://api.example.com/mcp \
-H "Authorization=Bearer ${TOKEN}" \
-H "X-Custom-Header=value"
# Set timeout (default: 10 seconds)
mcp-compressor https://api.example.com/mcp \
--timeout 30カスタムサーバー名
mcp-compressorを通じて複数のMCPサーバーを実行する場合、競合を避けるためにラッパーツール名にカスタムプレフィックスを追加できます:
# Without server name - tools will be: get_tool_schema, invoke_tool
mcp-compressor uvx mcp-server-fetch
# With server name - tools will be: github_get_tool_schema, github_invoke_tool
mcp-compressor https://api.githubcopilot.com/mcp/ --server-name github
# Special characters are automatically sanitized
mcp-compressor uvx mcp-server-fetch --server-name "My Server!"
# Results in: my_server__get_tool_schema, my_server__invoke_toolTOON出力変換
--toonify を使用して、JSONバックエンドツールの結果を自動的にTOON形式に変換します。
# Convert JSON backend tool results to TOON
mcp-compressor https://api.example.com/mcp --toonify--toonify が有効な場合:
直接的なツール呼び出しを通じて返される成功したバックエンドツールの結果は、JSONオブジェクトまたは配列であればTOON化されます
invoke_tool(...)を通じて返される成功したバックエンドツールの結果もTOON化されますget_tool_schema(...)およびlist_tools(...)からのラッパーレスポンスはTOON化されませんinvoke_tool(...)からのラッパー生成のガイダンスやエラーテキストはTOON化されませんJSON以外のテキストは変更されずに返されます
CLIモード
CLIモードについては、上記の専用のCLIモードセクションで説明されています。
要約:--cli-mode を使用し、サーバーに名前を付け、mcp-compressor が実行されている間に生成されたローカルスクリプトと対話します。
mcp-compressor https://mcp.atlassian.com/v1/mcp --server-name atlassian --cli-mode --cli-port 8765ログ記録
# Set log level
mcp-compressor uvx mcp-server-fetch --log-level debug
mcp-compressor uvx mcp-server-fetch -l warning仕組み
MCP Compressorは、LLMクライアントと基盤となるMCPサーバー間の透過的なプロキシとして機能します:
flowchart TB
subgraph github["GitHub MCP"]
g1["create_pr"]
g2["get_me"]
g3["list_repos"]
g4["get_issue"]
g5["..."]
g6["(+87 more tools)"]
end
subgraph proxy["MCP Compressor"]
t1["get_tool_schema"]
t2["invoke_tool"]
end
subgraph client["MCP Client"]
end
g1 <--> proxy
g2 <--> proxy
g3 <--> proxy
g4 <--> proxy
g6 <--> proxy
t1 <--> client
t2 <--> client完全なスキーマを持つすべてのツール(多くの場合数千トークン)を見る代わりに、LLMは以下のみを見ます:
Available tools:
<tool>search_web(query, max_results): Search the web for information</tool>
<tool>get_weather(location, units): Get current weather for a location</tool>
<tool>send_email(to, subject, body): Send an email message</tool>LLMがツールを使用する必要がある場合、まず get_tool_schema(tool_name) を呼び出して完全なスキーマを取得し、次に invoke_tool(tool_name, tool_input) を呼び出して実行します。
--toonify が有効な場合、成功したバックエンドツールの結果は、クライアントに返される前にJSONからTOONに変換されます。ラッパーヘルパーのレスポンス自体は再フォーマットされません。
CLIモード (--cli-mode) では、コンプレッサーは通常のラッパーの代わりに単一の <server_name>_help ツールを公開します。実際のすべてのツール対話は、ローカルHTTPブリッジを介して生成されたシェルスクリプトを通じて行われます。
sequenceDiagram
participant Client as MCP Client
participant Compressor as MCP Compressor
participant Server as GitHub MCP<br/>(91 tools)
Client->>Compressor: list_tools()
Compressor->>Server: list_tools()
Server-->>Compressor: create_pr, get_me, list_repos, ...
Compressor-->>Client: get_tool_schema, invoke_tool
Client->>Compressor: get_tool_schema("create_pr")
Compressor-->>Client: create_pr description & schema
Client->>Compressor: invoke_tool("create_pr", {...})
Compressor->>Server: create_pr({...})
Server-->>Compressor: result
Compressor-->>Client: result圧縮レベルの詳細
レベル | 説明 | ユースケース |
| 最大圧縮 - | 最大のトークン節約。エージェントに提供したいがツールがめったに使用されないMCPサーバーや、ツール数が非常に多いサーバーに適しています |
| ツール名とパラメータ名のみ | 最大のトークン節約。大規模なツールセットに最適 |
| 各説明の最初の文 | バランスの取れたアプローチ。ほとんどのケースに適しています |
| 完全なツール説明 | エージェントにとって直感的ではなく、理解や使用が難しいツール向け。これらのケースで圧縮レベルを低くすると、ツールの目的や相互関係についてLLMにより多くのコンテキストを提供できます |
最適な圧縮レベルの選択は、以下のようないくつかの要因に依存します:
MCPサーバー内のツール数 - ツールが多いほど、より多くの圧縮を使用します。
ツールの使用頻度 - 圧縮されたサーバーからのツールがめったに使用されない場合は、トークンを無駄に消費しないようにさらに圧縮します。
ツールの複雑さや特殊性 - 単純なツールは、ほとんどデメリットなしにさらに圧縮できます。単一の入力引数
commandを持つ単純なbashツールを考えてみてください。最新のLLMであれば、ツール名と引数名を見るだけでその使用方法を正確に理解できるため、ツール内に予期しない内部ロジックがない限り、デメリットをほとんど伴わずに強力な圧縮を使用できます。
MCP JSONファイルによる設定
CLI上で COMMAND_OR_URL として単一サーバーのMCP設定JSON文字列を直接渡すこともできます。これは、設定自体にURL、ヘッダー、トランスポート、またはstdioコマンドの詳細を含めたいリモートサーバーの場合に特に便利です。
現時点では、直接のJSON文字列入力は mcpServers 内のサーバーエントリを1つだけサポートしています。
MCP JSON設定ファイルでmcp-compressorを設定するには、以下のパターンを使用します:
{
"mcpServers": {
"compressed-github": {
"command": "mcp-compressor",
"args": [
"https://api.githubcopilot.com/mcp/",
"--header",
"Authorization=Bearer ${GH_PAT}",
"--server-name",
"github"
],
},
"compressed-fetch": {
"command": "mcp-compressor",
"args": [
"uvx",
"mcp-server-fetch",
"--server-name",
"fetch"
],
}
}
}この設定により、github_get_tool_schema、github_invoke_tool、fetch_get_tool_schema、fetch_invoke_tool という名前のツールが作成され、複数の圧縮サーバーを一緒に使用する際の命名競合を防ぎます。
圧縮レベルを指定する場合:
{
"mcpServers": {
"compressed-fetch": {
"command": "mcp-compressor",
"args": [
"uvx",
"mcp-server-fetch",
"--compression-level", "high"
],
}
}
}ユースケース
大規模なツールセット: MCPサーバーが数十から数百のツールを公開している場合
トークン制限のあるモデル: 実際の会話のために利用可能なコンテキストウィンドウを最大化する
コスト最適化: トークン課金制API使用時のトークンコストを削減する
パフォーマンス: コンテキストが小さくなることで初期応答が高速化する
マルチサーバーセットアップ: コンテキストを圧倒することなく、複数のMCPサーバーで使用する
コマンドラインリファレンス
Usage: mcp-compressor [OPTIONS] COMMAND_OR_URL
Run the MCP Compressor proxy server.
This is the main entry point for the CLI application. It connects to an MCP
server (via stdio, HTTP, or SSE) and wraps it with a compressed tool
interface.
Arguments:
COMMAND_OR_URL The URL of the MCP server to connect to for streamable HTTP
or SSE servers, or the command and arguments to run for
stdio servers. Example: uvx mcp-server-fetch \[required]
Options:
--cwd TEXT The working directory to use when running
stdio MCP servers.
-e, --env TEXT Environment variables to set when running
stdio MCP servers, in the form
VAR_NAME=VALUE. Can be used multiple times.
Supports environment variable expansion with
${VAR_NAME} syntax.
-H, --header TEXT Headers to use for remote (HTTP/SSE) MCP
server connections, in the form Header-
Name=Header-Value. Can be use multiple
times. Supports environment variable
expansion with ${VAR_NAME} syntax.
-t, --timeout FLOAT The timeout in seconds for connecting to the
MCP server and making requests. \[default:
10.0]
-c, --compression-level [max|high|medium|low]
The level of compression to apply to tool
the tools descriptions of the wrapped MCP
server. \[default: medium]
-n, --server-name TEXT Optional custom name to prefix the wrapper
tool names (get_tool_schema, invoke_tool,
list_tools). The name will be sanitized to
conform to MCP tool name specifications
(only A-Z, a-z, 0-9, _, -, .).
-l, --log-level [debug|info|warning|error|critical]
The logging level. Used for both the MCP
Compressor server and the underlying MCP
server if it is a stdio server. \[default:
WARNING]
--toonify Convert JSON backend tool responses to TOON
format automatically.
--cli-mode Start in CLI mode: expose a single help MCP
tool, start a local HTTP bridge, and generate
a shell script for interacting with the
wrapped server via CLI. --toonify is
automatically enabled in this mode.
--cli-port INTEGER Port for the local CLI bridge HTTP server
(default: random free port).
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to
copy it or customize the installation.
--help Show this message and exit.This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/atlassian-labs/mcp-compressor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server