3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FastMCP 2.0 を使って OpenAPI ドキュメントから簡単に MCP サーバーを作成する

Posted at

はじめに

適当なサービスの Web API を AI エージェントから叩けるようにするため、そのサービスに対応した MCP サーバーを作成したいと考えることもあると思います。
しかし、使いたいエンドポイントの数が多い場合、MCP サーバーを自作するのは少々手間がかかります。
もし、そのサービスが OpenAPI ドキュメントを公開しているのであれば、FastMCP を利用することでその手間を大幅に削減できます。

FastMCP とは

FastMCP は、Python で MCP アプリケーションを構築するためのフレームワークです。
これを用いることで、素早く MCP サーバーの作成を行うことができます。

現在、FastMCP というときには、公式の Python SDK に統合されたものと、それとは別に分岐した FastMCP 2.0 があります。

この記事では、FastMCP 2.0 の方を使います。

OpenAPI ドキュメントから MCP サーバーを建てる

さっそく、OpenAPI ドキュメントから MCP サーバーを作成する方法について説明していきます。

まずは、FastMCP 2.0 のインストールから始めます。

FastMCP のインストール

以下のドキュメントに従って、インストールを進めていきます。

ここではパッケージマネージャとして uv を利用することにします。
プロジェクトの依存関係に fastmcp を追加します。

uv add fastmcp

インストールができているかどうかを、下記コマンドを実行して確認します。
FastMCP versionMCP version といった記述が確認できれば、問題ありません。

uv run fastmcp version

これで準備は整いました。
次は MCP サーバーを作成します。

MCP サーバーの作成

AI エージェントに叩かせたい Web API の OpenAPI ドキュメントを用意します。
大抵の場合は /openapi.json となっていると思います。
とりあえず、この記事では BODIK の Web API を使って説明していきます。

とはいえ、FastMCP の機能を使うだけなので、特に説明はしません。
以下のようなコードを書けば MCP サーバーが完成します。

main.py
import httpx
from fastmcp import FastMCP

api_base_url = "https://wapi.bodik.jp"
openapi_spec_url = "https://wapi.bodik.jp/openapi.json"

client = httpx.AsyncClient(base_url=api_base_url)
openapi_spec = httpx.get(openapi_spec_url).json()

mcp = FastMCP.from_openapi(
  openapi_spec=openapi_spec,
  client=client,
  name="BODIK API Server",
)

if __name__ == "__main__":
  mcp.run()

あとは、以下のように実行すれば MCP サーバーが立ち上がります。

uv run main.py

うまく動作しなかった場合、環境変数に

  • FASTMCP_EXPERIMENTAL_ENABLE_NEW_OPENAPI_PARSER=true

を追加すると、改善する可能性があります。

確認

実際に正しく動いているかどうかを AI エージェントを用いて確認してみます。
ここでは、MCP サーバーの登録の方法は省略します。

image.png

このように、MCP サーバーを使って Web API が呼び出されていることが確認できました。

おわりに

とても簡単に OpenAPI ドキュメントから MCP サーバーを建てることができました。
しかし、REST API を単純に MCP へ変換しただけでは、AI エージェントにとって真に使いやすいツールにはならない可能性があります。

REST API は、リソースを中心に設計されていますが、AI エージェントが利用するツールは、多くの場合、目的の達成に直結する機能が求められると思います。
そのため、単純な変換だけでは、AI エージェントはどのエンドポイントをどの順番で呼び出すべきかという推論に多くのコストを割くことになり、結果としてタスクの実行効率が落ちてしまうことも考えられます。

この記事の内容を実運用する前に、これらのことについて詳しく触れている、以下の記事を一度読んでみることをおすすめします。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?