chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

Claude desktop (LLM Client)からMaqueen用MCP Serverを呼び出す

背景:MCP Serverの活用を理解するため、身近にあるMaqueenをMCP Serverを介してLLMから制御できるようにしてみる
アプローチ:いろんなLLMがあるが、ClaudeからMCP Serverに接続する
結論:コードの大半をLLMに書いてもらったが、なんとかClaude desktop(LLM Client)からMaqueen用のMCP Serverを呼び出すまでは動いた
詳細:

アーキテクチャは以下(かなりいびつかも)

MCP Clientについて

PC側ではMCP Clientを動かしているが、Node.jsが入っていないので、WSL上でPython版Proxyで代用した
ソースは以下:
Maqueen/src/mcp_server/proxy.py at main · foobarbazfred/Maqueen · GitHub

MCP Serverについて

RaspberryPi上でコンテナを使ってPython3.12.11を導入して、その中でMCP Serverを走らせた。MCP ServerからMQTT MessageをPublishするとMaqueenのコントローラにメッセージが届けられる予定。(そこまでは未実施)
コンテナに入ってからコマンドを実行(設定ファイルを使って宣言的に環境構築すべきで、コンテナに入ってあれこれコマンドを打って構築するのは、Dockerのポリシーに反するとは思う。。が試行錯誤中なので)

apt-get update ; apt-get --yes install curl
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.local/bin/env
uv init mcp-server ; cd mcp-server ; 
uv add "mcp[cli]" ; uv add fastapi ; uv add paho-mqtt
cat > server.py
uv run server.py

ソースは以下:
Maqueen/src/mcp_server/server.py at main · foobarbazfred/Maqueen · GitHub

file: claude_desktop_config.json を使って、Claude desktopにProxyプログラムを登録する。

{
  "mcpServers": {
    "maqueen": {
      "command": "wsl",
      "args": [
        "~/tech/MCP/maqueen/server/proxy/proxy.py",
        "http://192.168.10.100:1885/messages/"
       ]
    }
  }
}

ClaudeのWindowsアプリから制御している画面

LLMに大半コードを書いてもらい、デバッグもやってもらった。一日もかからず、ClaudeからMCP Serverの呼び出しまで枠組みのレベルだが作ることができた。自分はほとんど何もしていない。だからコードを作ったものの、どういう仕組みで動いているのか全く理解できていない。とくにasyncが入っているのでまたやっかいだ。LLMに質問したらまぁ詳しく説明はしてくれるのだけど。。やっぱり地に足ついていない感じが強い。いままでいろんなPythonプログラムを書いてきたけど、これほど分かってないコードを書いたのは初めてだ(書いたというより、LLMが提示するコードをCopy&Pasteして貼り付けた操作だけの一日だった)

LLMに聞くと教えてくれる。考える必要がない。今までだったら昔のコードを探したり、ググってサンプルコードを手に入れてそこから修正を書けるのだけど、LLMだと最初から適用可能なコードを提示してくる。。ああぁぁ・・この楽さ加減から抜け出せない。。

■追記
ClaudeのLLMは無料だと利用制限がかかる。Claudeに相談しながらコードを作っていたら、本日の上限に到達してしまった。有料サービスはProだと月$20で、日本円にすると、2,950 JPY になるそうだ。これはちょっと高い。Google Geminiの無料枠+αか、AWSのBedrockの従量制の方がましではないか。。。
最低限、Claude desktopの対話でMCP Server内の関数が呼び出される所までは確認できたので、次はLLMのAPIと組み合わせると、MCP Serverがどう動かせるのかを確認したい。