munin について
Muninは、ナレッジベース、会話、CRM、CMS、アウトリーチ、分析をPostgresベースのシステムに統合したMCP中心の顧客業務プラットフォームです。組み込みエージェントランナーと、提案や送信前メッセージの人による確認フローを備えています。
主な機能
- 01顧客業務を扱う6つのモジュール
- 02223のMCPツールと58のスキル
- 03会話対応と情報整理の組み込みエージェント
- 04提案を確認する人向けキュー
- 05セルフホストまたはクラウドで運用
活用シーン
- 01ナレッジベースを使った顧客対応
- 02CRM、CMSコンテンツ、分析の一元管理
- 03アウトリーチの下書きを送信前に確認
- 04エージェントスキルによる複数モジュールのワークフロー実行
MCP 対応
Muninは各モジュールとプラットフォーム機能をMCPツールとして互換クライアントに公開し、共通の権限と監査ログを適用します。外部MCPサーバーをデータコネクターとして接続し、接続ごとに利用可能なツールを制限できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.getmunin.com/mcpclaude mcp add --transport http com-getmunin-munin https://mcp.getmunin.com/mcp{"mcpServers":{"com-getmunin-munin":{"type":"http","url":"https://mcp.getmunin.com/mcp"}}}Cursor で開く{"servers":{"com-getmunin-munin":{"type":"http","url":"https://mcp.getmunin.com/mcp"}}}VS Code で開く{"mcpServers":{"com-getmunin-munin":{"type":"http","url":"https://mcp.getmunin.com/mcp"}}}{"mcpServers":{"com-getmunin-munin":{"serverUrl":"https://mcp.getmunin.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Munin
すべての顧客オペレーションを、1 つの MCP エンドポイントで。
ウェブサイト · 動作を見る · ドキュメント · MCP Registry
CRM、会話、アウトリーチ、CMS、ナレッジベース、分析機能を 1 つの Postgres スキーマに集約し、画面をクリックして操作するのではなく、エージェントが使う MCP ツールとして公開します。ヘッドレス CMS と同じ意味でのヘッドレスです。ダッシュボードは設定、認証、人が担う作業を管理します。たとえば、人が会話を引き継ぐ受信トレイや、エージェントが提案した内容を承認するレビューキューがあります。ただし、データそのものを操作するための管理 UI はありません。すべての操作は MCP ツールを通じて実行され、あらゆる MCP 対応クライアント(Claude、Cursor、ChatGPT、カスタムランナー)から呼び出せます。人が操作する場合もエージェントが操作する場合も、ツール、権限、監査ログは同じです。Munin には独自のエージェントランナーも付属します。これはプロセス内で組織ごとに動作し、設定した LLM プロバイダーを使ってリアルタイムの会話に応答し、キュレーションキューを処理します。そのため、外部 MCP クライアントがなくても、プラットフォームをすぐに利用できます。

コンソール — 設定、認証、受信トレイ、レビューキューを管理します。エージェントが呼び出すものと同じ MCP ツールを操作します。

レビューキュー — アウトバウンドメッセージが自動送信されることはありません。エージェントが下書きを作成して根拠を添付し、承認を待ちます。承認するには、人がキーを押す必要があります。

