Skip to main content
Glama

skilljit

Claude向けのジャストインタイムスキル&MCPツールルーティング — 数千のスキルを、トークン1個分のコストでインストール。タスクが実際に必要になるまで、何もコンテキストに読み込まれません。

ツールリストが決して変わらない理由

オンデマンドでツールを追加する明白な方法は、MCPのnotifications/tools/list_changed通知です。これはClaude Desktopでは壊れています — anthropics/claude-code#50339には、336以上のバージョンで無視されていることが記録されています(空のクライアント機能、決して発火しないSDKハンドラ、凍結されたツールリスト参照)。Anthropicはこの問題を対応予定なしとしてクローズしました。この問題自身が推奨する回避策は、*「起動時にすべてのツールを宣言し、モード/アクションパラメータで内部的にディスパッチする」*ことです。

それがskilljitのやることです。skilljitのMCPツールリストは固定され、決して変わりません — 常に少数の小さなツール群です。スキルと上流のMCPツールは、ツールリストを再登録するのではなく、それらのツールを通じて発見・ロードされます。これが、skilljitがClaude Desktop、Claude Code、Codex、Cursorで動作する一方で、list_changedベースのプロキシが少なくともそのうちの1つで静かに劣化する理由です。

Related MCP server: MCPNexus

問題

ClaudeのAgent Skillsはプログレッシブディスクロージャーを使用します。各スキルのname + description(約100トークン)が毎ターンシステムプロンプトに置かれ、ボディはオンデマンドでのみロードされます。それは10スキルでは機能します。しかし規模が大きくなると崩壊します — エコシステムはすでにそこにあり、数千のリポジトリに数万のスキルがあります。200個インストールすると、毎ターン数万トークンのコストが永遠にかかります。だから誰もやりません — 誰もが10個インストールし、残りは到達不能です。

MCPにも同じ問題があり、さらに悪いです:接続された各サーバーの完全なツールスキーマが起動時にロードされ、ユーザーが何も入力する前に一般的に20〜50kトークンになります。

skilljitなし

skilljitあり

到達可能なスキル

約10

数万

ターンごとのスキルオーバーヘッド

1k〜20kトークン、永遠に増加

ほぼ一定

ターンごとのMCPツールオーバーヘッド

20k〜50kトークン

ほぼ一定

インストール

npx -y skilljit sync

それが主要なパスです — MCPエコシステムはnpxファーストであり、Claude Code / Desktopの設定はすでにこの形を期待しています。

薄いPythonコンパニオンも公開されています。claude-agent-sdkユーザー向けで、MCPを経由せずに同じカタログを直接クエリしたい場合に使えます:

pip install skilljit

そのパッケージが何をするか、何をしないかについてはpython/README.mdを参照してください — CLIをnpx -y skilljitに転送し、Python用の読み取り専用Catalogを追加します。

Nodeバージョンサポート

skilljit、@skilljit/mcp、@skilljit/proxyは**Node 18+**を必要とします — その下限は直接@modelcontextprotocol/sdkから来ています。MCPサーバーとプロキシレイヤーが依存し、それ自体が18+を要求します。MCPサポートを落とさない限り、これを回避する方法はありません。

@skilljit/core(カタログ/検索ライブラリ、MCP依存なし)は**Node 16+**をサポートし、Catalog/ingestGithubRepo APIを直接使用する人向けです。Node 18+では、これはゼロコンパイルインストールです(better-sqlite3はプリビルドバイナリを同梱)。Node 16/17では、better-sqlite3はそのABI用のプリビルドバイナリがどのプラットフォームにもないため、npmはnode-gypを介してソースからコンパイルするフォールバックを行います — これにはC++ツールチェーンと、(3.12より前の)distutilsモジュールが利用可能なPythonが必要です。これはネイティブNodeモジュールの標準的な要件であり、skilljit固有のステップではありませんが、Node 16/17での@skilljit/coreのインストールが18+のように確実にスムーズであるとは限らないことを意味します。

クイックスタート

# 1. Build the local catalog from GitHub sources (SQLite, ~/.skilljit/catalog.db)
skilljit sync

# 2. Search it — no network call, no context cost
skilljit search "postgres migration"

# 3. Point your MCP client at the server
skilljit serve

MCPクライアント設定(例:claude_desktop_config.json)に追加します:

{
  "mcpServers": {
    "skilljit": {
      "command": "npx",
      "args": ["-y", "skilljit", "serve"]
    }
  }
}

