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

# AI エージェント向け MCP サーバー

Echobell は公式の [Model Context Protocol](https://modelcontextprotocol.io)（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` を呼び出すと、そのチャンネルの購読者全員に、それぞれが選んだ[通知タイプ](/docs/notification)で通知が届きます。
- 認証情報はチャンネルの**トリガートークン**です。チャンネルの Webhook URL の末尾にあるトークンと同じものです。MCP サーバーはチャンネルの [Webhook](/docs/webhook) と同じように動作し、エージェントが呼び出し方を理解できるツールとして提供されます。

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

## 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>
```

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

## エージェントを設定する

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

### Claude Code

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

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

### Codex

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

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

### Cursor

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

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

### VS Code（GitHub Copilot）

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

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

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

### Windsurf

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

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

### Gemini CLI

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

```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 の場合：

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

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

```json
{
  "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 つだけです。引数の内容は、あなたのプロンプトをもとにエージェントが決めます。

| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
| `title` | string | はい | 通知のタイトル。 |
| `body` | string | いいえ | 通知の本文。 |
| `link` | string (URL) | いいえ | 通知をタップしたときに開くリンク。プルリクエスト、ビルドログ、ダッシュボードなど。 |
| `urgency` | string | いいえ | `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` を呼び出すたびに、エージェント向けの短いテキストの要約と構造化データが返されます。

```json
{
  "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`（チャンネルの[条件](/docs/conditions)に一致しなかった）または `no-subscribers`（チャンネルに購読者がいない）。通知が送信された場合は `null`。 |
| `requestedUrgency` | エージェントが要求した `urgency`。省略された場合は `null`。 |
| `recipients` | 通知を受け取った購読者の数。 |
| `deliveredUrgency` | 各レベルで通知を受け取った購読者の数。 |
| `fallbacks` | 要求より低いレベルで受け取った購読者とその理由。`premium-required`（通話にはプレミアムが必要）、`subscriber-setting`（購読者自身がチャンネルに設定したレベルの方が低い）、または `call-cooldown`（このチャンネルが直近 1 分以内にその購読者へすでに通話をかけている）。 |

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

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

- **パススルーチャンネル**（デフォルト）は、エージェントが送った `title` と `body` をそのまま表示します。
- **テンプレートチャンネル**（**詳細設定**で**カスタムテンプレート**をオンにしたチャンネル）は、[テンプレート](/docs/template)から通知を作成します。`title`、`body`、`link`、`externalLink`、`urgency` をテンプレート変数として使え、チャンネルの[条件](/docs/conditions)も引き続き適用されます。条件に一致しない場合は何も送信されず、エージェントには `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](/docs/webhook) — スクリプトや CI、その他のサービスから同じチャンネルをトリガーする
- [通知タイプ](/docs/notification) — 通常、時間重要、通話の違い
- [テンプレート](/docs/template)と[条件](/docs/conditions) — 通知の内容を整え、絞り込む
