MCP
To samo API, adresowane do asystenta, a nie do scenariusza. Klient MCP wybiera, co wywołać, w trakcie działania — z opisów narzędzi — więc sięga dokładnie tam, gdzie sięgają jego poświadczenia, a pod każdym narzędziem leży wywołanie publicznego API.
Jeden endpoint
Wszystko idzie na POST /v1/mcp. Nie ma sesji do otwarcia ani strumienia do trzymania: GET i DELETE odpowiadają 405, a każda wiadomość to osobne żądanie.
POST https://api.mosaqo.app/v1/mcp
Authorization: Bearer $MOSAQO_KEY
MCP-Protocol-Version: 2026-07-28Obsługiwane są wszystkie rewizje protokołu od 2025-03-26 do 2026-07-28. Klient zaczynający od initialize dostaje oczekiwany handshake; ten, który podaje wersję w każdym żądaniu, jest obsługiwany tak.
Podłączenie kluczem API
Najszybsza droga i właściwa dla narzędzia, które prowadzisz sam. Każdy klucz działa jako token bearer, a oferowane narzędzia są przycięte do zakresów tego klucza.
Większość klientów przyjmuje taki blok:
{
"mcpServers": {
"mosaqo": {
"type": "http",
"url": "https://api.mosaqo.app/v1/mcp",
"headers": { "Authorization": "Bearer $MOSAQO_KEY" }
}
}
}curl -X POST https://api.mosaqo.app/v1/mcp \
-H "Authorization: Bearer $MOSAQO_KEY" \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/list" \
-d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'Podłączenie przez OAuth
Dla konektora w cudzym katalogu, gdzie człowiek nigdy nie dotyka klucza. Odkrywanie według RFC 9728 i RFC 8414, klienci rejestrują się sami przez RFC 7591, a każda autoryzacja używa PKCE z S256.
curl https://api.mosaqo.app/.well-known/oauth-protected-resource
curl https://api.mosaqo.app/.well-known/oauth-authorization-serverNieautoryzowane wywołanie samo mówi, dokąd iść i o co prosić:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="Mosaqo MCP",
resource_metadata="https://api.mosaqo.app/.well-known/oauth-protected-resource",
scope="qr:read analytics:read reviews:read exports:read"Osoba zatwierdzająca jest zalogowana w Mosaqo, wybiera przestrzeń, której to dotyczy, i może to zrobić tylko tam, gdzie jest właścicielem lub administratorem — ta sama granica, która decyduje, kto wydaje klucz API. Odłączyć można później w Bulk & API.
Co asystent może
Zakresy, które już znasz, bez zmian. Narzędzie, na które poświadczenia nie pozwalają, nie trafia do tools/list i nie da się go wywołać nawet po nazwie — żywą odpowiedzią dla każdego połączenia jest więc samo tools/list.
| Zakres | Pozwala na |
|---|---|
qr:read | Listowanie i odczyt kodów QR, folderów i szablonów |
qr:write | Tworzenie, zmianę, przekierowanie, publikację, archiwizację i usuwanie |
exports:read | Pobieranie wyrenderowanych kart |
analytics:read | Zagregowaną analitykę i pojedyncze skanowania |
bulk:write | Tworzenie i odczyt zadań zbiorczych |
webhooks:write | Zarządzanie subskrypcjami webhooków |
reviews:read | Miejsca, ankiety i to, jak im idzie — nigdy same odpowiedzi |
Czego nigdy nie dosięgnie
Tego, co ludzie napisali w ankiecie. reviews:read otwiera Twoje miejsca, ankiety i to, jak im idzie: liczby, oceny, rozkład odpowiedzi na każde pytanie. Zdania wpisane przez odwiedzającego nie są tu zwracane bardziej niż gdziekolwiek indziej, dokąd sięgają poświadczenia — z tego samego powodu, dla którego zdarzenia feedback.* niosą ocenę, a nigdy słowa.
Usunięcie kodu. Trasa REST wymaga wpisanego potwierdzenia, bo zniszczenia przekierowania za wydrukowanym kodem nie da się cofnąć, a takiego potwierdzenia asystent nie daje za kogoś. Zamiast tego jest archiwizacja, i ta się cofa.
Zapis jest oznaczony jako zapis. Narzędzie, które coś zmienia, niesie readOnlyHint: false, a archiwizacja destructiveHint: true — i to sprawia, że klient zatrzymuje się i pyta człowieka, zanim zadziała.