他のコマンド:skilljit stats(カタログサイズ + ライブ節約量の読み方)、skilljit init <configPath>(既存のMCPサーバーをskilljit経由でルーティングするプレビュー — 元のファイルを決して変更しません)、skilljit adopt <configPath>(適用)、skilljit doctor [configPath](上流がまだ機能するか検証)、skilljit restore <configPath>(adoptを元に戻す)。

syncに独自のスキルを追加する

デフォルトでは、syncは厳選された少数の公開リポジトリからのみ取得します。独自のものを追加するには:

# Another public (or your-token-authenticated private) GitHub repo:
skilljit sync --repo your-org/internal-skills --token "$SKILLJIT_GITHUB_TOKEN"

# Any git remote at all — self-hosted, GitLab, Bitbucket, or a private repo
# reached over SSH — using whatever git credentials are already set up on
# this machine. No GitHub API token needed for this path.
skilljit sync --git git@git.internal.example.com:team/skills.git

両方のフラグは繰り返し可能です。--gitソースは、GitHub APIではなくベアミラークローンとgit worktreeを介して取り込まれます:最初のsyncはフルクローンのコストを支払い、それ以降のsyncは安価なgit fetch + worktreeチェックアウトです — レート制限なし、トークン不要、git自体が到達できるものなら何でも動作します。

6つのツール

skilljitは固定されたサーフェスを公開します — 実行時に増えたり減ったりすることはありません。

ツール

戻り値

skill_find(query, limit=8)

安価な候補:id、ソース、1行の説明、インストール数、監査ステータス。

skill_load(name)

1つのスキルの完全なSKILL.mdボディ(idで指定)と、バンドルされたファイルパスのリスト(内容は含まない)。スキルの内容がコンテキストに入る主要なポイント。

skill_read_file(name, path)

skill_loadがリストしたパスによる、バンドルされた参照ドキュメントまたはヘルパースクリプトの1つの内容。

tool_find(query, limit=8)

接続されたすべてのサーバーにわたる、一致する上流MCPツールの完全なJSON Schema。

tool_call(server, tool, args)

一致した上流サーバーとツールへの汎用ディスパッチャ。

skilljit_stats()

このセッションで節約されたトークン、およびこのカタログをこれまでに使用したすべてのskilljitセッション/タブにわたる累積 — 下記参照。

skill_find → skill_load → skill_read_fileは、プログレッシブディスクロージャーをプルとして再構築したものです。常にロードされるコストはカタログサイズに応じてスケールしなくなり、スキルにバンドルされた参照ドキュメント/スクリプトは、スキル自体がロードされた後でも、パスで指定されるまでコンテキストから外れたままになります。

tool_findとtool_callは、skilljit adopt(下記参照)を介して上流MCPサーバーを設定した場合にのみ表示されます — スキルのみで実行すると、サーフェスは6ツールではなく4ツールです。これにより、スキル半分がプロキシ半分から独立して出荷・テスト可能になります。

複数タブ / 並列セッション

異なるタスクのために複数のClaude Codeタブを同時に実行することは、「すべてのタブがインストールされたすべてのスキルのコストを支払う」というコストが倍増するまさにその場面です — N個のタブが開いているということは、そのターンごとのオーバーヘッドがN回同時に支払われていることを意味します。skilljitはすでにそのタブごとのコストを、カタログサイズに関係なく固定された少数のツールにまで削減しますが、skilljit_stats()はさらに進みます:すべてのセッションのベースライン/実際の数値は、共有catalog.db(すべてのタブのskilljit serveプロセスがすでに指している同じファイル)にも書き込まれるため、報告される合計は、あなたが尋ねているタブだけでなく、これまで開いていたすべてのタブにわたる累積です。タブを失ってもその数値は失われません — それはすでに永続的に書き込まれており、そのタブのメモリにのみ保持されているわけではありません。

これは、失われたタブの会話自体を回復しません — それはClaude Codeのセッション機能(claude --resume / --continue)であり、skilljitとは無関係です。具体的に修正するのはトークン会計の盲点です:「skilljitが今日、開いていたすべてのものにわたって実際にどれだけ節約したか」が、任意の1つのタブが死んでも生き残ります。

MCPプロキシ — 他のMCPサーバーのルーティング

