1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini-cli 発表に触発されてcliとMCPサーバ関連

Last updated at Posted at 2025-06-30

Docker MCP Toolkit

https://docs.docker.com/ai/mcp-catalog-and-toolkit/toolkit/
これはコンテナ化されたMCPサーバを管理実行できるようにしたもので、Docker Desktopから利用可能になってます。Docker MCPカタログというレジストリでMCPサーバを管理していて検証済みで安全でっせというものが簡単に接続できちゃうというもの。
どんなものがあるかは以下から参照可能だが、Docker DesktopのExtensions→MCP Toolkitからでも参照可能
https://hub.docker.com/mcp

Extensionsから本体へ統合

この記事を書き始めると、以下のようなアナウンスが出てき始めたw

DEPRECATED! Use the integrated Docker MCP Toolkit in Docker Desktop 4.42 or later. Docker MCP Toolkit is a Docker Desktop Extension allowing to connect dockerized MCP servers to MCP clients

スクリーンショット 2025-06-30 13.07.29.png

なので、以降は統合版を前提にしようと思う。
Docker DesktopのExtensions→MCP ToolkitDocker DesktopのMCP Toolkitから参照可能となっている。

テストとして、Memory MCP Serverを利用してみる

スクリーンショット 2025-06-30 13.16.39.png

念の為、MCPサーバを選んだら、Docker Desktopを再起動をした方が良いように思います。(個人的な感想ですが、MCPクライアントとの接続が安定しているように思う)
また、MCP Toolkitだけ有効にしてもMCP サーバを一つでもONにしないと意味がないです。ちなみにExtensions時代はMCPクライアント接続時にエラーが出てました。

Claude Desktop

MCPサーバはMCPクライアントから利用することになるが、メジャーなクライアントと言えば本家Claude Desktopです。そして、前述Docker MCP Toolkitで管理されたサーバと接続できるクライアントとして、デフォルトでリストアップされている一つです。(下図参照)
マウスポチーで使えるようになるなんてすげ〜と妄想するわけです。

スクリーンショット 2025-06-30 13.20.32.png

Claude DesktopからDocker Desktop MCP Toolkitへ接続

Docker DesktopのMCP ToolkitのClientsにあるClaude DesktopのConnectボタンをクリックすると、(macの場合)~/Library/Application Support/Claude/claude_desktop_config.jsonがなければ生成され、あれば修正されるようです。Extensions時代はDocker Imageが必要で、alpine/socatを利用していました。Docker Desktopに統合された今ではプロセスとして動作しているようで、さらにmcp専用コマンドがdockerコマンドに組み込まれていました。

% ps ax | grep -i docker | grep -i mcp
16712   ??  S      0:00.09 /usr/local/bin/docker mcp gateway run

% docker mcp
Docker MCP Toolkit's CLI - Manage your MCP servers and clients.

Usage: docker mcp [OPTIONS]

Flags:
  -v, --version   Print version information and quit

Available Commands:
  catalog     Manage the catalog
  client      Manage MCP clients
  config      Manage the configuration
  gateway     Manage the MCP Server gateway
  policy      Manage secret policies
  secret      Manage secrets
  server      Manage servers
  tools       List/count/call MCP tools

Claude Desktopは、これらの設定を終了してから起動する。Extensions時代はなぜか接続がうまくいかず、何度か再起動を繰り返したが、アプリに統合され安定したようにも思う。

Memory MCP Serverを試す

MCPサーバを使う際に、仕様をみてもいまいち使い方がわからなかったりします。
その場合は素直にClaudeに教えを乞いましょう。Memory MCP Serverの使い方を教えて

回答 Memory MCP Serverは、Claude(AI)が会話中に情報を記憶・整理するためのナレッジグラフシステムです。エンティティ(実体)と関係性を管理することで、継続的な対話において文脈を保持できます。 基本概念 エンティティ(Entity): 人物、場所、概念、プロジェクトなど、記憶したい対象 観察(Observation): エンティティに関する具体的な情報や事実 関係(Relation): エンティティ間のつながりや関係性 主要な機能 1. エンティティの作成 新しいエンティティを作成して観察を追加します。例えば:

