先月、私は 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 は $schema、additionalProperties、パラメータの説明、タイトル、デフォルトを取り除き、LLM が実際に必要とするものだけを残します。レベル 2 では、情報の損失ゼロでスキーマトークンを 61% 削減します。
Web ダッシュボードで、削減効果がリアルタイムに確認できます:
ステートガード: 古い編集でもう二度と上書きしない
長時間のコーディングセッションでは、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_file や list_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_file→edit_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
このツールコール用のプラグインシステムで、あなたなら何を作りますか?




