Portainer MCP をインストールして Claude desktop から触れるようにする

さて、だいぶエントリが空きました。最近は n8n と MCP サーバをいろいろ調べています。

表題の件です。脱Synology NAS の一環として Portainer をサーバ PC で動かしてそこで Docker を管理しています。
で、docker-compose.yaml とか docker コマンド打つの面倒くさくないですか?私はだんぜん面倒だと思っています。

すごく難しいとかではないですが、いちいち確認することが多くてあまり好きではありません。

そしたら、MCP サーバで Portainer いじれるのがあることにやっと最近気づいて入れてみたのでその記録です。

BirajMainali/portainer-ce-mcp-server をインストールします。公式の MCP サーバもあるのですが、自分の環境では portainer を https アクセスできるようにしていないためこちらをインストールします。
https://github.com/BirajMainali/poratiner-ce-mcp-server

Deno インストール

BirajMainali/portainer-ce-mcp-server は Deno が必要らしいのでまずはこれからインストールします。

# curlでインストール(snap版ではなく)
$ curl -fsSL https://deno.land/install.sh | sh

# パスの設定
$ echo 'export DENO_INSTALL="/home/mnishi/.deno"' >> ~/.bashrc
$ echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

# 確認
$ deno --version

portainer-ce-mcp-server インストール

好きなところに git clone してください。自分は /opt/portainer-ce-mcp にインストールしました。/opt にする場合はパーミッションを調整してください。~/ 以下なら不要です。

# リポジトリをクローン
$ git clone https://github.com/BirajMainali/poratiner-ce-mcp-server.git /opt/portainer-ce-mcp

# 依存関係のインストール
$ cd /opt/portainer-ce-mcp
$ deno install

Portainer の準備

portainer 側ではアクセストークンを準備する必要があります。
マイアカウントあたりから辿れるはずです。
作ったときしか、コピーできないので注意。

どうもアクセストークンは ptr_zSZ/アクセストークン= こんな感じで ptr_ ではじまり、= で終わるもののようです。まあそんな雰囲気の文字列だってことで。

その後で Environment ID というのを確認して、MCP から渡してやる必要があるようです。

192.168.1.234:9000 は自分の環境の portainer の IP とポートです。適宜入れ替えてください。

curl -H "X-API-Key: ptr_zSZ/アクセストークン=" \
  http://192.168.1.234:9000/api/endpoints

実行すると結構たくさん出力されるので、 |head とか |jq 、 |grep id\”: なんかをやってみつけてください。
自分の場合は 3 でした。 1 とか 2 の場合が多い? と Claude はいうが本当のところはわかりません。

MCP の設定

自分の場合は Claude desktop で動作確認しています。他の環境はわからないので、参考程度に。

~/.config/Claude/claude_desktop_config.json ファイルに portainer-mcp の設定を追記していきます。

{
  ・・・・
  "mcpServers": {
      ・・・・
    "portainer": {
      "command": "/home/自分のアカウント/.deno/bin/deno",
      "args": [
        "run",
        "--allow-env",
        "--allow-read",
        "--allow-net",
        "/opt/portainer-ce-mcp/src/main.ts"
      ],
      "env": {
        "PORTAINER_BASE_URL": "http://voyager.local:9000",
        "PORTAINER_API_KEY": "アクセストークン",
        "PORTAINER_ENV_ID": "3"
      }
    }
  }
}

mcpServers: セクションのいい感じのところに追加してください。

command: は実際の deno のパスを示します。snap でインストールしたら他の場所を指すでしょう。

env: の PORTAINER_BASE_URL は、portainer にアクセスするときの URL を指定します。ここでは mDNS 名で指定してますが、IP 直でも OK

PORTAINER_API_KEY: にさっき作成したアクセストークンを指定します。

PORTAINER_ENV_ID: も同様に確認した値をいれます。

これで Claude desktop を再起動すると、MCP 経由で portainer を操作できるようになっているはずです。

不調なら、Claude desktop の Filesystem ツールやシェルツールなどを使って Claude 自身に調べてもらいましょう

json の指定が間違えていなければ端末から起動できるはずで、こんなふうにします。

これでエラーがあれば、おそらく Deno (js モジュールの) の不足などの問題だろうからそれらを解決します。

$ PORTAINER_URL="http://voyager.local:9000" \ 
PORTAINER_API_KEY="アクセストークン" \ 
PORTAINER_ENV_ID="3" \ 
deno run --allow-env --allow-read --allow-net src/main.ts

エラーがなければ、無言で入力待ちの状態になる。

ここまですると、コンテナ一覧みたいとかいうといい感じに調べてチャットで見ることができます。

これで、簡単にインストールできるようになるかしばらく試してみよう。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です