MCP
La même API, adressée à un assistant plutôt qu’à un scénario. Un client MCP choisit quoi appeler pendant qu’il tourne, d’après les descriptions des outils — il atteint donc exactement ce qu’atteignent les identifiants derrière lui, et sous chaque outil il y a un appel de l’API publique.
Un seul point de terminaison
Tout passe par POST /v1/mcp. Pas de session à ouvrir ni de flux à tenir : GET et DELETE répondent 405, et chaque message est sa propre requête.
POST https://api.mosaqo.app/v1/mcp
Authorization: Bearer $MOSAQO_KEY
MCP-Protocol-Version: 2026-07-28Les révisions du protocole de 2025-03-26 à 2026-07-28 sont toutes servies. Un client qui commence par initialize obtient la poignée de main attendue ; celui qui déclare sa version à chaque requête est servi ainsi.
Se connecter avec une clé API
La voie la plus rapide, et la bonne pour un outil que vous exploitez vous-même. Toute clé fonctionne comme jeton bearer, et les outils proposés sont réduits aux portées de cette clé.
La plupart des clients acceptent un bloc comme celui-ci :
{
"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" }'Se connecter via OAuth
Pour un connecteur dans l’annuaire de quelqu’un d’autre, où la personne ne manipule jamais de clé. La découverte suit RFC 9728 et RFC 8414, les clients s’enregistrent eux-mêmes via RFC 7591, et chaque autorisation utilise PKCE avec S256.
curl https://api.mosaqo.app/.well-known/oauth-protected-resource
curl https://api.mosaqo.app/.well-known/oauth-authorization-serverUn appel non autorisé indique lui-même où aller et quoi demander :
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"Celui qui approuve est connecté à Mosaqo, choisit l’espace concerné, et ne peut le faire que là où il est propriétaire ou administrateur — la même limite qui décide qui peut émettre une clé API. La déconnexion se fait ensuite dans Bulk & API.
Ce qu’un assistant peut faire
Les portées que vous connaissez déjà, inchangées. Un outil que les identifiants n’autorisent pas n’apparaît pas dans tools/list et ne s’appelle pas en le nommant — la réponse vivante pour toute connexion, c’est donc tools/list lui-même.
| Scope | Autorise |
|---|---|
qr:read | Lister et lire les QR codes, les dossiers et les modèles |
qr:write | Créer, modifier, rediriger, publier, archiver et supprimer |
exports:read | Télécharger les cartes rendues |
analytics:read | Statistiques agrégées et scans individuels |
bulk:write | Créer et lire des tâches en lot |
webhooks:write | Gérer les abonnements aux webhooks |
reviews:read | Lieux, enquêtes et leurs résultats — jamais les réponses elles-mêmes |
Ce qu’il n’atteindra jamais
Ce que les gens ont écrit dans une enquête. reviews:read ouvre vos lieux, vos enquêtes et leurs résultats — les décomptes, les notes, la répartition par question. Les phrases tapées par un visiteur ne sont pas plus rendues ici qu’ailleurs où des identifiants atteignent, pour la raison qui fait que les événements feedback.* portent une note et jamais les mots.
Supprimer un code. La route REST exige une confirmation tapée parce que détruire la redirection d’un code imprimé est irréversible, et ce n’est pas une confirmation qu’un assistant donne à la place de quelqu’un. L’archivage est proposé à la place, et il se défait.
L’écriture est marquée comme telle. Un outil qui modifie quelque chose porte readOnlyHint: false, et l’archivage porte destructiveHint: true — c’est ce qui fait qu’un client s’arrête et demande à une personne avant d’agir.