---
title: "Serwer MCP - agenci AI wyślą Ci powiadomienie lub zadzwonią"
sidebarTitle: Serwer MCP
description: "Połącz Claude Code, Codex, Cursor, ChatGPT i innych agentów AI z oficjalnym serwerem MCP Echobell, by dostawać powiadomienia push lub połączenia."
---

# Serwer MCP dla agentów AI

Echobell udostępnia oficjalny serwer [Model Context Protocol](https://modelcontextprotocol.io) (MCP). Podłącz go do swojego agenta AI — Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude, ChatGPT albo dowolnego innego klienta MCP — a agent dostanie jedno narzędzie, `notify`, które wysyła powiadomienie przez jeden z Twoich kanałów Echobell.

Uruchom długi refaktoring, testy albo wdrożenie, odejdź od komputera i poproś agenta, żeby dał znać, gdy skończy. Telefon zawibruje, gdy praca dobiegnie końca, pokaże alert czasowo krytyczny, gdy agent będzie Cię potrzebował, albo zadzwoni jak przy połączeniu, gdy coś pójdzie naprawdę źle.

## Jak to działa

- To **zdalny** serwer MCP pod adresem `https://mcp.echobell.one/mcp`, korzystający z transportu Streamable HTTP. Nie trzeba niczego instalować: żadnego pakietu npm, żadnego `npx`, żadnego lokalnego procesu.
- Każdy adres URL MCP należy do **jednego kanału**. Gdy agent wywoła `notify`, powiadomienie dostaje każdy subskrybent tego kanału, każdy z [typem powiadomień](/docs/notification), który sam wybrał.
- Poświadczeniem jest **token wyzwalacza** kanału — ten sam token, którym kończy się adres URL webhooka kanału. Serwer MCP działa jak [webhook](/docs/webhook) kanału, tyle że w postaci narzędzia, które agent potrafi wywołać.

<Callout type="info">
  Utwórz osobny kanał dla swoich agentów, na przykład „AI Agents”, i zasubskrybuj
  go z typem **Połączenie**. Agenci będą wtedy mogli wybrać dowolny poziom aż do
  połączenia, a kanał możesz udostępnić współpracownikom, którzy chcą dostawać
  te same alerty.
</Callout>

## Zdobądź adres URL MCP

### Z aplikacji

1. Otwórz aplikację Echobell i stuknij kanał, którego ma używać agent.
2. W szczegółach kanału znajdź sekcję **Połącz agenta AI**.
3. Skopiuj **adres URL serwera MCP** albo gotowy fragment konfiguracji dla swojego agenta.

### Z adresu URL webhooka

Adres URL MCP używa tego samego tokenu co adres URL webhooka kanału. Weź token z końca adresu URL webhooka i wstaw go po `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">
  Adres URL MCP zawiera token wyzwalacza Twojego kanału. Każdy, kto go ma, może
  wysyłać powiadomienia do subskrybentów kanału, więc chroń go jak hasło. Zobacz
  [Bezpieczeństwo](#bezpieczeństwo).
</Callout>

## Skonfiguruj agenta

Wszystkie poniższe fragmenty używają wariantu z adresem URL. Zastąp `<channel-token>` tokenem wyzwalacza swojego kanału albo wklej fragment z aplikacji, w którym token jest już uzupełniony.

### Claude Code

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

Dodaj `--scope user`, aby serwer był dostępny we wszystkich projektach, a nie tylko w bieżącym.

### Codex

Dodaj to do `~/.codex/config.toml`:

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

### Cursor

Dodaj to do `~/.cursor/mcp.json` albo do `.cursor/mcp.json` w projekcie:

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

### VS Code (GitHub Copilot)

Dodaj to do `.vscode/mcp.json` w swoim workspace, a potem korzystaj z narzędzia w Copilot Chat w trybie agenta:

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

Jeśli `.vscode/mcp.json` trafia do repozytorium, użyj zamiast tego [wariantu z nagłówkiem i monitem o dane](#wariant-z-nagłówkiem), żeby token nie znalazł się w pliku.

### Windsurf

Dodaj to do `~/.codeium/windsurf/mcp_config.json`:

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

### Gemini CLI

Dodaj to do `~/.gemini/settings.json`:

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

### Claude Desktop i claude.ai

1. Otwórz **Settings → Connectors**.
2. Wybierz **Add custom connector**.
3. Wpisz nazwę `Echobell` i adres URL `https://mcp.echobell.one/mcp/<channel-token>`, a następnie dodaj konektor.

Konektor jest dostępny w Claude w przeglądarce i w aplikacji desktopowej.

### ChatGPT

1. Włącz tryb deweloperski w ustawieniach ChatGPT.
2. Otwórz **Settings → Connectors** i wybierz **Create**.
3. Wpisz adres URL `https://mcp.echobell.one/mcp/<channel-token>` i ustaw uwierzytelnianie na **No authentication** — poświadczeniem jest token w adresie URL.

### Inne klienty MCP

Działa każdy klient obsługujący transport Streamable HTTP. Podaj mu adres URL `https://mcp.echobell.one/mcp/<channel-token>` albo użyj opisanego niżej wariantu z nagłówkiem.

### Wariant z nagłówkiem

Zamiast umieszczać token w adresie URL, możesz wysłać go w nagłówku `Authorization`. Oba warianty działają tak samo.

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

W Claude Code:

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

W VS Code monit o dane (input) trzyma token poza `.vscode/mcp.json`, więc plik można bezpiecznie commitować. VS Code poprosi o token przy pierwszym uruchomieniu serwera i zapisze go w bezpiecznym miejscu:

```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}"
      }
    }
  }
}
```

## Narzędzie `notify`

Serwer udostępnia jedno narzędzie, `notify`. To agent decyduje, jak je wypełnić na podstawie Twojego promptu.

| Argument | Typ | Wymagany | Opis |
|---|---|---|---|
| `title` | string | Tak | Tytuł powiadomienia. |
| `body` | string | Nie | Treść powiadomienia. |
| `link` | string (URL) | Nie | Link otwierany po stuknięciu powiadomienia, na przykład pull request, log builda albo dashboard. |
| `urgency` | string | Nie | `normal`, `time-sensitive` lub `calling`. Pomiń, aby użyć poziomu wybranego przez każdego subskrybenta. Zobacz [Pilność](#pilność). |

## Pilność

Każdy, kto subskrybuje kanał, wybiera dla niego w aplikacji typ powiadomień: Standardowe, Czasowo krytyczne lub Połączenie. Ten wybór to **najwyższy** poziom, na jakim kanał może do niego dotrzeć.

- Gdy agent pomija `urgency`, każdy subskrybent dostaje poziom, który wybrał.
- Gdy agent wysyła `urgency`, może tylko **obniżyć** poziom subskrybenta, nigdy go nie podnosi. Jeśli subskrybujesz z typem Połączenie, `"urgency": "normal"` dotrze jako zwykłe powiadomienie. Jeśli subskrybujesz z typem Standardowe, `"urgency": "calling"` i tak dotrze jako zwykłe powiadomienie.

Dzięki temu jeden kanał wystarcza do wszystkiego. Zasubskrybuj go z typem Połączenie i poproś agenta, by rutynowe informacje wysyłał jako `normal`, a `calling` używał tylko wtedy, gdy coś jest zepsute.

W przeciwieństwie do `notificationType` w żądaniach webhooka, `urgency` działa także w kanałach z własnym szablonem.

### Połączenia wymagają Echobell Premium

Powiadomienia w formie połączenia to funkcja Echobell Premium. Gdy agent poprosi o `calling`, subskrybent bez Premium dostanie zamiast tego powiadomienie **czasowo krytyczne** (time-sensitive) — tak samo jak w przypadku aplikacji i webhooków.

### Jedno połączenie na minutę w każdym kanale

Kanał dzwoni do każdego subskrybenta najwyżej raz na minutę. Jeśli agent poprosi o kolejne połączenie w ciągu tej minuty — na przykład dlatego, że utknął na ponawianiu prób — subskrybent dostanie zamiast tego powiadomienie **czasowo krytyczne**, które nadal przebija się przez tryby Skupienia. Webhooki i wyzwalacze e-mail działają według tej samej zasady.

Agent dowie się o obu przypadkach. Wynik narzędzia wymienia każde obniżenie poziomu, więc agent wie, że telefon nie zadzwonił, i może Ci to przekazać, zamiast zakładać, że do Ciebie dzwonił.

## Co dostaje agent

Każde wywołanie `notify` zwraca krótkie podsumowanie tekstowe dla agenta oraz dane strukturalne:

```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
    }
  ]
}
```

| Pole | Znaczenie |
|---|---|
| `notificationTriggered` | `true`, gdy powiadomienie zostało wysłane. |
| `reason` | Dlaczego nic nie wysłano: `conditions-not-met` ([warunki](/docs/conditions) kanału nie zostały spełnione) albo `no-subscribers` (nikt nie subskrybuje kanału). `null`, gdy powiadomienie zostało wysłane. |
| `requestedUrgency` | `urgency`, o którą poprosił agent, albo `null`, jeśli ją pominął. |
| `recipients` | Ilu subskrybentów otrzymało powiadomienie. |
| `deliveredUrgency` | Ilu subskrybentów otrzymało każdy z poziomów. |
| `fallbacks` | Subskrybenci, którzy dostali niższy poziom niż żądany, wraz z powodem: `premium-required` (połączenia wymagają Premium), `subscriber-setting` (poziom, który subskrybent sam wybrał dla kanału, jest niższy) albo `call-cooldown` (kanał dzwonił już do tego subskrybenta w ciągu ostatniej minuty). |

## Kanały przekazujące i kanały z szablonem

Serwer MCP działa z oboma rodzajami kanałów:

- **Kanały przekazujące** (domyślne) wyświetlają `title` i `body` dokładnie tak, jak wysłał je agent.
- **Kanały z szablonem** (z włączoną opcją **Własny szablon** w sekcji **Ustawienia zaawansowane**) budują powiadomienie z Twoich [szablonów](/docs/template). `title`, `body`, `link`, `externalLink` i `urgency` są dostępne jako zmienne szablonu, a [warunki](/docs/conditions) kanału nadal obowiązują. Gdy warunki nie są spełnione, nic nie zostaje wysłane, a agent dostaje `reason: "conditions-not-met"`.

## Przykładowe prompty

Po podłączeniu serwera proś o powiadomienia zwykłym językiem:

- „Uruchom cały zestaw testów i powiadom mnie przez Echobell, gdy skończysz.”
- „Zrefaktoryzuj moduł płatności. Wyślij mi czasowo krytyczny alert Echobell, jeśli będziesz potrzebować mojej decyzji.”
- „Wdróż na staging. Zadzwoń, jeśli wdrożenie się nie powiedzie, a jeśli się uda, wyślij zwykłe powiadomienie z adresem URL.”
- „Gdy migracja się zakończy, powiadom mnie z podsumowaniem i linkiem do pull requesta.”

Żeby weszło to w nawyk, dodaj taką linijkę do pliku z instrukcjami agenta (`CLAUDE.md`, `AGENTS.md`, `.cursorrules` itp.):

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

## Bezpieczeństwo

- **Token jest poświadczeniem.** Kto ma adres URL MCP (albo sam token), może wysyłać powiadomienia do subskrybentów kanału. Nie może niczego odczytać ani zmienić w Twoim koncie — jedyne, co może zrobić, to wysłać powiadomienie.
- **Nie umieszczaj go we współdzielonych plikach.** Nie commituj pliku konfiguracyjnego, który zawiera wariant z adresem URL. W konfiguracji na poziomie projektu używaj [wariantu z nagłówkiem](#wariant-z-nagłówkiem) z monitem o dane albo zmienną środowiskową.
- **Odbierz dostęp, resetując token wyzwalacza.** Otwórz kanał w aplikacji i zresetuj jego token wyzwalacza. Stary adres URL MCP natychmiast przestaje działać (żądania dostają `401 Unauthorized`), podobnie jak stary adres URL webhooka. Zaktualizuj agentów i usługi wywołujące webhook nowym tokenem.

## Limity i błędy

- **Limit żądań**: każdy token przyjmuje do 120 żądań MCP na minutę. Żądania MCP mają własną pulę, niezależną od żądań do webhooka kanału.
- **401 Unauthorized**: brak tokenu, token jest nieprawidłowy albo został zresetowany.

## Powiązane

- [Webhooki](/docs/webhook) — wyzwalaj ten sam kanał ze skryptów, CI i innych usług
- [Typy powiadomień](/docs/notification) — czym różnią się Standardowe, Czasowo krytyczne i Połączenie
- [Szablony](/docs/template) i [Warunki](/docs/conditions) — kształtuj i filtruj powiadomienia
