「MCP Spine v0.2.5」:MCPツール呼び出し用のフル・ミドルウェア・スタックを作った

Dev.to / 2026/4/26

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • 著者は、MCP Spine v0.2.5をClaude DesktopとMCPサーバーの間に挟むミドルウェア/プロキシとして説明しており、ツール呼び出しは単一の構成を通じてルーティングされます。
  • 主な改善点はスキーマのミニファイで、不要なJSON Schema要素を削ってツール呼び出し時のスキーマ・トークンを61%削減しつつ、情報損失を防ぐことを目指しています。
  • SpineはState Guardとして、プロジェクトファイルをSHA-256でハッシュ化し、ツール応答にバージョン・ピンを埋め込むことで、LLMのキャッシュが古くなった場合に再読込を促せるようにします。
  • 今回の更新ではプロンプト・インジェクション検知を導入し、ツール応答内の複数カテゴリの悪意ある指示様テキストをスキャンしてセキュリティイベントとして記録し、必要に応じてSlack/DiscordへWebhook通知できます。
  • さらに記事では、プラグイン・システムを「コンプライアンス層」として位置づけており、ツール呼び出しや応答に対するポリシー適用を拡張可能にする意図が示されています。

先月、私は MCP Spine v0.1 をリリースしました。これは、Claude Desktop と MCP サーバーの間に挟まる基本的なプロキシです。スキーマの minification とセキュリティの基礎を提供します。

それ以降、Spine は完全なミドルウェアスタックへと成長しました。以下は v0.2.5 に含まれるすべてと、それぞれが存在する理由です。

出発点

57 個のツール。5 台のサーバー。Spine を指す 1 つのエントリを含んだ Claude Desktop の設定ファイル。すべての通信はプロキシを経由します。

pip install mcp-spine
mcp-spine init

セットアップウィザードは、インストール済みのサーバー(npx、node、Python)を検出し、どの機能を使いたいかを尋ね、その内容に合わせた設定を作成します。

スキーマ minification: トークン数が 61% 削減

すべてのツール呼び出しは、LLM がツールのスキーマを読み取ることから始まります。ツールが 57 個あると、会話が始まる前にすでに何千ものトークンが消費されます。

Spine の minifier は $schemaadditionalProperties、パラメータの説明、タイトル、デフォルトを取り除き、LLM が実際に必要とするものだけを残します。レベル 2 では、情報の損失ゼロでスキーマトークンを 61% 削減します。

Web ダッシュボードで、削減効果がリアルタイムに確認できます:

Dashboard

ステートガード: 古い編集でもう二度と上書きしない

長時間のコーディングセッションでは、Claude が会話の途中にあるファイル内容を記憶してしまいます。その後、その「古いバージョン」を編集する形で、あなたの現在のコードを静かに上書きしてしまいます。

State Guard はプロジェクトファイルを監視し、SHA-256 のハッシュを計算し、すべてのツール応答にコンパクトなバージョン固定(ピン)を注入します。Claude のキャッシュされたバージョンが一致しない場合、再読み取りが必要だと判断できます。

プロンプトインジェクション検出

これは私が驚いた点です。ツール応答には、LLM への命令に見えるテキストが含まれている可能性があります。たとえば「以前の指示を無視して」「[SYSTEM]」、あるいはエンコードされたペイロードなどです。

Spine は、モデルに渡る前に、すべてのツール応答を 8 つの種類のインジェクションパターンについてスキャンするようになりました。検出はセキュリティイベントとして記録され、Webhook による Slack や Discord へのアラートをトリガーできます。

# spine/injection.py が検出するもの:
# - システムプロンプトの上書き
# - ロールインジェクション(「あなたは今…」)
# - 指示のハイジャック
# - ジェイルブレイクの試み(DAN、開発者モード)
# - データ流出の URL
# - Base64 エンコードされたペイロード

プラグインシステム: コンプライアンス層

これは私が最も楽しみにしている機能です。Spine のプラグインは Python ファイルで、ツール呼び出しパイプラインにフックします:

from spine.plugins import SpinePlugin

class SlackFilter(SpinePlugin):
    name = "slack-filter"
    deny_channels = ["hr-private", "exec-salary"]

    def on_tool_response(self, tool_name, arguments, response):
        if "slack" not in tool_name:
            return response
        # 許可されていないチャンネルからのメッセージをフィルタする
        content = response.get("content", [])
        filtered = [b for b in content
                    if not any(ch in b.get("text", "").lower()
                              for ch in self.deny_channels)]
        return {**response, "content": filtered}

これを plugins/ ディレクトリに投げて、設定で有効化するだけで完了です。LLM はこれらのチャンネルのメッセージを一切見ることはありません。

フックポイントは 4 つあります:on_tool_call(引数の変換や呼び出しのブロック)、on_tool_response(応答のフィルタ)、on_tool_list(ツールの非表示)、そしてライフサイクル用のフック。

Web ダッシュボード

依存関係なしのブラウザダッシュボードが localhost:8777 で利用できます:

mcp-spine web --db spine_audit.db

ツール呼び出し、セキュリティイベント、トークン予算の使用量、スキーマトークン削減、サーバー遅延、リクエストログ、クライアントセッションを表示します。3 秒ごとに自動リフレッシュします。

ツール応答キャッシュ

read_filelist_directory のような読み取り専用ツールは、会話の中で同じ引数で複数回呼ばれることがよくあります。Spine はこれらの応答をキャッシュするようになりました:

[tool_cache]
enabled = true
cacheable_tools = ["read_file", "read_query", "list_directory"]
ttl_seconds = 300

キャッシュヒットなら、下流のサーバー呼び出しを完全にスキップします。TTL の期限切れとともに LRU で追い出します。

v0.2.5 に含まれるその他すべて

返却形式: {"translated": "翻訳されたHTML"}

  • トークン予算: 日次の上限、サーバーごとの上限、警告/ブロック動作、永続的な追跡、spine_budget メタツール
  • ツールの別名付け: create_or_update_fileedit_github_file
  • コンフィグのホットリロード: 実行中にコンフィグを編集、変更は数秒で反映
  • Webhook通知: セキュリティイベントに対する Slack/Discord/JSON アラート
  • マルチユーザー監査: セッションタグ付きエントリ、mcp-spine audit --sessions
  • アナリティクスのエクスポート: 時間とイベントのフィルタリング付き CSV/JSON
  • ストリーミング可能なHTTP: MCP 2025-03-26 のトランスポート対応
  • インタラクティブなウィザード: mcp-spine init がセットアップを検出
  • レイテンシ監視: サーバーごとの追跡と劣化アラート

数字で見る

  • 20 のソースファイル
  • 190+ のテスト
  • CI は Windows + Linux、Python 3.11-3.13
  • Glama で AAA スコア
  • mcpservers.org で承認済み
  • MIT ライセンス

まず試す

pip install mcp-spine
mcp-spine init
mcp-spine doctor --config spine.toml
mcp-spine serve --config spine.toml
mcp-spine web --db spine_audit.db

GitHub: https://github.com/Donnyb369/mcp-spine

このツールコール用のプラグインシステムで、あなたなら何を作りますか?