🤷‍♂️

API仕様書を読み取れるMCPサーバーを自作したら開発が爆速になった

に公開

タイトルでもうオチてる感じがしますが、API仕様書を読み込むMCPサーバーを自作したところ、開発が爆速になったので紹介します。普段Androidのアプリ開発をしている人間です。

MCPとは?

https://modelcontextprotocol.io/introduction
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を使用しました。
https://modelcontextprotocol.io/docs/concepts/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向けにテキストで全てまとまっています。
https://modelcontextprotocol.io/llms-full.txt

これをAIに読み込ませて「作って」と指示したら全部作ってくれます。
作り終わったら README.md もAIに生成してもらって全て終了です。おしまい。

余談:MCPにする意味

今回実装した機能は、Clineなどのカスタム指示に「 /path/proto に仕様があるので活用して」と一言書くだけでも、おそらく同じように機能します。そうなると「わざわざMCPにする意味あるのか?」と疑問が生じます。MCPにする利点は恐らく以下なんじゃないかと思います

  • カスタム指示の管理問題
    • カスタム指示に記述する場合、クライアント側がMCPサーバーの機能に相当するプロンプトを管理する必要がある
    • 複数のAIツールを使っていると、それぞれに同様の指示を記述する必要があり、プロンプト更新に手間が発生する
    • チームでの開発時には、これがメンバー数分発生し、さらに管理コストが増す
  • 回答精度の問題(追記)
    • 扱うツールやモデルにもよりますが、カスタム指示は無視されることが度々あり、この辺りの勝率がMCPのほうが体感高い気がします。
    • 「このMCPを使って確認しつつ、API実装して」と指示すればさらに確実になります
  • 柔軟性(追記)
    • MCPサーバーとして管理しておけば必要なファイルだけ公開したり、読み取られたくないものを確実に隠すことができます。不要なコンテキストを与えるとハルシネーションやタスクが迷宮入りする原因になるので、性能向上に繋がります。
    • カスタム指示でも頑張ればできなくもないですが、やはり精度や管理の問題などが発生します
NOT A HOTEL

Discussion