API仕様書を読み取れるMCPサーバーを自作したら開発が爆速になった
タイトルでもうオチてる感じがしますが、API仕様書を読み込むMCPサーバーを自作したところ、開発が爆速になったので紹介します。普段Androidのアプリ開発をしている人間です。
MCPとは?
LLMに対してコンテキストを与えるためのプロトコルです。
今回はAPI仕様書を読み込むMCPを作るので、ざっくり言うとClineやClaude for Desktop、GitHub Copilot Agentなど、MCPに対応したツールがAPI仕様書に基づいてコードを書いてくれるようになります。
何が嬉しいのか?
例えば、以下のような質問・指示ができるようになります。
- 決済に関連するAPIを列挙し、Markdown記法でまとめて
- ドメインクラスを作りたいので、
User
をKotlinのdata classで出力して - Androidアプリの
NotificationRepository.kt
に書いてあるAPIが更新されたので、差分に対応して
特に最後の指示は強力です。ClineなどのAIエージェントを想定した指示ですが、もはや人間サイドは実装時にAPIの何が更新されたのか把握していなくても良いのです。「何か知らないけどバックエンドの実装が変わった」という事実さえ分かっていれば、あとはAIが勝手に全て実装してくれます。
仕組み・使い方
MCPサーバーにはいくつか種類がありますが、今回はresourcesを使用しました。
resourcesでは、こんな感じのJSONを列挙していきます。
{
uri: string; // Unique identifier for the resource
name: string; // Human-readable name
description?: string; // Optional description
mimeType?: string; // Optional MIME type
}
(後述しますが今回1行も自分でコードを書いておらず、この記事を書いてようやく仕様を理解したところです)
API仕様書の読み込み方には様々なアプローチがあり得ますが、弊社では gRPC + Protocol Buffers
を使っているため、.proto
ファイルをリソースとして読み込むMCPサーバーをローカルで立てるようにしました。
あとはクライアント側にMCPを使う設定を記述して終了です。以下はClineの例
{
"mcpServers": {
"some-resource-server": {
"command": "node",
"args": ["/Users/foo/bar-proto/mcp/build/index.js"],
"env": {}
}
}
}
実装
何も実装してません。大方針だけ決めて、あとはvibe codingで全てAIに書いてもらいました。
MCPに関する知識はLLM向けにテキストで全てまとまっています。
これをAIに読み込ませて「作って」と指示したら全部作ってくれます。
作り終わったら README.md
もAIに生成してもらって全て終了です。おしまい。
余談:MCPにする意味
今回実装した機能は、Clineなどのカスタム指示に「 /path/proto
に仕様があるので活用して」と一言書くだけでも、おそらく同じように機能します。そうなると「わざわざMCPにする意味あるのか?」と疑問が生じます。MCPにする利点は恐らく以下なんじゃないかと思います
- カスタム指示の管理問題
- カスタム指示に記述する場合、クライアント側がMCPサーバーの機能に相当するプロンプトを管理する必要がある
- 複数のAIツールを使っていると、それぞれに同様の指示を記述する必要があり、プロンプト更新に手間が発生する
- チームでの開発時には、これがメンバー数分発生し、さらに管理コストが増す
- 回答精度の問題(追記)
- 扱うツールやモデルにもよりますが、カスタム指示は無視されることが度々あり、この辺りの勝率がMCPのほうが体感高い気がします。
- 「このMCPを使って確認しつつ、API実装して」と指示すればさらに確実になります
- 柔軟性(追記)
- MCPサーバーとして管理しておけば必要なファイルだけ公開したり、読み取られたくないものを確実に隠すことができます。不要なコンテキストを与えるとハルシネーションやタスクが迷宮入りする原因になるので、性能向上に繋がります。
- カスタム指示でも頑張ればできなくもないですが、やはり精度や管理の問題などが発生します
Discussion