MCP サーバー - AI エージェントから通知や電話を受け取る

Claude Code、Codex、Cursor、VS Code、ChatGPT などの AI エージェントを Echobell 公式 MCP サーバーに接続し、プッシュ通知や電話でお知らせを受け取れるようにします。


Echobell は公式の Model Context Protocol(MCP)サーバーを提供しています。Claude Code、Codex、Cursor、VS Code、Windsurf、Gemini CLI、Claude、ChatGPT、その他の MCP クライアントなど、お使いの AI エージェントに接続すると、エージェントは notify というツールを 1 つ使えるようになり、Echobell のチャンネルを通じて通知を送れます。

大規模なリファクタリングやテスト、デプロイを任せたら、その場を離れて「終わったら知らせて」と頼んでおきましょう。作業が終わればスマートフォンに通知が届き、エージェントがあなたの判断を必要とすれば時間重要の通知が、深刻な問題が起きれば電話のような着信が届きます。

仕組み

  • https://mcp.echobell.one/mcp で動作するリモート MCP サーバーで、Streamable HTTP トランスポートを使います。インストールは不要です。npm パッケージも npx もローカルプロセスもありません。
  • MCP URL は1 つのチャンネルに対応します。エージェントが notify を呼び出すと、そのチャンネルの購読者全員に、それぞれが選んだ通知タイプで通知が届きます。
  • 認証情報はチャンネルのトリガートークンです。チャンネルの Webhook URL の末尾にあるトークンと同じものです。MCP サーバーはチャンネルの Webhook と同じように動作し、エージェントが呼び出し方を理解できるツールとして提供されます。

エージェント専用のチャンネル(たとえば「AI Agents」)を作成し、通話で購読しておくことをおすすめします。そうすればエージェントは通話までの任意のレベルを選べますし、同じ通知を受け取りたいチームメイトとチャンネルを共有することもできます。

MCP URL を取得する

アプリから取得する

  1. Echobell アプリを開き、エージェントに使わせたいチャンネルをタップします。
  2. チャンネルの詳細で AI エージェントを接続セクションを探します。
  3. MCPサーバーURL をコピーするか、お使いのエージェント向けのセットアップ用スニペットをコピーします。

Webhook URL から作成する

MCP URL は、チャンネルの Webhook URL と同じトークンを使います。Webhook URL の末尾にあるトークンを取り出し、https://mcp.echobell.one/mcp/ の後ろに付けてください。

Webhook URL: https://hook.echobell.one/t/<channel-token>
MCP URL:     https://mcp.echobell.one/mcp/<channel-token>

MCP URL にはチャンネルのトリガートークンが含まれています。これを知っている人は誰でもチャンネルの購読者に通知を送れるため、パスワードと同じように厳重に管理してください。詳しくはセキュリティを参照してください。

エージェントを設定する

以下のスニペットはすべて URL 形式です。<channel-token> をチャンネルのトリガートークンに置き換えるか、トークンが入力済みのアプリのスニペットを貼り付けてください。

Claude Code

claude mcp add --transport http echobell https://mcp.echobell.one/mcp/<channel-token>

--scope user を付けると、現在のプロジェクトだけでなくすべてのプロジェクトでサーバーを使えるようになります。

Codex

~/.codex/config.toml に次の内容を追加します。

[mcp_servers.echobell]
url = "https://mcp.echobell.one/mcp/<channel-token>"

Cursor

~/.cursor/mcp.json、またはプロジェクト内の .cursor/mcp.json に次の内容を追加します。