人物: 「田中さん」(タイプ: person)
観察: 「エンジニアとして働いている」「東京在住」

  1. 観察の追加
    既存のエンティティに新しい情報を追加できます。
  2. 関係の作成
    エンティティ間の関係を定義します:

「田中さん」が「ABC会社」で「働いている」
「プロジェクトX」を「田中さん」が「担当している」

  1. 検索・参照

特定のエンティティを名前で検索
キーワードでナレッジグラフ全体を検索
グラフ全体の構造を確認

  1. 情報の更新・削除

不要な観察の削除
エンティティの削除
関係の削除

使用場面

プロジェクト管理: タスク、担当者、進捗の記録
学習ノート: 概念、定義、関連性の整理
人間関係: 知人の情報、関係性の記録
研究・調査: 情報の体系的な整理と関連付け

現在のナレッジグラフの状態を確認したり、具体的な使用例を試してみたいですか?

そのまま、わたしの名前は誰それですとか、猫を飼ってますとか伝えると、登録してくれます。
登録された情報を確認するために、新しいチャットを開きます。
そのチャットで、ナレッジグラフからペットの情報を取得してと依頼すると、以下のような回答が得られます。

回答例 ナレッジグラフから取得したペット情報 ペット詳細情報 名前: むぎ

種類: 猫
性別: オス
生年月日: 2015年2月16日
現在の年齢: 10歳(2025年6月30日時点)
飼い主: to_obaraさん

飼い主情報
名前: to_obara

ペット: 猫を飼っている

関係情報

to_obara → 「飼っている」 → むぎ

claude-codeを試す

インストールして動作確認

% npm install -g @anthropic-ai/claude-code
% nodenv rehash
% mkdir .claude
% cp ~/Library/Application\ Support/Claude/claude_desktop_config.json .claude/settings.local.json
% claude -v
1.0.35 (Claude Code)
% claude mcp list
MCP_DOCKER: docker mcp gateway run

% claude "ナレッジグラフからペットの情報を取得して"

queryとしてペットとなれば良いが、petなど異なるキーワードになるとうまく取得できない場合があるものの、とりあえずは情報の取得は可能であった。

gemini-cliを試す

こちらもインストールして動作確認

% npm install -g @google/gemini-cli
% nodenv rehash
% cp ~/Library/Application\ Support/Claude/claude_desktop_config.json .mcp.json
% gemini -v
0.1.3
% gemini -p "ナレッジグラフからペットの情報を取得して"
MCP STDERR (MCP_DOCKER): - Those servers are enabled: memory
- Using images:
  - mcp/memory@sha256:db0c2db07a44b6797eba7a832b1bda142ffc899588aae82c92780cbb2252407f
- Pulling images [mcp/memory]

MCP STDERR (MCP_DOCKER): > Images pulled in 63.006042ms
- Listing MCP tools...

MCP STDERR (MCP_DOCKER):   - Running server mcp/memory with [run --rm -i --init --security-opt no-new-privileges --cpus 1 --memory 2Gb --pull never --label docker-mcp=true --label docker-mcp-tool-type=mcp --label docker-mcp-name=memory --label docker-mcp-transport=stdio -v claude-memory:/app/dist:ro]

MCP STDERR (MCP_DOCKER):   > memory: (9 tools)

MCP STDERR (MCP_DOCKER): > 9 tools listed in 377.324588ms
> Initialized in 797.765479ms

承知しました。ナレッジグラフからペットに関する情報を検索します。MCP STDERR (MCP_DOCKER): - Calling tool search_nodes with arguments: {"query":"ペット"}
  - Scanning tool call arguments for secrets...
  > No secret found in arguments.
  - Running server mcp/memory with [run --rm -i --init --security-opt no-new-privileges --cpus 1 --memory 2Gb --pull never --label docker-mcp=true --label docker-mcp-tool-type=mcp --label docker-mcp-name=memory --label docker-mcp-transport=stdio -v claude-memory:/app/dist]