埋め込み可能なチャットウィジェット — ナレッジベースをもとにリアルタイムで顧客に回答し、人への引き継ぎに対応。引き継ぎ後はエージェントが再び対応できます。
モジュールの概要
| モジュール | ツール | 機能 |
|---|---|---|
| ナレッジベース | kb_* | ドキュメント、ハイブリッド検索、対象範囲の設定 |
| 会話 | conv_* | チャネル、メッセージ、引き継ぎ |
| CRM | crm_* | 連絡先、企業、取引 |
| CMS | cms_* | コレクション、エントリー、アセット |
| アウトリーチ | outreach_* | キャンペーン、下書き、提案のみ |
| 分析 | analytics_* | ページビューと検索イベント |
この 6 つのモジュールは別々の製品ではありません。1 つの Postgres スキーマ、1 つの権限モデル、1 つの監査ログを共有しています。インテグレーションとプラットフォームの基盤機能を合わせると、MCP ツールは 223 個、スキルは 58 個になります。それらがどのように連携するか、こちらをご覧ください。
コアモジュール
ナレッジベース
- スペースごとに整理された Markdown 記事。それぞれの記事は、閲覧を許可された対象者に限定されています。
- キーワードマッチングと意味に基づく検索結果を組み合わせたハイブリッド検索。
- ウェブサイトのインポート — 公開サイトをクロールし、各ページをバックグラウンドで記事に変換します。元のページがなくなると、該当する記事も自動的に削除されます。
- 復元機能を備えた完全なバージョン履歴に加え、編集案を確認するためのレビューキューもあります。
- エージェントは、文を変更するために記事全体を書き直すのではなく、対象となるテキストを置換して長い記事をその場で修正します。
会話
- メール、チャットウィジェット、音声(Threll.ai / Vapi)、SMS(Twilio / MessageBird)をまとめた単一の受信トレイ。
- インバウンドとアウトバウンドの両方に対応 — エージェントは会話に応答し、発信もできます。
- すべてのチャネルで画像の送受信に対応。顧客はスクリーンショットを送り、オペレーターとエージェントは画像で返信でき、エージェントは送信した画像を確認できます。
- メールは本来のメールのように機能します。生成されたアドレスへの転送から始められ、Gmail、Outlook、Apple Mail の返信から引用履歴を再構成します。また、自動返信やバウンスはキューに入れずに処理し、迷惑メールの送信者を記録します。未配信のメッセージは通知され、再送できます。
- トピックごとの返信自動化に対応。トピックに対しては、最初は承認用の下書きを作成し、そのトピックで信頼できるようになったら自動送信に切り替えられます。
- 割り当て可能で、トピックごとに整理され、すべてのメッセージを横断して検索できます。ステータス、発生元、チャネル、トピック、経過時間で絞り込めます。
- 会話の変化に応じて独自のシステムに通知する、人間への組み込みの引き継ぎ機能があります。
CRM
- 連絡先、企業、取引、アクティビティ、パイプライン、セグメント。
- AI が作成した要約や次のアクションの提案は、人が手動で編集する情報とは分けて管理されます。
- 同意の追跡 — 各連絡先の適法な根拠と情報源を記録し、アウトリーチへの追加前に必ず確認します。メールアドレスの配信状況は別途追跡するため、バウンスしたアドレスが同意の撤回として扱われることはありません。
- 重複を自動検出し、確認用に統合案を提示します。また、連絡先を一括インポートできます。
CMS
- 構造化フィールドを備えたコンテンツコレクション。エントリーは複数の言語で公開でき、ロケールごとに独自のスラッグを設定できます。
- 記事本文用のリッチコンテンツブロック — コールアウト、引用、メディアなどにキーでアクセスできるため、エージェントは単一のブロックを追加、置換、削除、並べ替えできます。
- 公開予約機能と、マスター画像を保持してサイズ別の派生画像を配信するメディアライブラリ。
- 復元機能を備えた完全なバージョン履歴、検索、エントリー間の相互参照に対応しています。
- 公開コンテンツ API でサイトやアプリにコンテンツを配信できます。カスタムフロントエンド向けの下書きプレビューリンクを利用でき、すべてのエントリーにエンゲージメント追跡機能が組み込まれています。
アウトリーチ
- メール、SMS、音声通話によるアウトバウンドは提案のみ — キャンペーン、セグメント、初回連絡と返信の両方に対応した下書きを作成できます。
- 返信が届いた時点で停止する、送信間隔ルールを備えた複数ステップのシーケンス。
- すべての提案に、承認時の送信先となる正確なアドレスまたは電話番号が表示されます。承認した送信は、すぐに送信せず、予約することもできます。
- 返信や通話終了後に抽出した結果を、レコードに書き戻します。
- 送信先には、同意が記録された連絡先のみが選ばれます(CRM を参照)。
- すべてのメッセージは人の承認を待ちます。自動送信されることはありません。
アナリティクス
- 測定したいあらゆる対象のページビューとサイト内検索を記録します。ビューごとに 1 行で読み進めた深さも記録し、トラッカーごとにレポートします。
- CMS のページは自動的に追跡されます。それ以外のページでは、小さなトラッキングスニペットを追加します。
- コンバージョンファネルと訪問者ごとの行動履歴に対応。訪問者を識別すると、その訪問は CRM の連絡先に紐づき、それ以前の匿名訪問も含まれます。識別時に署名付きメールを使用すると、ウェブサイトと受信トレイの情報が同一人物に統合されます。
- トラフィックソース、リファラー、国別の内訳に加え、「次に何を書くべきか」を示す指標(人気のトピック、エンゲージメント、検索結果がなかった検索)も確認できます。
インテグレーション
3 種類のインテグレーション、それぞれに適した場所があります。どれを選ぶかは、連携先のシステムが何であるかによって異なります。
メッセージングチャネル — 顧客からの連絡を受け取る場所
IMAP/SMTP 経由のメール、または既存のメールボックスから転送するために生成する転送先アドレスです。埋め込み可能なチャットウィジェットは、テーマを変更でき、ダークモードに対応し、23 言語で利用できます。Threll.ai または Vapi 経由の音声、Twilio または MessageBird 経由の SMS にも対応しています。いずれも、同じ conv_* ツールを使うチャネルアダプターです。
オペレーターブリッジ — チームが普段から使っている場所
Slack では、各会話がスレッドに反映されます。チームがスレッドから返信すると顧客に届き、アウトリーチの提案には承認ボタンと却下ボタンが表示され、CMS で公開すると公開記事へのリンクが通知されます。会話、承認、監査記録は、ダッシュボードに表示されるものと同じです。
データコネクター — 顧客の基幹システム
ベンダーの API からライブデータを読み取り、Munin にコピーすることはありません。そのため、同期も不要で、データが古くなることもありません。
| ドメイン | ツール | ベンダー |
|---|---|---|
| コマース | commerce_* | Shopify、Magento 2 / Adobe Commerce |
| 予約 | bookings_* | Gastroplanner — 空き状況の確認、作成、変更、キャンセル |
| Search Console | seo_* | Bing Webmaster Tools、Google Search Console |
| 独自システム | お客様のもの | 実行する任意の MCP サーバー |
コマースと予約には、セルフサービス向けの機能もあります。チャットウィジェットのエンドユーザーエージェントは、モデルに渡されたメールアドレスではなく、サーバー側で呼び出し元の本人性に紐づけて、ユーザー自身の注文や予約を検索します。Search Console はオペレーター向けで、管理者のみが利用できます。接続情報は暗号化して保存され、ベンダーに応じて API キーまたは OAuth リダイレクトで認証し、ダッシュボードの「インテグレーション」ページから管理します。
ベンダーアダプターで対応していないシステムをお使いですか?Munin を実行中の MCP サーバーに接続すると、そのサーバーのツールがコネクターツールになります。接続ごとに許可リストを設定し、エージェントが呼び出せるツールを指定できます。
自動化
会話ループ
プロセス内で組織ごとに動作するエージェントランナーが、設定した LLM プロバイダーを使って、すべてのチャネル(チャットウィジェット、メール、SMS、音声)でリアルタイムの会話に対応します。返信の下書きと送信を行い、必要に応じて人間に引き継ぎます。
キュレーターループ
プロセス内のエージェントランナーは、永続的なバックグラウンドジョブキューも処理します。スケジュールに基づく KB のキュレーション、CRM のデータ整理、連絡先の抽出、アウトリーチの下書きを、リトライおよびデッドレター処理とともに実行します。
レビュー
エージェントが提案し、人が判断するすべての項目(KB の改訂、アウトリーチの提案、マージの提案、返信の下書き)は、1 つのキューに集約されます。すべての判断が保存されるため、「決定済み」フィードは、作業するにつれて空になるリストではなく、誰が何を承認したかを記録する永続的な記録です。
プレイブックとスキル
複数ステップにわたるモジュール横断型ワークフロー向けに、Markdown 形式の手順書(skill://module/<verb-object>)をパッケージ化し、MCP 経由で提供します。これらは、Munin 独自のランナーと、プラットフォーム上で動作する外部 AI エージェントの両方が利用します。
プラットフォーム
データの可搬性
モジュールごとに対称的な *_export / *_import MCP ツールと、/v1/<module>/export|import REST エンドポイントを用意しています。これにより、エージェントはセルフホスト型サーバーとクラウドの間で、組織のデータをどちらの方向にも移行できます。skill://playbooks/data-migration を参照してください。
ID 管理
会話の相手となる人々を一元的に管理します。ウィジェットの訪問者、発信者の電話番号、メールアドレス、お使いのシステムのユーザー ID を同一人物に紐づけ、identity_* を通じて MCP から参照できます。
監査と Webhook
すべてのアクションを監査ログに記録し、Webhook によって署名付きで再送可能な配信を使い、イベントをお客様のエンドポイントに送信します。
アラートとフィードバック
運用上の問題はシステムアラートとして表示され、エージェントが一覧表示、確認、解決できます。製品内のフィードバックチャネルから、機能リクエストを登録し、Munin の公開ロードマップに投票できます。
認証とアクセス
サインインとアクセス制御には BetterAuth を使用し、OAuth 2.1 の動的クライアント登録とチームへの招待に対応しています。オーナーと管理者はコンソール全体にアクセスできます。メンバーがアクセスできるのは受信トレイのみです。
動作を見る
Lovable がフロントエンドを構築します。Munin が運用環境を立ち上げます。プロンプト 1 つ、MCP エンドポイント 1 つで、あとはエージェントにお任せです。
1 つのプロンプトから Lovable が実際のウェブサイトを構築する間に、Munin はその背後に必要なすべてを立ち上げます。ブログが参照する CMS、データを投入済みのナレッジベース、分析機能、そしてビジネスのことをすでに把握しているチャットウィジェットです。クリック操作で設定したり、画面をつないだりする必要はありません。エージェントが 1 つの MCP エンドポイントを通じて作業を進めます。その後、実際の顧客との会話が行われます。ナレッジベースに基づいて回答し、必要な場面では人間に引き継ぎ、エージェントが対応を再開して問題を解決します。
2 つの実行方法
セルフホスト(このリポジトリ):シングルテナント、招待制です。
git clone https://github.com/getmunin/munin.git
cd munin
cp .env.example .env
docker compose up
.env.example のプレースホルダーのままのシークレットは、初回起動時に自動生成され、munin-data ボリュームに保存されます。ローカルでのセルフホストにはこれで問題ありません。共有環境または本番環境にデプロイする場合は、代わりに .env で強度の高い MUNIN_AUTH_SECRET + MUNIN_KEY_PEPPER + MUNIN_ENCRYPTION_KEY の値(openssl rand -base64 48)を設定してください。Docker を使用せず、NODE_ENV=production で起動したバックエンドは、3 つの値のいずれかが未設定、短すぎる、またはプレースホルダーのままだと起動を拒否します。新しい値ではなく、デプロイで既に使われているペッパーと暗号化キーを設定してください。新しいペッパーを使うとすべての API キーと署名付きリンクが無効になり、新しい暗号化キーを使うと保存済みのチャネルおよびコネクターのシークレットが読み取れなくなります。
Postgres は 127.0.0.1 のみに公開されるため、他のマシンからはアクセスできません。デフォルトのパスワード(スーパーユーザー用は munin、アプリのロール用は munin_app)は、ホスト自体を使用できるユーザーには知られたままです。共有マシンでは .env で POSTGRES_PASSWORD と MUNIN_APP_PASSWORD を設定してください。POSTGRES_PASSWORD が有効になるのは、munin-pg ボリュームの初回作成時のみです。MUNIN_APP_PASSWORD は起動のたびに適用されます。
最初にサインアップしたユーザーが組織の管理者になります。それ以降のユーザーには、招待トークン、またはドメインが MUNIN_ALLOWED_EMAIL_DOMAINS に含まれるメールアドレスが必要です。許可リストに登録されたアドレスは、確認メールで認証されると参加できます。招待を受け入れられるのは、招待先のアドレスでサインインしたアカウントのみです。
ホステッド(https://www.getmunin.com):マルチテナント、組織ごとにサインアップ 1 回です。
ローカルで試す
docker compose up の実行後、バックエンドは :3001、ダッシュボードは :3000 で待ち受けます。
http://localhost:3000を開き、最初のユーザーとして登録します。このユーザーが唯一の組織管理者になります。- ダッシュボードで Settings → API keys に移動し、管理者キー(
mn_admin_…)を発行します。キーは一度しか表示されないため、パスワードと同様に扱ってください。 - API とツールを試します。
# REST control plane — direct, no OAuth
curl -s http://localhost:3001/v1/kb/spaces \
-H "Authorization: Bearer mn_admin_..." | jq
# MCP tool browser (recommended for poking at tools/skills)
npx @modelcontextprotocol/inspector
# In its UI: URL = http://localhost:3001/mcp, Auth = Bearer mn_admin_...
# Raw curl over Streamable HTTP — useful for sanity-checking the transport
curl -N -X POST http://localhost:3001/mcp \
-H "Authorization: Bearer mn_admin_..." \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
REST コントロールプレーンの OpenAPI 仕様は packages/backend-core/openapi.json にあります。Claude や Cursor などの MCP クライアントを接続する方法については、以下のAI エージェントを接続するをご覧ください。
AI エージェントを接続する
サインアップ(ホスト型)するか、docker compose up(セルフホスト)を実行したら、MCP クライアントを URL に接続します。セルフホストの場合は http://localhost:3001/mcp、ホスト型の場合は https://mcp.getmunin.com です。
Claude Code(CLI):
claude mcp add munin http://localhost:3001/mcp
Claude Desktop — MCP 設定に追加します。
{
"mcpServers": {
"munin": {
"url": "http://localhost:3001/mcp"
}
}
}
最初の呼び出し時にブラウザーで OAuth の同意画面が表示されます。その後、エージェントはナレッジベース、会話、CRM、CMS、アウトリーチ、分析、および接続したあらゆるコネクターを含む、すべてのツールを利用できるようになります。
複数の組織に所属していますか?各組織には /mcp/o/<orgId> という専用エンドポイントもあります。この URL に接続すると、最後にアクティブにした組織に応じて切り替わるのではなく、クライアントがその組織に固定されます。
MCP Apps に対応したホストでは、テキスト以外の内容も返されます。提案、キュレーション候補、コネクターの結果は、ui:// リソースとして提供されるインタラクティブなパネルに表示されます。モデルにツールを呼び出させる代わりに、人間がクリックして承認できます。
2 つの信頼コンテキスト、1 つの MCP エンドポイント
同じ /mcp エンドポイントが、対象者に応じて 2 種類の呼び出し元に対応します。
- 管理者エージェント(Claude Desktop、Cursor、内部自動化) — お客様が OAuth で認可します。
kb:*、conv:*、crm:*、cms:*、outreach:*、analytics:*、commerce:read、bookings:*、seo:*、connectors:*、identity:read、slack:*、webhooks:*ごとにスコープで制御される、すべてのツールを利用できます。 - エンドユーザーエージェント(お客様の音声 AI、Web チャットボット、モバイルアプリのヘルパー) — お客様のバックエンドからサーバー側で発行される、有効期間の短い委任トークンを使用し、お客様のエンドユーザーのいずれか 1 人にスコープを限定します。利用できるのはセルフサービス用ツールのみです。自分の連絡先の読み取り、自分の会話でのメッセージ送信、自分の注文の照会、自分の予約の作成ができます。
トークン発行 API については、packages/backend-core/src/control/delegated-token.controller.ts を参照してください。Node クライアントの @getmunin/sdk がこの API をラップしています。
これらのツールが返す情報の大半は、組織内の誰も作成していないテキストです。受信メッセージ、CRM フィールド、インポートされた記事、顧客のストアにある最新のレコードなどが該当します。Munin は自社ランナーに対してこれらのコンテンツをデータとして扱うよう分離し、サーバーの指示を通じて外部ホストにも同様に伝えます。実際の封じ込めは、引き続き RLS、対象者ゲート、スキルごとのツール許可リストによって行われます。
スタック
| レイヤー | 技術 |
|---|---|
| 言語とランタイム | TypeScript、Node 24 LTS |
| モノレポ | Turborepo、pnpm |
| バックエンド | NestJS |
| フロントエンド | Next.js |
| データ | Postgres + pgvector、Drizzle |
| プロトコルと認証 | MCP Streamable HTTP、BetterAuth + OAuth 2.1 |
ドキュメント
開発者向けドキュメントは getmunin.com/docs にあります。ガイド、REST API リファレンス、MCP ツールの全一覧、スキルライブラリをご覧いただけます。
コントリビューション
コントリビューションを歓迎します。pnpm install の後に docker compose up(または pnpm dev)を実行すると、:3001(バックエンド)と :3000(ダッシュボード)でフルスタックが起動します。main から <type>/<kebab-summary>(例:feat/website-import-reconcile)という名前でブランチを作成し、PR の範囲を絞り、CI(lint、typecheck、test、build)が通ることを確認してください。
上記のスクリーンショットは手動で撮影したものではなく、自動生成されたものです。UI の変更後に再生成するには、apps/web/capture/README.md を参照してください。
セットアップ、コミット規約、PR のガイドラインについては、CONTRIBUTING.md を参照してください。
セキュリティ
脆弱性を発見した場合は、公開 issue を作成せず、代わりに [email protected] までメールでご連絡ください。対象範囲と対応スケジュールについては、SECURITY.md を参照してください。
ライセンス
MIT。LICENSE を参照してください。
同梱されているサードパーティ依存関係には、それぞれ独自のライセンスが適用されます。pnpm licenses:generate で生成され、CI で検証される THIRD_PARTY_LICENSES.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。