{
  "mcpServers": {
    "echobell": {
      "url": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

VS Code(GitHub Copilot)

ワークスペースの .vscode/mcp.json に次の内容を追加し、Copilot Chat のエージェントモードでツールを使います。

{
  "servers": {
    "echobell": {
      "type": "http",
      "url": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

.vscode/mcp.json をリポジトリにコミットする場合は、トークンがファイルに残らないよう、代わりに入力プロンプトを使うヘッダー形式を使ってください。

Windsurf

~/.codeium/windsurf/mcp_config.json に次の内容を追加します。

{
  "mcpServers": {
    "echobell": {
      "serverUrl": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

Gemini CLI

~/.gemini/settings.json に次の内容を追加します。

{
  "mcpServers": {
    "echobell": {
      "httpUrl": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}

Claude デスクトップアプリと claude.ai

  1. Settings → Connectors を開きます。
  2. Add custom connector を選びます。
  3. 名前に Echobell、URL に https://mcp.echobell.one/mcp/<channel-token> を入力して追加します。

このコネクタは Web 版の Claude とデスクトップアプリの両方で使えます。

ChatGPT

  1. ChatGPT の設定で開発者モード(developer mode)をオンにします。
  2. Settings → Connectors を開き、Create を選びます。
  3. URL に https://mcp.echobell.one/mcp/<channel-token> を入力し、認証は No authentication にします。URL に含まれるトークンが認証情報になります。

その他の MCP クライアント

Streamable HTTP トランスポートに対応したクライアントであれば利用できます。URL https://mcp.echobell.one/mcp/<channel-token> を指定するか、下記のヘッダー形式を使ってください。

ヘッダー形式

トークンを URL に含める代わりに、Authorization ヘッダーで送ることもできます。どちらの形式も同じように動作します。

URL:            https://mcp.echobell.one/mcp
Authorization:  Bearer <channel-token>

Claude Code の場合:

claude mcp add --transport http echobell https://mcp.echobell.one/mcp \
  --header "Authorization: Bearer <channel-token>"

VS Code では、入力プロンプトを使うとトークンを .vscode/mcp.json に書かずに済むため、ファイルを安心してコミットできます。サーバーの初回起動時に VS Code がトークンの入力を求め、安全に保存します。

{
  "inputs": [
    {
      "type": "promptString",
      "id": "echobell-token",
      "description": "Echobell channel trigger token",
      "password": true
    }
  ],
  "servers": {
    "echobell": {
      "type": "http",
      "url": "https://mcp.echobell.one/mcp",
      "headers": {
        "Authorization": "Bearer ${input:echobell-token}"
      }
    }
  }
}

notify ツール

サーバーが提供するツールは notify の 1 つだけです。引数の内容は、あなたのプロンプトをもとにエージェントが決めます。

引数型必須説明
titlestringはい通知のタイトル。
bodystringいいえ通知の本文。
linkstring (URL)いいえ通知をタップしたときに開くリンク。プルリクエスト、ビルドログ、ダッシュボードなど。
urgencystringいいえnormal、time-sensitive、calling のいずれか。省略すると各購読者自身のレベルが使われます。緊急度を参照してください。

緊急度

チャンネルを購読する人は、アプリでそのチャンネルの通知タイプ(通常、時間重要、通話)を選びます。この選択が、チャンネルがその人に届けられる最も高いレベルになります。

  • エージェントが urgency を省略した場合、各購読者は自分が選んだレベルで通知を受け取ります。
  • エージェントが urgency を送った場合、購読者のレベルを下げることはできますが、上げることはできません。通話で購読していれば "urgency": "normal" は通常の通知として届き、通常で購読していれば "urgency": "calling" でも通常の通知として届きます。

これで 1 つのチャンネルですべてをまかなえます。通話で購読しておき、エージェントには「普段の報告は normal で、何かが壊れたときだけ calling を使って」と伝えましょう。

Webhook リクエストの notificationType と違い、urgency はカスタムテンプレートを使うチャンネルでも有効です。

通話には Echobellプレミアムが必要です

通話通知は Echobellプレミアムの機能です。エージェントが calling を要求した場合、プレミアムに加入していない購読者には代わりに時間重要の通知が届きます。アプリや Webhook の場合と同じ動作です。

通話は 1 チャンネルにつき 1 分に 1 回まで

チャンネルが各購読者に通話をかけるのは 1 分に 1 回までです。その 1 分以内にエージェントがもう一度通話を要求した場合(たとえば再試行を繰り返して抜け出せなくなった場合など)、購読者には代わりに時間重要の通知が届きます。この通知もフォーカスモードを超えて届きます。Webhook とメールトリガーにも同じルールが適用されます。

どちらのフォールバックもエージェントに伝わります。ツールの結果にはすべてのフォールバックが記載されるため、エージェントは電話が鳴らなかったことを把握でき、電話したつもりにならずにその旨をあなたに伝えられます。

エージェントが受け取る結果

notify を呼び出すたびに、エージェント向けの短いテキストの要約と構造化データが返されます。

{
  "notificationTriggered": true,
  "reason": null,
  "requestedUrgency": "calling",
  "recipients": 1,
  "deliveredUrgency": { "normal": 0, "time-sensitive": 1, "calling": 0 },
  "fallbacks": [
    {
      "from": "calling",
      "to": "time-sensitive",
      "reason": "premium-required",
      "recipients": 1
    }
  ]
}
フィールド意味
notificationTriggered通知が送信された場合は true。
reason通知が送信されなかった理由。conditions-not-met(チャンネルの条件に一致しなかった)または no-subscribers(チャンネルに購読者がいない)。通知が送信された場合は null。
requestedUrgencyエージェントが要求した urgency。省略された場合は null。
recipients通知を受け取った購読者の数。
deliveredUrgency各レベルで通知を受け取った購読者の数。
fallbacks要求より低いレベルで受け取った購読者とその理由。premium-required(通話にはプレミアムが必要)、subscriber-setting(購読者自身がチャンネルに設定したレベルの方が低い)、または call-cooldown(このチャンネルが直近 1 分以内にその購読者へすでに通話をかけている)。

パススルーチャンネルとテンプレートチャンネル

MCP サーバーはどちらの種類のチャンネルでも使えます。

  • パススルーチャンネル(デフォルト)は、エージェントが送った title と body をそのまま表示します。
  • テンプレートチャンネル(詳細設定でカスタムテンプレートをオンにしたチャンネル)は、テンプレートから通知を作成します。title、body、link、externalLink、urgency をテンプレート変数として使え、チャンネルの条件も引き続き適用されます。条件に一致しない場合は何も送信されず、エージェントには reason: "conditions-not-met" が返されます。

プロンプトの例

サーバーを接続したら、普段の言葉で通知を頼むだけです。

  • 「テストスイートをすべて実行して、終わったら Echobell で知らせて。」
  • 「決済モジュールをリファクタリングして。私の判断が必要になったら Echobell で時間重要の通知を送って。」
  • 「ステージングにデプロイして。失敗したら電話して、成功したら URL 付きの通常の通知を送って。」
  • 「マイグレーションが終わったら、要約とプルリクエストへのリンクを付けて知らせて。」

習慣にしたい場合は、エージェントの指示ファイル(CLAUDE.md、AGENTS.md、.cursorrules など)に次のような一文を追加しておきましょう。

When a task takes longer than a few minutes, call the Echobell notify tool when it finishes.
Use urgency "calling" only when something is broken and needs me right away.

セキュリティ

  • トークンが認証情報です。 MCP URL(またはトークン)を持っている人は誰でも、チャンネルの購読者に通知を送れます。ただし何かを読み取ったりアカウントを変更したりすることはできず、できるのは通知を送ることだけです。
  • 共有ファイルに含めないでください。 URL 形式を含む設定ファイルはコミットしないでください。プロジェクト単位の設定には、入力プロンプトや環境変数と組み合わせたヘッダー形式を使ってください。
  • トリガートークンをリセットすればアクセスを取り消せます。 アプリでチャンネルを開き、トリガートークンをリセットします。古い MCP URL はすぐに使えなくなり(リクエストには 401 Unauthorized が返されます)、古い Webhook URL も同様に無効になります。エージェントや Webhook の呼び出し元を新しいトークンで更新してください。

制限とエラー

  • レート制限:各トークンが受け付ける MCP リクエストは 1 分あたり最大 120 件です。MCP リクエストには、チャンネルの Webhook リクエストとは別の上限枠があります。
  • 401 Unauthorized:トークンがない、間違っている、またはリセット済みです。

関連情報

  • Webhook — スクリプトや CI、その他のサービスから同じチャンネルをトリガーする
  • 通知タイプ — 通常、時間重要、通話の違い
  • テンプレートと条件 — 通知の内容を整え、絞り込む