🧬

Agent Development Kit × MCP 最速チュートリアル ― Chat‑Ops Bot を 30 行で作ろう

に公開

2025 年 4 月 11 日に Agent Development Kit (ADK) が公式 β としてリリースされました。Google は “100 行以内で本番レベルのマルチエージェントを構築できる” とアピールしており、すでに Vertex AI の Agent Builder からも利用できます。
ADK は Model Context Protocol (MCP) とネイティブ統合されており、MCP サーバー経由で外部ツール/サービスを安全に呼び出せるのが特長です。

目次

  1. TL;DR — 30 行で動く Chat‑Ops Bot
  2. ADK とは何か、なぜ今注目なのか
  3. MCP とは何か、なぜ組み合わせるのか
  4. 開発環境セットアップ
  5. コード詳細解説
  6. 仕組み — アーキテクチャ図で理解
  7. 発展編 — 本番運用に耐えるためのヒント
  8. トラブルシューティング & FAQ
  9. まとめ & 次のステップ

1. TL;DR — 30 行で動く Chat‑Ops Bot

下記を chatops_bot.py として保存し、.envSLACK_BOT_TOKEN を設定すれば “deploy staging” などのコマンドを Slack 上から実行できます(26 行)。

注意 : サンプルは Slack MCP Server を例にしています(@modelcontextprotocol/server-slack)。お好みで GitHub、Filesystem、Google Maps など任意の MCP サーバーに置き換えてください。

import asyncio, os
from dotenv import load_dotenv
from google.genai import types
from google.adk.agents.llm_agent import LlmAgent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters
load_dotenv()
async def get_agent_async():
    tools, exit_stack = await MCPToolset.from_server(
        connection_params=StdioServerParameters(
            command='npx', args=['-y','@modelcontextprotocol/server-slack'],
            env={'SLACK_BOT_TOKEN': os.getenv('SLACK_BOT_TOKEN')}))
    return LlmAgent(model='gemini-2.0-flash', name='chatops_bot',
                    instruction='You are a Chat‑Ops assistant.', tools=tools), exit_stack
async def main():
    svc = InMemorySessionService()
    session = svc.create_session(state={}, app_name='chatops', user_id='dev')
    msg = types.Content(role='user', parts=[types.Part(text='deploy staging')])
    agent, es = await get_agent_async()
    async for e in Runner(app_name='chatops', agent=agent,
                          session_service=svc).run_async(session.id, session.user_id, msg):
        print(e)
    await es.aclose()
if __name__=='__main__':
    asyncio.run(main())

2. ADK とは何か、なぜ今注目なのか

  • 生産性 — Python ベースで 型安全 なツール呼び出しとストリーミングを備え、単一エージェントから複雑なマルチエージェントまでシームレスにスケール。
  • 決定論的ガードレール — ステート管理、ツール実行、メモリをコードで明示できるため、LLM の予測不可能性を抑制。
  • クラウド統合 — Vertex AI、Gemini 2 系モデル、Cloud Run/GKE など Google Cloud ネイティブな実行環境をワンコマンドでデプロイ。
  • オープンソースpip install google-adk でインストールでき、GitHub 上で活発に開発が進む。

3. MCP とは何か、なぜ組み合わせるのか

Model Context Protocol (MCP)LLM ⇄ 外部世界 を標準化するクライアント/サーバー・プロトコルです。
LLM ホスティング側(ここでは ADK)が MCP client としてツール一覧を取得し、必要に応じて function 呼び出しをプロキシ。逆に ADK を MCP server として公開すれば、他システムから ADK ツールを安全に利用できます。

Chat‑Ops におけるメリット

観点 従来の Slash Command Bot ADK × MCP Bot
コード量 Web サーバー+パーサ用に数百行 30 行以下(上記サンプル)
ツール呼び出し REST で個別実装 MCP により統一、差し替え自在
思考/応答 if–else ロジック LLM による自然言語ワークフロー
拡張性 Slack 専用 Slack / Discord / CLI などマルチチャネル

