以前にe-Stat APIのMCPサーバを作りましたが、実用にするにはまだ工夫が必要だと感じていました。Claude Codeの「スキル」という仕組みはそれを解決する有力な手段だと感じたので、実際に作ってみました。
MCPサーバで感じた課題
- 適切な統計表にたどり着くのが難しい
- APIから返ってくる情報が多すぎてコンテキストを浪費する
- ドメイン知識の不足
MCPサーバはAPIの使い方をツール定義という形でAIに伝えます。各ツールにはパラメータの名前や型を定義できて、短い説明文を加えることもできます。しかし、e-Stat APIを検索の手段として使う場合、それだけでは伝えきれないことがありました。
「人口」、「経済」のような単語は多数の統計表の名前に含まれているので、そのような短いキーワード検索ではヒット数が膨大になってしまいがちです。そうなるとAIは検索語を追加して絞り込もうとしますが、単純にAND検索すると今度は何もヒットしなくなります。検索語の選択がけっこうシビアなのです。そんなAPI呼び出しを繰り返しているうちにコンテキストがいっぱいになってしまいます。
また、APIのパラメータに「調査年月」、「公開年月」、「更新年月」という似たような名前のものがありますが、これらの違いをMCPサーバのツールの中で説明するのは困難です。
すなわち、ツールの使い方を与える他にドメイン知識をAIと共有する手段が必要だと思っていました。Claude Codeのスキルはこのような用途にうってつけだと感じました。
Claude Codeのスキルとは
Claude Codeの「スキル」は、Markdownファイル(SKILL.md)にAIへの指示を自由に書ける仕組みです。Anthropicが2025年10月に提唱したもので、特定のタスクに対する手順やノウハウをAIに教えることができます。
MCPサーバとの大きな違いは、指示の自由度です。MCPサーバではツールのコメント文が主な伝達手段でしたが、スキルではMarkdownで構造的な文章を書けます。手順を順番に説明したり、判断基準を示したり、注意事項を書き連ねたりすることができます。これによって単なるツールの使い方に留まらない背景知識をAIに伝えることができます。
スキルの構成
今回作ったスキルはestat-navigationという名前で、以下のような構成になっています。
estat-navigation/
├── SKILL.md
├── scripts/
│ └── estat_client.py
└── references/
├── statsfield.csv
└── statscode.csv
SKILL.mdがAIへの指示を書いたファイルで、scripts/にはe-Stat APIを呼び出すPythonスクリプトを、references/には統計分野コードと府省コードの一覧を置いています。
スクリプトの言語
以前作ったMCPサーバはKotlinで開発したのですが、スキルから呼び出すスクリプトに適した言語をClaudeに聞いたらPythonがよいとのことだったので、今回はPythonに直しました。KotlinのMCPサーバだとローカルで動かすにはJVMが必要でしたので導入の敷居が高く、他のメジャーなMCPサーバでもnode.jsが少なくとも必要であることが多いのですが、これはPythonのみで動くので使いやすくなったと思います。
参照ファイル
e-StatのAPIは統計分野コード(大分類2桁、小分類4桁)や府省コード(5桁)を使った検索ができますが、これらのコード一覧がどこにあるのか分かりにくいので検索の用途にはほぼ使われていないと思います。そこで、あらかじめ参照ファイルとして用意しておきました。それぞれの取得元は次のページです。
用意してみたはいいものの、AIも全くこれを使ってくれません(涙)。
5つのフェーズで段階的に進める
MCPサーバのとき、統計表を効率よく絞り込むために大枠の統計調査を先に検索するツールを用意したのですが、AIはこれを全く使わずに統計表のキーワード検索から始めてしまうという課題がありました。そこで、スキルでは5つのフェーズを明確に定義しました。
- 統計調査の特定 — キーワードで統計調査を検索し、ユーザーに選んでもらう
- 統計表の特定 — 選ばれた統計調査の中から統計表を絞り込む
- メタ情報の確認 — 統計表が持つ軸(男女別、年齢階級、地域など)を確認する
- データ取得 — 必要な軸を指定してデータを取得する
- 結果の提示 — 出典を明記してユーザーに提示する
3、4、5はMCPサーバのときもこの順番できちんと動いていましたが、1、2のついでにフェーズとして定義しました。このような手順の説明を与えられるのはスキルのよいところだと思います。
MCPサーバとスキルの使い分け
MCPサーバとスキルは排他的な選択肢ではなく、それぞれ得意な場面が異なります。
MCPサーバは、APIの呼び出し自体を標準化された形でAIに提供することができます。GitHubやSlackのようなサービスであればAIもその内容をよく理解しているので、APIを呼び出す方法を与えるだけで十分に機能します。このようなケースではMCPサーバを活用できます。
一方でe-Stat APIのように深いドメイン知識が必要となるAPIの場合は、判断の指針をAIに伝える手段が必要になります。スキルはまさにその目的に適しています。今回のスキルでは、Pythonスクリプトを通じてAPIを呼び出す仕組みにしていますが、この部分をMCPサーバに任せる実装もあり得ると思います。ただ、ほとんどのAPIは軽量なスクリプトから呼び出せるはずなので、MCPサーバを立てるよりもスキルの一部にしてしまう方が手軽で良いのではないかと思います。
APIの橋渡しに留まらないスキル
今回のスキルはe-Stat APIの仕様を教えるだけでなく、その使用方法までAIに指示するものです。実はこれはある程度e-Statを使ったことがある人を利用者として想定した、実験的なものになっています。もし一般の利用者が統計を検索するとしたら、ステップごとにいちいち「どの統計調査がよいですか?」などと聞いてきては使い勝手が悪いと感じるでしょう。まだ色々なスキルの書き方がありそうです。