スキルの配布をzipからMCPサーバー経由に切り替えた

開発claude-code-tools

スキルの配布をzipからMCPサーバー経由に切り替えた

スキルをzipで渡すのは、渡した瞬間だけを見れば何の問題もない。 困るのは2回目からだ。

1行直すたびに「アップデートしたので再ダウンロードしてください」と全員に言って回ることになる。 言って回っても、入れ替えてもらえるとは限らない。

これがMCPサーバーで消えた。 MCPサーバーの使い所はずっと掴めないままだったが、「ファイルを配らなくて済む」という一点で見方が変わった。

zipで配ると、相手の手元のコピーが本体になる

受け取った側の手元にはSKILL.mdの実体が置かれる。 置かれた瞬間から、配った側が持っているものと受け取った側が持っているものは別々の物になる。

  • 直したことを知らせなければ、古いまま使われ続ける
  • 知らせたところで、入れ替えるかどうかは相手の作業になる
  • 誰がどの版を持っているのか、配った側からは見えない

「再ダウンロードしてください」という一文は、この3つをまとめて相手に押し付けている。 連絡が丁寧かどうかの話ではない。 配布の形そのものが、この押し付けを生んでいる。

本文を持つのはサーバーで、手元には残らない

MCPサーバーを挟むと、受け手のClaude Codeはサーバーに接続しているだけになる。 スキルの本文はサーバーが持っていて、呼ばれたときに返す。

配る側が本文を書き換えれば、次に呼ばれた時点でそれが使われる。 受け手は何もしない。 知らせる相手のリストも要らない。

ここまでの理解で合っているかを確かめるために、記事に載せるコマンドの構文だけは先に実機で叩いた。 図を3枚描いて、描画を見て、1箇所だけ表記を直して公開した。

書いたあとで実際に配ってみた

公開してから、自分でも動かしてみたくなった。 手持ちのスキルから粒度の小さいものを選んで配るつもりでいた。 あれこれ考えているうちに面倒になり、テスト専用のスキルを1本作ることにした。 やることは1つだけにした。呼ばれたら版番号と合言葉を返す。

配信用のWorkerを1本立てて、Claude Codeから接続した。 ✔ Connected が出た。 そのまま話しかける。

配信チェック v1 — サーバーから届いています
合言葉: たぬきがぽんぽこ

「配信チェックして」の一言で届いた。 受け手の手元にはSKILL.mdが1バイトも無い。

本文は取り寄せて保存できた

先に確かめたかったのはここだった。 サーバー側に置けば中身を守れるのではないかと思っていた。

受け手側に「本文を取り寄せて、実行しないでファイルに保存して」と指示してみた。 426バイトのファイルが手元にできた。

取り寄せた本文の中には、受け手のClaudeに宛てた指示が混ざっていた。 この文言をそのままユーザーに返せ、追加の作業をするな、ファイルを開くな、といった内容である。 それでも保存はできた。 取り寄せた中身は指示ではなくデータとして扱われ、こちらの指示のほうが優先されたからだ。

つまり配信をサーバー側に寄せても、中身の複製は止まらない。 記事にはそれが止められると読める書き方をしていたので、そこは訂正した。 守れるのは中身ではなく、版のほうである。

受け手が何もしないまま、版だけが入れ替わる

サーバー側の本文をv2に書き換えた。 旧版はアーカイブに残す設計にした。

受け手側は何も操作していない。 同じ言葉をもう一度かけた。

配信チェック v2 — サーバー側を書き換えました
合言葉: きつねがこんこん

zipであれば、ここに「再ダウンロードしてください」の一往復が挟まる。 それが無いまま新しいほうが返ってきた。

前の版を指名して呼べる

「前のバージョン(v1)で実行して」と頼んでみた。

配信チェック v1 — サーバーから届いています
合言葉: たぬきがぽんぽこ

旧版が返ってきた。 アーカイブに残す設計にしておくと、受け手側から版を指名できる。

配る側からの巻き戻しも試した。 ロールバックした直後は、新しい版と古い版が混ざって返ってきた。 少し置いてから確認し直すと、全部が旧版に揃っていた。 切り替えは即時ではなく、伝播に時間差がある。

途中で一度、案内ページの版表示がv1のまま変わらず、切り替えが効いていないと思った。 サーバーの応答を直接見たらv2を返していた。 ブラウザのキャッシュを見ていただけだった。

誰が何を呼んだかが残る

配信のログを開くと、受け手の名前と、呼ばれたスキルと、拒否した記録が並んでいた。 zipを配っていたときには、どこにも存在しなかった情報である。

渡し方を変えただけのつもりだったが、変わったのはそこだけではなかった。 配ったあとが見えるようになった。

学び

  • 「アップデートしたので再ダウンロードしてください」は、連絡の丁寧さの問題ではなく配布形式の問題だった
  • MCPサーバーの用途がずっと掴めなかったが、ファイルを配らなくて済むという一点で腑に落ちた
  • サーバー側に置いても中身の複製は止まらない。揃うのは版のほうだ
  • ロールバックは即時ではない。切り替えた直後の1回で判断しない
  • 版表示が変わらないときは、まずサーバーの応答を見る。画面はキャッシュを映していることがある