4. 開発環境セットアップ

4.1 前提バージョン

  • Python 3.10+
  • Node.js ≥ 18(npx が使えること)
  • gcloud CLI(Vertex AI 利用時)

4.2 インストール手順

# 1. 仮想環境
python -m venv .venv && source .venv/bin/activate

# 2. Agent Development Kit
pip install google-adk python-dotenv      # ADK 本体

# 3. (任意)MCP サーバー
npm install -g @modelcontextprotocol/server-slack

ワンポイント : ADK CLI (adk dev) を使うとブラウザ UI & WebSocket が起動し、会話ログやトレースをリアルタイムで確認できます。

4.3 環境変数

# .env
SLACK_BOT_TOKEN=xoxb-***
GOOGLE_VERTEX_PROJECT=your‑gcp‑project

5. コード詳細解説

行数 説明
1–7 主要インポート。google.genai は Vertex AI のストリーミング型メッセージ。
9 .env ロード(API キー漏洩を防ぐため必須)。
10–16 MCPToolset.from_serverSlack MCP Server に接続。実行中は exit_stack がコネクションを管理。
17–19 LlmAgent を生成。tools に MCP で受け取ったツール群を渡すだけで、エージェントが自動推論して呼び出す。
20–27 Runner.run_async で非同期ストリームを受け取りつつ標準出力に表示。Slack チャンネル側でも応答が確認できる。
28–29 後始末。exit_stack.aclose() を忘れるとローカル MCP プロセスが残るので注意。
30 asyncio.run でエントリーポイントを実行。

6. 仕組み — アーキテクチャ図で理解

ポイント

  1. MCP Servernpx で立ち上がる Node.js プロセス。
  2. ADK Runner がストリームを multiplex し、Slack 側の tool.* イベントを検知して再呼び出し。
  3. 同じ MCP Server を複数エージェントで共有すれば poly‑agent な Chat‑Ops も実現可。

7. 発展編 — 本番運用に耐えるためのヒント

テーマ ヒント
セキュリティ Vertex AI Service Accounts で最小権限を付与。Slack トークンは Secret Manager。
回路ブレーカー Runner のコールバックでツール呼び出し回数を監視し、過負荷時は自動 Abort。
テスト adk test + pytest で会話シナリオをスナップショット比較。
デプロイ Cloud Run deploy: adk deploy --platform=cloudrun --region=asia-northeast1.
コスト Gemini 2.0 Flash は Price/Latency が優秀。CPU x 0.25, Memory 512 MiB で idling ¥0.

8. トラブルシューティング & FAQ

症状 原因 & 対処
ModuleNotFoundError: google.adk 仮想環境を忘れている/pip install google-adk を再確認。
ConnectionRefusedError MCP Server プロセスが起動していない。npx -y @modelcontextprotocol/server-slack を手動実行しポートを確認。
Slack に応答がない Bot Token のスコープ不足。chat:write, commands, app_mentions:read を追加。
Unexpected function_call instruction が曖昧。エージェントのシステムメッセージで行動方針を明示する。

9. まとめ & 次のステップ

  • ADK がもたらす “コードで制御できるエージェント” と MCP の “ツール標準化” は、Chat‑Ops の実装コストを劇的に下げる。
  • まずはローカルで動かし、adk dev でストリームを可視化 → Cloud Run でデプロイ、という流れが鉄板になりそう?
  • 公開 β の今こそフィードバックを送って見るのも良いですね。

参考文献

  1. Google Developers Blog — Agent Development Kit: Making it easy to build multi‑agent applications, 2025‑04‑09.
  2. Vertex AI Agent Builder 製品ページ.
  3. Google Cloud Blog — Build and manage multi‑system agents with Vertex AI, 2025‑04‑10.
  4. ADK 公式ドキュメント — Install ADK.
  5. ADK 公式ドキュメント — Quickstart.
  6. ADK 公式ドキュメント — MCP tools(Model Context Protocol 概要).

Discussion