MCP STDERR (MCP_DOCKER):   - Scanning tool call response for secrets...

MCP STDERR (MCP_DOCKER):   > No secret found in response.
> Calling tool search_nodes took: 374.843368ms

ナレッジグラフから以下のペット情報が見つかりました。

**ペット(猫): むぎ**
*   **名前:** むぎ
*   **種類:***   **生年月日:** 2015年2月16日
*   **性別:** オス
*   **年齢:** 10歳(2025年6月30日時点)
*   **飼い主:** to_obaraさん

他に何かお手伝いできることはありますか?

色々と情報が出ていますが、queryにちゃんとペットとなっていてスムーズに情報が取得できました。

余談

MCPは、USBみたいなものだと言われます。USBも実は規格によって性能が発揮できないとか色々とあるように、現時点でのMCPもうまくいかない場合があるようです。
aws関連の情報についても色々と聞かせて貰うぜということで、catalogにあるaws関連のMCPサーバを片っ端から登録して試してみた。

以下のようなエラーに出会う

% gemini -p "awsのstep functionsについて教えて"
(node:50532) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
[API Error: [{
  "error": {
    "code": 400,
    "message": "Unable to submit request because `get_diagram_examples` functionDeclaration `parameters.diagram_type` schema didn't specify the schema type field. Learn more: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling",
    "errors": [
      {
        "message": "Unable to submit request because `get_diagram_examples` functionDeclaration `parameters.diagram_type` schema didn't specify the schema type field. Learn more: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/function-calling",
        "domain": "global",
        "reason": "badRequest"
      }
    ],
    "status": "INVALID_ARGUMENT"
  }
}
]]

claudeやと、以下のようにうまくいく

% claude "awsのstep functionsについて教えて"
╭───────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code!                         │
│                                                   │
│   /help for help, /status for your current setup  │
│                                                   │
│   cwd: /Users/kddixr/dev/aitools                  │
╰───────────────────────────────────────────────────╯


 ※ Tip: Run claude --continue or claude --resume to resume a conversation

> awsのstep functionsについて教えて

⏺ AWS Step Functionsは、AWSのサーバーレスワークフローオーケストレーションサービスです。

  主な特徴

  - ワークフロー管理: 複数のAWSサービスを組み合わせた複雑な処理フローを視覚的に設計・実行
  - 状態マシン: JSON形式のAmazon States Language (ASL)でワークフローを定義
  - エラーハンドリング: 再試行、キャッチ、フォールバック処理を組み込み可能
  - 並列処理: 複数のタスクを同時実行してパフォーマンス向上

  主要コンポーネント

  - State Machine: ワークフローの定義
  - Task: Lambda関数やAWSサービスの呼び出し
  - Choice: 条件分岐
  - Parallel: 並列実行
  - Wait: 待機状態

  料金体系

  - Standard: 長時間実行、フル機能(状態遷移課金)
  - Express: 短時間・高頻度実行、コスト効率重視(実行時間課金)

  使用例

  - データパイプライン処理
  - マイクロサービス連携
  - バッチ処理ワークフロー
  - 機械学習パイプライン

╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ > Try "how do I log an error?"                                                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  -- INSERT --

エラーについて

get_diagram_examplesが出力されたいたので、ググるとどうやらmcp/AWS Diaglamが関係していそうということが判明。このMCPサーバを外すと動作することを確認した。
geminiの方がシンタックスに厳しいのか、規定上は不要なのか確認していませんが、どっちなんでしょうね。おそらくgeminiの方がきちんとチェックしているような気がしますが…

終わりに

何となく雑然とした記事になりました。最近のLLM関連の動きが早いので、自分が満足いく内容になるまで待っているといつまで経ってもアウトプットできないと思ったので、こんな感じでとりあえず記事にしてみました。未来の自分や、それ以外の方に何らかの参考になれば幸いです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?