MCP サーバーを作って、ローカル LLM 環境から MCP サーバーを呼び出してみる。
この長大なシステムを構築すると、以下の流れで 1+1 の結果を知ることができる。
MCP サーバーとは
MCP(Model Context Protocol) は LLM とツールをつなぐプロトコルである。
MCP サーバーは LLM の手足になる。
今回は整数と整数の足し算を行って返事する MCP サーバーを作成する。
Cline とは
Cline とは AI エージェントである。VSCode 向けの拡張機能として提供されており、Ollama と簡単に連携できる。
ローカル LLM 環境を構築する
LLM 環境がない場合、以下の記事でローカル LLM 環境を構築することができる。
Ollama に Gemma 3 をインストールする
今回は LLM にgemma3:27b
を使うことにする。
docker-compose.yml
のあるディレクトリ上で、以下のコマンドを実行する。
$ docker exec -it ollama ollama run gemma3:27b
# 終わったら以下を入力してプロンプトを抜ける
>>> /bye
大容量のダウンロードになるので注意する。(17GB らしい)
VSCode に Cline をインストールする
VSCode の拡張機能のペインから Cline を検索し、インストールする。
MCP サーバーを作成する
Python で MCP サーバーを作成する。
.
└── server.py
FastMCP というパッケージを使うと簡単に MCP サーバーを作成できる。
Python の仮想環境を作成し、FastMCP をインストールする。
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install fastmcp
server.py
に MCP サーバーとしてのコードを書く。
from typing import Annotated
from fastmcp import FastMCP
from pydantic import Field
mcp = FastMCP("Example MCP Server")
@mcp.tool
def sum(
a: Annotated[int, Field(description="整数")],
b: Annotated[int, Field(description="整数")],
) -> int:
return a + b
if __name__ == "__main__":
mcp.run(transport="http", host="0.0.0.0", port=8000, path="/mcp")
コードを書き終えたら以下のコマンドを実行して、サーバーを起動する。
$ python server.py
MCP サーバーを登録する
Cline の拡張機能から MCP サーバーを登録する。
以下のように VSCode の Cline のペインを選択し、Settings
を選択する。
以下のように API Configuration
で設定を行う。
API Provider
にOllama
、Model
に Gemma 3 を指定し、Done
のボタンを押下する。
もし日本語が好きなら、以下のようにGeneral Settings
にあるPreferred Language
からJapanese - 日本語
を設定することができる。
ただし設定しても無視されることがある。
以下のように MCP Servers
を選択し、Installed
タブを選択する。
以下のようにConfigure MCP Servers
を選択し、JSON を記述する。
{
"mcpServers": {
"example_mcp_server": {
"url": "http://127.0.0.1:8000/mcp",
"type": "streamableHttp"
}
}
}
LLM に 1+1 を計算させる
準備が整ったので、Cline の対話画面から以下のように指示を出す。
以下のように LLM の返答を確認し、問題なさそうであればApprove
を選択する。
結果を確認する。
なんと 1+1 は 2 という結果を得ることができた。
学び
大切なのは 1+1 の結果ではなく、MCP サーバーを用意して LLM に好きなものを生やせるということである。
1+1 を計算する処理を書き換えれば対話でデータベースを更新するとか、バグを報告するとか、モーターを動かすとか、何でもできるのだ。
既にすごい人たちによって色んな MCP サーバーが開発されているから、それらを利用することもできる。
メモ
cline_mcp_settings.json
の書き方は情報が少ないように感じた。
Cline 公式のドキュメントから 今回使った MCP サーバーへの転送プロトコルである Streamable HTTP に関して説明を見つけることができなかった。
MCP サーバーの設定については以下のページで説明されているが、載っているのは標準入出力を使ってローカルで転送する STDIO と HTTP でネットワーク越しに転送できるが古い方式の SSE だけである。
Configuring MCP Servers - Cline
しかし以下の Issue によると、Cline は Streamable HTTP に対応しているようである。
Cline does not work with StreamableHttpTransport based MCP servers · Issue #3315 · cline/cline