skilljit serve --config <path>(以前にskilljit adoptを実行した設定パス)を渡すと、採用したサーバーに対してtool_find/tool_callが有効になります。ここでは安全性が最優先です。これはすでに依存している設定に触れるためです:

  • skilljit init <configPath> は元のファイルを決して変更しません — 提案された設定を書き出し、diffを表示します。

  • skilljit adopt <configPath> はデフォルトでドライランです。実際に変更を書き込むには--yesを渡します。元のファイルはバックアップされます。

  • --keep server1,server2 はそれらのサーバーをそのままにします — 静的ツールリストに完全に表示され、tool_findの往復はありません。毎ターン呼び出すホットパスツールに便利です。(このバージョンでは、Keepはサーバー単位であり、ツール単位ではありません。)

  • skilljit doctor [configPath] は、採用されたすべての上流がまだ起動し、ハンドシェイクし、ツールをリストすることを検証します。

  • skilljit restore <configPath> は元の設定を戻す1つのコマンドです。

  • 1つの上流MCPサーバーが利用できなくても、他には影響しません:tool_callはそのサーバーに対してクリーンなエラーを返し、他のすべては機能し続けます。

セキュリティ

スキルは、機能的には、エージェントが従う見知らぬ人からの指示です — Anthropicは、悪意のあるスキルがデータを外部に持ち出したり、ツールを悪用したりする可能性があると明示的に警告しています。skilljitはこれを後付けではなく、設計対象の機能として扱います:

  • すべてのskill_find結果は、説明とともにスキルの監査ステータスを表示します。

  • skill_loadは、スキルが監査に失敗した場合、またはまったく監査されていない場合に、返されたコンテンツ内で大声で警告します — 未知のソースからソフトウェアをインストールするのと同じ姿勢です。

ベンチマーク

bench/には、ラベル付きの41組の(タスク → 正しいスキル)ペアとrecall@kハーネスが同梱されており、「検索が機能する」というのは雰囲気ではなく測定された主張です。現在の数値は、node bench/run.mjsで再現できます:

skilljit bench — 41 queries over 41 skills

recall@1: 37/41  (90.2%)
recall@3: 38/41  (92.7%)
recall@8: 41/41  (100.0%)

検索はSQLite FTS5 + BM25です — v1では埋め込みはありません。これは意図的なYAGNI判断です:FTS5はNode(better-sqlite3)とPython(標準ライブラリ)の両方の実装で同一に同梱され、モデルのダウンロードや追加のランタイム依存関係はありません。残存する再現率リスク(スキルの説明は意味的です — 「ユーザーがPDFに言及したときに使用…」)は構造的に軽減されます:skill_findは、ワンショットのトップ1結果にコミットするのではなく、Claudeが検討して再クエリできる複数の候補を返します。埋め込みはオプトインオプションのままで、このベンチマークがFTS5の再現率が本当に不十分であることを示した場合にのみ追加されます — 上記の3つのミス(すべてニアミスで、正しいスキルがトップ3のすぐ外)がその決定の具体的な候補です。

公開

v*タグ(例:v0.1.2)をプッシュするとCIが実行され、その後すべてのパッケージがTrusted Publishing(OIDC)を介してnpmとPyPIに公開されます — このリポジトリには長期有効なNPM_TOKEN/PYPI_TOKENシークレットはありません。.github/workflows/release.ymlを参照してください。

それが機能する前に必要な一度きりのセットアップがあります(手動で行われ、自動化できません):

  • npmjs.comで、@skilljit/core、@skilljit/proxy、@skilljit/mcp、skilljitのそれぞれについて、このリポジトリ、release.ymlワークフローファイル、npm環境を指すTrusted Publisherを登録します。

  • pypi.orgで、skilljitプロジェクトのTrusted Publisherを登録し、このリポジトリ、release.ymlワークフローファイル、pypi環境を指すようにします。

アーキテクチャ

skilljit/
  packages/core/     catalog store, FTS5 index, ranking, token accounting
  packages/proxy/    upstream MCP server management, config adopt/restore, tool_find/tool_call routing
  packages/mcp/      the MCP stdio server (the fixed tool surface, see "The six tools" above)
  packages/cli/      skilljit sync | search | serve | stats | init | adopt | restore | doctor
  python/            pip package — CLI shim + read-only query API for Agent SDK users
  bench/             labeled task→skill eval set + recall@k harness

TypeScriptが単一の実装です。PyPIパッケージは、ランキングロジックの2番目の実装ではなく、その周りの薄くて正直なラッパーです。

ライセンス

MIT

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP proxy that reduces context usage through semantic tool routing, enabling on-demand discovery and routing of relevant tools.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A discovery and routing layer for MCP servers that loads tool definitions on demand, reducing token usage by keeping servers out of the context window until needed.
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables agents to search a lightweight catalog, inspect permissions, lazily start trusted MCP servers, and call child tools without keeping all schemas in context. It also loads approved skills on demand and routes third-party additions through a human approval queue.
    1
    1
    MIT