Gå til indhold

MCP

Samme API, henvendt til en assistent i stedet for til et scenarie. En MCP-klient vælger, hvad den kalder, mens den kører, ud fra værktøjsbeskrivelserne — den når altså præcis det, dens legitimationsoplysninger når, og under hvert værktøj ligger et kald til det offentlige API.

Ét endpoint

Alt går til POST /v1/mcp. Der er ingen session at åbne og ingen strøm at holde: GET og DELETE svarer 405, og hver besked er sin egen forespørgsel.

POST https://api.mosaqo.app/v1/mcp
Authorization: Bearer $MOSAQO_KEY
MCP-Protocol-Version: 2026-07-28

Protokolrevisionerne 2025-03-26 til 2026-07-28 betjenes alle. En klient, der begynder med initialize, får det håndtryk, den venter; en, der angiver sin version ved hver forespørgsel, betjenes sådan.

Forbind med en API-nøgle

Den hurtigste vej, og den rigtige til et værktøj, du selv kører. Enhver nøgle virker som bearer-token, og de tilbudte værktøjer skæres ned til den nøgles scopes.

De fleste klienter tager en blok som denne:

{
  "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" }'

Forbind via OAuth

Til en forbindelse i en andens katalog, hvor personen aldrig rører en nøgle. Opdagelse følger RFC 9728 og RFC 8414, klienter registrerer sig selv med RFC 7591, og hver autorisation bruger PKCE med S256.

curl https://api.mosaqo.app/.well-known/oauth-protected-resource
curl https://api.mosaqo.app/.well-known/oauth-authorization-server

Et uautoriseret kald siger selv, hvor man skal gå hen, og hvad man skal bede 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, der godkender, er logget ind i Mosaqo, vælger hvilket arbejdsrum det gælder, og kan kun gøre det, hvor vedkommende er ejer eller administrator — samme grænse som afgør, hvem der må udstede en API-nøgle. Forbindelsen kan afbrydes bagefter under Bulk & API.

Hvad en assistent kan

De scopes du allerede kender, uændret. Et værktøj, legitimationsoplysningerne ikke tillader, står ikke i tools/list og kan heller ikke kaldes ved navn — det levende svar for enhver forbindelse er altså tools/list selv.

ScopeGiver ret til
qr:readAt liste og læse QR-koder, mapper og skabeloner
qr:writeAt oprette, ændre, omdirigere, udgive, arkivere og slette
exports:readAt hente renderede kort
analytics:readSamlet analyse og enkelte scanninger
bulk:writeAt oprette og læse masseopgaver
webhooks:writeAt administrere webhook-abonnementer
reviews:readSteder, undersøgelser og hvordan de går — aldrig selve svarene

Hvad den aldrig når

Det folk skrev i en undersøgelse. reviews:read åbner dine steder, dine undersøgelser og hvordan de går: tallene, karaktererne, fordelingen pr. spørgsmål. De sætninger, en besøgende skrev, returneres her lige så lidt som noget andet sted, legitimationsoplysninger når — af samme grund som feedback.*-hændelserne bærer en karakter og aldrig ordene.

At slette en kode. REST-ruten beder om en indtastet bekræftelse, fordi ødelæggelsen af omdirigeringen bag en trykt kode ikke kan gøres om, og det er ikke en bekræftelse, en assistent giver på nogens vegne. I stedet tilbydes arkivering, og den kan gøres om.

Skrivning er markeret som skrivning. Et værktøj, der ændrer noget, bærer readOnlyHint: false, og arkivering bærer destructiveHint: true — det er det, der får en klient til at stoppe og spørge et menneske, før den kører.