MCP
Samma API, riktat till en assistent i stället för till ett scenario. En MCP-klient väljer vad den ska anropa medan den kör, utifrån verktygsbeskrivningarna — den når alltså exakt det som dess uppgifter når, och under varje verktyg ligger ett anrop mot det publika API:et.
En enda endpoint
Allt går till POST /v1/mcp. Det finns ingen session att öppna och ingen ström att hålla: GET och DELETE svarar 405, och varje meddelande är sin egen begäran.
POST https://api.mosaqo.app/v1/mcp
Authorization: Bearer $MOSAQO_KEY
MCP-Protocol-Version: 2026-07-28Protokollrevisionerna 2025-03-26 till 2026-07-28 betjänas alla. En klient som börjar med initialize får handskakningen den väntar sig; en som anger sin version i varje begäran betjänas så.
Koppla med en API-nyckel
Den snabbaste vägen, och den rätta för ett verktyg du kör själv. Vilken nyckel som helst fungerar som bearer-token, och de verktyg som erbjuds skärs ned till den nyckelns scopes.
De flesta klienter tar ett block som detta:
{
"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" }'Koppla via OAuth
För en koppling i någon annans katalog, där personen aldrig hanterar en nyckel. Upptäckt följer RFC 9728 och RFC 8414, klienter registrerar sig själva med RFC 7591, och varje auktorisering använder PKCE med S256.
curl https://api.mosaqo.app/.well-known/oauth-protected-resource
curl https://api.mosaqo.app/.well-known/oauth-authorization-serverEtt oauktoriserat anrop talar själv om vart man ska gå och vad man ska be om:
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"Den som godkänner är inloggad i Mosaqo, väljer vilken arbetsyta det gäller och kan bara göra det där hen är ägare eller administratör — samma gräns som avgör vem som får utfärda en API-nyckel. Kopplingen kan brytas efteråt under Bulk & API.
Vad en assistent kan
De scopes du redan känner till, oförändrade. Ett verktyg som uppgifterna inte tillåter finns inte i tools/list och går inte att anropa genom att namnge det — det levande svaret för varje koppling är alltså tools/list självt.
| Scope | Ger rätt till |
|---|---|
qr:read | Lista och läsa QR-koder, mappar och mallar |
qr:write | Skapa, ändra, styra om, publicera, arkivera och radera |
exports:read | Ladda ner renderade kort |
analytics:read | Aggregerad analys och enskilda skanningar |
bulk:write | Skapa och läsa massjobb |
webhooks:write | Hantera webhook-prenumerationer |
reviews:read | Platser, undersökningar och hur de går — aldrig svaren själva |
Vad den aldrig når
Det folk skrev i en undersökning. reviews:read öppnar dina platser, dina undersökningar och hur de går: antalen, betygen, fördelningen per fråga. Meningarna en besökare skrev returneras här lika lite som någon annanstans dit uppgifter når — av samma skäl som feedback.*-händelserna bär ett betyg och aldrig orden.
Att radera en kod. REST-rutten ber om en inskriven bekräftelse eftersom att förstöra omdirigeringen bakom en tryckt kod inte går att ångra, och det är ingen bekräftelse en assistent ger åt någon annan. I stället erbjuds arkivering, och den går att ångra.
Skrivning är märkt som skrivning. Ett verktyg som ändrar något bär readOnlyHint: false, och arkivering bär destructiveHint: true — det är det som får en klient att stanna och fråga en människa innan den kör.