SRE をやっていると、「あの設定どこにある?」「このアラートって何?」といった定型的な問い合わせが Slack によく飛んできます。多くは過去のチケットやコードを見れば分かるものですが、その都度人が拾うのはなかなかのトイル(繰り返しの手作業)です。
そこで業務で、Slack でメンションされたら Claude Managed Agent が一次対応してくれるボットを作りました。備忘録もかねて、構成と作り方をまとめます。少しでも同じような状況の方の参考になれば幸いです。
何を作るか
つくったのは、Slack でメンションを受けると、n8n を司令塔にして Claude Managed Agent に回答させ、その結果を Slack のスレッドへ返す、というボットです。
Claude Managed Agent は、ツールの実行ループやコンテキスト管理を API 側が面倒見てくれるエージェントです。こちらは役割(system prompt)と使えるツール(MCP)を渡すだけで、エージェントが自律的に「情報を取る → 考える → 答える」を回してくれます。素の Chat Completion と違って、自分で必要な情報を取りに行ってくれるのが特徴です。
全体の流れ
処理の流れは、シンプルに3ステップです。
[Slack でメンション]
│ Events API
▼
[n8n: Slack Trigger]
│
▼
[n8n: HTTP Request → Claude Managed Agent]
・質問文を渡す
・Agent は MCP で Linear / GitHub / Docs を自分で参照
n8n は「Slack を受けて、Agent を呼ぶ」という糊(グルー)の役割に徹します。考える部分は Managed Agent に任せる、という分担です。順に見ていきます。
Slack Trigger でメンションを受ける
まずは n8n の Slack Trigger ノードで、app_mention イベントを購読します。
- Slack App を作り、
app_mentionイベントを n8n の Webhook URL に飛ばす - ボットを呼びたいチャンネルに、そのアプリを招待しておく
ここで受け取るのは、「誰が・どのチャンネルやスレッドで・何と言ったか」という情報です。あとでスレッドに返信したいので、channel と thread_ts を保持しておきます。
Claude Managed Agent を呼ぶ
次に、n8n から Managed Agent の API を HTTP Request ノードで叩きます。送るのは「ユーザーの質問」と「どのエージェント設定を使うか」だけです。
POST https://api.anthropic.com/...(Managed Agents のエンドポイント)
Headers:
x-api-key: {{ $secrets.ANTHROPIC_API_KEY }}
anthropic-version: ...
Body:
{
"agent": "<sre-bot-agent-id>",
"input": "{{ $json.text }}"
}
ここでのポイントは、質問に対して「どのドキュメントを見るか」を n8n 側に書かないことです。それはエージェントの仕事になります。Agent には system prompt で「SRE の一次対応ボットである」「推測で答えず、確認できた事実に基づく」といった役割を持たせておき、情報源には MCP 経由で繋ぎます。
MCP で情報源に繋ぐ
Managed Agent に MCP サーバーを接続しておくと、エージェントが必要に応じて自分でツールを呼んでくれます。SRE 向けのボットであれば、たとえば次のようなものを繋いでおくと便利でしょう。
- Linear MCP:過去チケットや対応履歴を検索する
- GitHub MCP:Terraform や設定ファイルを参照する
- 社内ドキュメント MCP:手順書や仕様書を検索する
「質問 → 関連チケット検索 → コード確認 → 回答」という流れを、エージェントが自律的に組み立ててくれます。このあたりが、素の API 呼び出しではなく Managed Agent を使う旨味だと感じています。
運用してみて効いた工夫
実際に運用に乗せてみると、ボットの「振る舞い」のチューニングが一番大事になってきました。system prompt に、次のような点を効かせています。
- メンションの自律判断:SRE 全体への一斉メンションを避け、文脈から返信先を絞る
- 推測で話さない:客観的な事実・確認済みの情報に基づいてのみ発言する(分からなければ「分からない、ここを見てほしい」と言う)
- 自分の仕様を知っている:「自分の仕様は◯◯に書いてある」と答えられるよう、仕様ドキュメントを参照させる
これらは Managed Agent の system prompt を変えるだけで効くので、設定を Git 管理して CI/CD で反映する運用にしておくと、振る舞いの変更履歴が残って安全です。
インフラ面の注意
最後に、インフラ面で気をつけている点も補足しておきます。
- n8n 自体は Cloud Run(
ingress: internal)で動かし、外部からの直接アクセスは塞ぐ - 外への導線は Cloudflare Tunnel に絞り、WAF で IP やトークンの関門を張る
-
ANTHROPIC_API_KEYや Slack の各トークンは Secret Manager に置き、ワークフローには直書きしない
おわりに
構成自体は「Slack Trigger → Managed Agent」の2点だけで、n8n は糊に徹するというシンプルなものでした。「何を見て答えるか」を n8n で書かず、MCP を繋いでエージェントに自律的に取りに行かせる、というのがこの構成の肝だと思います。
実際に効くのは、推測しない・メンションを絞るといった振る舞いのチューニングのほうで、ここは運用しながら少しずつ育てていく部分でしょう。SRE のトイル削減に AI ボットを使ってみたい方の参考になれば幸いです。