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 에이전트에 연결하면, 에이전트는 Echobell 채널 중 하나로 알림을 보내는 notify 도구 하나를 사용할 수 있게 됩니다.

긴 리팩터링, 테스트 실행, 배포를 맡겨 두고 자리를 비운 다음, 끝나면 알려 달라고 에이전트에게 부탁하세요. 작업이 끝나면 휴대폰에 알림이 오고, 에이전트가 여러분의 결정을 기다릴 때는 긴급 알림이, 심각한 문제가 생기면 전화처럼 벨이 울립니다.

작동 방식

  • https://mcp.echobell.one/mcp에서 실행되는 원격 MCP 서버이며 Streamable HTTP 전송 방식을 사용합니다. 설치할 것이 없습니다. npm 패키지도, npx도, 로컬 프로세스도 필요 없습니다.
  • MCP URL 하나는 채널 하나에 속합니다. 에이전트가 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을 가진 사람은 누구나 채널 구독자에게 알림을 보낼 수 있으니 비밀번호처럼 안전하게 보관하세요. 보안을 참고하세요.

에이전트 설정하기

아래 스니펫은 모두 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>을 입력하고 추가합니다.

이 커넥터는 웹의 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 도구 하나만 제공합니다. 인수를 어떻게 채울지는 에이전트가 여러분의 프롬프트를 보고 정합니다.

인수타입필수설명
titlestring예알림 제목.
bodystring아니요알림 본문.
linkstring (URL)아니요알림을 탭하면 열리는 링크. 풀 리퀘스트, 빌드 로그, 대시보드 등.
urgencystring아니요normal, time-sensitive, calling 중 하나. 생략하면 각 구독자가 고른 수준을 사용합니다. 긴급도를 참고하세요.

긴급도

채널을 구독하는 사람은 모두 앱에서 그 채널의 알림 유형을 고릅니다. 일반, 긴급, 전화 중 하나입니다. 이 선택이 채널이 그 사람에게 도달할 수 있는 가장 높은 수준입니다.

  • 에이전트가 urgency를 생략하면 각 구독자는 자신이 고른 수준으로 알림을 받습니다.
  • 에이전트가 urgency를 보내면 구독자의 수준을 낮출 수만 있고 높일 수는 없습니다. 전화로 구독했다면 "urgency": "normal"은 일반 알림으로 도착합니다. 일반으로 구독했다면 "urgency": "calling"도 일반 알림으로 도착합니다.

덕분에 채널 하나로 모든 상황을 처리할 수 있습니다. 전화로 구독해 두고, 에이전트에게 평소 진행 상황은 normal로 보내고 뭔가 망가졌을 때만 calling을 쓰라고 알려 주세요.

Webhook 요청의 notificationType과 달리, urgency는 사용자 지정 템플릿을 쓰는 채널에서도 적용됩니다.

전화 알림에는 Echobell Premium이 필요합니다

전화 알림은 Echobell Premium 기능입니다. 에이전트가 calling을 요청하면 Premium이 없는 구독자는 대신 긴급 알림을 받습니다. 앱이나 Webhook에서와 같은 동작입니다.

채널당 전화는 1분에 한 번

채널은 각 구독자에게 1분에 최대 한 번만 전화를 겁니다. 에이전트가 그 1분 안에 다시 전화를 요청하면(예를 들어 재시도를 반복하며 멈춰 있는 경우) 구독자는 대신 긴급 알림을 받으며, 이 알림도 집중 모드를 뚫고 전달됩니다. Webhook과 이메일 트리거에도 같은 규칙이 적용됩니다.

에이전트는 두 경우 모두 그 사실을 알게 됩니다. 도구 결과에 모든 대체(fallback) 내역이 담기므로, 에이전트는 휴대폰이 울리지 않았다는 것을 알고 전화했다고 착각하는 대신 그 사실을 여러분에게 알려 줄 수 있습니다.

에이전트가 받는 결과

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(전화 알림에는 Premium이 필요), 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 호출 측을 새 토큰으로 업데이트하세요.

제한과 오류

  • 요청 한도: 토큰마다 1분에 최대 120개의 MCP 요청을 받습니다. MCP 요청은 채널의 Webhook 요청과 별도의 한도를 사용합니다.
  • 401 Unauthorized: 토큰이 없거나, 잘못되었거나, 재설정되었습니다.

관련 문서

  • Webhook — 스크립트, CI, 다른 서비스에서 같은 채널을 트리거하기
  • 알림 유형 — 일반, 긴급, 전화의 차이
  • 템플릿과 조건 — 알림 내용을 다듬고 걸러내기