Skip to main content
Glama

mcp-compressor

Release Build status Commit activity License

MCPツールによって消費されるトークンを削減するためのMCPサーバーラッパーです。


📋 新着情報

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段階のインターフェースを提供します。

  1. get_tool_schema(tool_name) - 必要に応じて特定のツールの完全なスキーマを取得する

  2. 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%圧縮

  • 複数の圧縮レベル: lowmediumhighmax から選択可能

  • ユニバーサルな互換性: あらゆる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 max

CLIモード

ラップされたバックエンドをローカルのコマンドラインツールのように動作させたい場合は、ここから始めてください:

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 --> GeneratedCLI

CLIモードが重要な理由

  • 多数ではなく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モードが開始されると、以下の処理が行われます:

  1. 必要に応じてOAuthを含む、ラップされたバックエンドサーバーに接続します

  2. 127.0.0.1:<port> でローカルHTTPブリッジを開始します

  3. 実行可能なスクリプトを生成します。Unixでは通常 PATH にあれば ~/.local/bin/<name> に、そうでなければ現在のディレクトリに書き込まれます。Windowsでは PATH 上の適切なディレクトリに .cmd ランチャーを書き込みます

  4. クライアントが生成された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 への変換です(例: getConfluencePageget-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_tool

TOON出力変換

--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

圧縮レベルの詳細

レベル

説明

ユースケース

max

最大圧縮 - list_tools() 関数を公開

最大のトークン節約。エージェントに提供したいがツールがめったに使用されないMCPサーバーや、ツール数が非常に多いサーバーに適しています

high

ツール名とパラメータ名のみ

最大のトークン節約。大規模なツールセットに最適

medium (デフォルト)

各説明の最初の文

バランスの取れたアプローチ。ほとんどのケースに適しています

low

完全なツール説明

エージェントにとって直感的ではなく、理解や使用が難しいツール向け。これらのケースで圧縮レベルを低くすると、ツールの目的や相互関係についてLLMにより多くのコンテキストを提供できます

最適な圧縮レベルの選択は、以下のようないくつかの要因に依存します:

  1. MCPサーバー内のツール数 - ツールが多いほど、より多くの圧縮を使用します。

  2. ツールの使用頻度 - 圧縮されたサーバーからのツールがめったに使用されない場合は、トークンを無駄に消費しないようにさらに圧縮します。

  3. ツールの複雑さや特殊性 - 単純なツールは、ほとんどデメリットなしにさらに圧縮できます。単一の入力引数 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_schemagithub_invoke_toolfetch_get_tool_schemafetch_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.
-
security - not tested
A
license - permissive license
-
quality - not tested

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