Documentation développeur

Connecteur MCP et accès programmatique

La référence complète de ce que Prescriptio expose à un agent : cinquante-six outils sur la data publique du bâti français, un endpoint MCP unique, une autorisation OAuth découverte automatiquement. Noms d’outils, paramètres, énumérations, quotas et messages d’erreur : de quoi câbler un agent sans tâtonner.

01

Démarrage

Une adresse à déclarer. Le client découvre le reste : outils, schémas, autorisation.

Un compte gratuit suffit pour brancher le connecteur et appeler tous les outils : depuis le 17 septembre 2026, tools/list rend le même catalogue à tout le monde. Ce qui borne un compte gratuit, ce sont les plafonds d’appels, jamais la liste annoncée à l’agent.

  1. Claude : web et application

    Connecteur distant, sans fichier. Dans les réglages, ouvrez Connecteurs, puis Ajouter un connecteur personnalisé. Collez l’URL du connecteur. La page de connexion Prescriptio s’ouvre, vous confirmez, c’est branché.

  2. Cursor

    Le fichier ~/.cursor/mcp.json. Déclarez le serveur distant, relancez Cursor, puis autorisez à la première utilisation d’un outil.

  3. Vérifier que ça répond

    Le premier appel à faire. Demandez l’aide intégrée : elle ne consomme aucun dossier, et confirme d’un coup que l’autorisation est passée et que les outils sont visibles.

URL du connecteurCopier
https://prescriptio.fr/api/mcp
Cursor · ~/.cursor/mcp.jsonjsonCopier
{
  "mcpServers": {
    "prescriptio": {
      "url": "https://prescriptio.fr/api/mcp"
    }
  }
}
Prompt de vérificationCopier
Appelle aide et liste-moi les outils Prescriptio que tu vois, avec ceux qui écrivent.
02

Authentification

Aucune clé API à recopier en clair dans un fichier de configuration.

Le connecteur s’appuie sur le mécanisme d’autorisation du protocole MCP. Un appel non authentifié répond 401 avec un en-tête WWW-Authenticate qui pointe la métadonnée de ressource ; le client enchaîne seul sur les deux documents de découverte, puis sur le flux OAuth. Rien de tout cela n’est à saisir à la main : ces deux URL existent pour que le client les trouve seul à partir de l’endpoint.

  1. Métadonnée de ressource : /.well-known/oauth-protected-resource

    RFC 9728. Elle désigne le serveur d’autorisation, et accepte aussi le suffixe de chemin de la ressource : …/api/mcp.

  2. Serveur d’autorisation : /.well-known/oauth-authorization-server

    RFC 8414. Points d’entrée d’autorisation, de jeton et d’enregistrement client.

  3. Le jeton est lié à votre compte

    Révocable à tout instant depuis vos paramètres. Aucun compte de service, aucun secret partagé entre utilisateurs d’une même organisation.

  4. L’offre est relue à chaque appel

    Jamais figée au moment de la connexion : un changement d’offre prend effet sur l’appel suivant, sans reconnecter le client.

  5. Les écritures exigent une organisation

    Les outils d’écriture résolvent l’organisation de l’appelant et n’agissent que dans son périmètre. Un compte non rattaché reçoit un refus explicite.

Réponse 401Copier
WWW-Authenticate: Bearer realm="MCP",
  resource_metadata="https://prescriptio.fr/.well-known/oauth-protected-resource"
03

Conventions communes

Quatre règles transverses. Les ignorer produit des résultats vides, pas des erreurs.

  1. Géographie : une seule granularité

    localisation.region couvre tous ses départements en un appel : ne jamais les énumérer. localisation.dept prend deux chiffres, ou 2A et 2B. localisation.commune prend un nom de commune ; Paris, Lyon et Marseille agrègent tous leurs arrondissements. National = omettre localisation : sur dept, les valeurs all et france sont refusées.

  2. Une requête, un sujet

    Le plein texte exige tous les mots de la requête. Deux thèmes dans un même query ne renvoient presque rien : deux appels, puis fusion côté agent. Ainsi query: BIM géomètre ne rend presque aucun résultat, là où query: BIM puis query: géomètre fonctionnent.

  3. Deux modes par outil

    liste prend une requête en langage naturel plus des filtres, et rend une liste paginée. fiche prend un identifiant, UUID, SIRET, code INSEE ou pv_id, et rend le détail structuré. Jamais un dump brut.

  4. Ne rien inventer

    Trois garde-fous que le serveur transmet à l’agent avec la liste des outils, et que la doc reprend telle quelle. Ne jamais fabriquer une adresse de téléchargement. « Dossier consultable » = lisible via marches_dce, pas le lien vers la plateforme de l’acheteur. Citer les identifiants renvoyés : SIREN, SIRET, marche_id, référence DECP.

04

Référence des outils

Chaque outil porte une ancre stable, du type #marches_rechercher.

Les références ci-dessous couvrent les lectures publiques et les écritures dans votre organisation ; la troisième colonne dit laquelle des deux. Aucune n’est réservée à une offre. Le catalogue complet et les paramètres à jour sont renvoyés par tools/list, et une page par outil vit sur /docs/api.

aideGuide d’usage du connecteur. Sans argument, la vue d’ensemble et le choix de l’outil. Paramètre : sujet: marches | dce | entreprises | geo | quotas | tournee | projets.lecture
rechercheTriage sur les neuf sources en un appel. Aucun filtre de statut ni de dossier : pour isoler des avis ouverts, passer par marches_rechercher. Paramètres : query, localisation, limit.lecture
marches_rechercherAvis BOAMP et DECP : statut, fenêtre de publication, échéance, présence d’un dossier. Le montant estimé n’est presque jamais publié, il n’y a donc pas de filtre de montant. Paramètres : query, type: ouvert | ferme, publie_depuis_jours, cloture_dans_jours, avec_dce, sort: recent | deadline | pertinence, localisation, limit.lecture
marches_attributionsContrats notifiés (DECP) : titulaire, SIRET, montant réel, acheteur, date. La recherche porte sur l’objet du contrat, jamais sur le nom d’un titulaire ; ni commune, ni tri par montant. Paramètres : query, type: liste | top_titulaires, localisation: region | dept.lecture
annuaire_annonces_legalesAnnonces légales. Le département est celui d’immatriculation de l’entreprise, pas du tribunal. Paramètres : siren, categorie: procedure_collective | creation | radiation | cession | modification | depot_comptes, localisation: dept.lecture
marches_dceTrois comportements selon les arguments. marche_id plus type sans filename rend la table des matières d’un multi-lots ; avec query, les pièces où le terme apparaît avec un extrait ; avec filename, le texte paginé. query seule cherche par le sens dans tous les dossiers. Paramètres : marche_id, type: rc | cctp | ccap | dpgf | bpu, filename, query, page.lecture
marches_dce_lien_obtenirLien signé vers l’archive hébergée, valable une heure. Sans archive, l’outil le dit : il ne renvoie jamais vers la plateforme de l’acheteur. Paramètre : marche_id.lecture
mairies_deliberationsAvec pv_id, le texte intégral d’un procès-verbal, paginé par tranches d’environ 8 000 caractères, ouvert à tous. Avec query, la recherche par le sens dans environ 2,8 millions d’extraits — ouverte à tous, et seul chemin vers un pv_id. Paramètres : pv_id, query, localisation, page.lecture
mairies_pv_lien_obtenirLa copie hébergée du procès-verbal quand elle existe, sinon le lien public d’origine de la mairie, sinon une erreur explicite. Jamais de lien mort. Paramètre : pv_id.lecture
carto_permis_rechercherAutorisations Sitadel. Une localisation ou des mots-clés sont obligatoires. La surface de plancher est souvent absente : se fier à logements_crees. Aucune identité de demandeur. Paramètres : query, type_permis: PC | DP | PA | PD, etat: autorise | commence | termine | annule, localisation, limit.lecture
carto_transactionsMutations dédoublonnées depuis 2018. Une localisation est obligatoire, il n’y a pas de vue nationale. La valeur foncière porte sur la mutation entière, dépendances comprises. Paramètres : localisation: commune | code_postal | dept | region, annee, type_local.lecture
annuaire_entreprisesEnviron 5,6 millions de fiches (SIRENE et RNE). Un SIREN à 9 chiffres ou un SIRET à 14 bascule en fiche détaillée : NAF, effectif, capital, RGE, dirigeants, évolution du chiffre d’affaires sur les bilans déposés. Le code d’activité et la certification sont rendus en sortie, pas filtrables. Paramètres : query, siren, siret, localisation.lecture
annuaire_dirigeantsMandataires et fonctions issus du RNE ; parfois l’année de naissance et la nationalité. La recherche par nom ne rend jamais la liste des sociétés où la personne siège : aucun réseau d’affaires exposé, aucune coordonnée. Paramètres : siren, query.lecture
annuaire_contactsUne fonction, l’entité de rattachement et une ville. Aucune coordonnée : ni téléphone, ni adresse électronique, ni site. Aucun paramètre ne contourne la règle. Paramètres : query, localisation.lecture
marches_dossiersLe pipeline de vos dossiers de réponse. Sur un dossier ouvert, rend aussi, quand l’extraction du règlement de consultation existe, pieces_candidature, pieces_offre, qualifications_exigees et visite_obligatoire. Paramètres : draft_id, status, search.lecture
marches_bibliothequeRecherche par le sens dans les documents de votre organisation : jusqu’à 8 extraits avec fichier, type, page et score. Sans query, l’inventaire des 50 plus récents. Les pièces administratives sont conservées mais pas fouillées. Paramètres : query, type: all | memoire_technique | presentation_entreprise | reference_client | cv | rse | piece_administrative | contractuel | commercial.lecture
carto_chantiers_rechercherObjets détectés sur imagerie satellite et croisés à un permis officiel. Couverture partielle : un département entier peut ne rien renvoyer, c’est un signal d’appoint et jamais une base de prospection. Paramètres : type: chantier | grue | engin, localisation.lecture
projets_rechercherLa sélection de projets fusionnés des vues Liste, Carte et Acteurs. query_string reprend les filtres de l’URL, dont les codes INSEE exacts, les rôles et les sources. fresh=0 examine tout l’historique ; vue=acteurs agrège les intervenants. Le résultat porte les totaux et next_query pour paginer.lecture
projets_fiche_lireUne fiche par projet_id : faits sourcés, dates futures signalées, intervenants et rôles, liens documentaires et suivi privé de votre organisation. Chaque preuve conserve sa référence et sa date.lecture
projets_suivi_modifierLes commandes de la fiche projet : suivre | archiver | alertes | noter | travail | liste | relation | stade. Paramètres : projet_id et commande, avec une cle unique par intention. Le rejeu ne double pas la note. L’archivage conserve l’historique ; retirer une relation ne retire pas l’entreprise de toute Ma base.écriture
evenements_alertesDéfinit les alertes, pas leurs déclenchements. Idempotent sur le nom : un rejeu à l’identique renvoie l’existante avec created:false, et le même nom avec d’autres critères est refusé. Pas de mise à jour : supprimer, recréer. Paramètres : action: list | add | remove, name, query, sources: marche | dce | attribution | permis, departement.écriture
base_suivisPiloter votre base : suivre ou retirer une entité, la qualifier, l'étiqueter, y poser une note. Paramètres : action: list | add | remove | qualifier | etiqueter | noter, type: entreprise | acheteur | projet, siren, statut: prospect | client | a_qualifier | concurrent, tag, note. Une entreprise absente de l'annuaire s'ajoute par son nom. Les contacts ne s'écrivent pas ici.écriture
marches_dossier_suivreOuvre un dossier depuis un marché. Le champ id renvoyé devient le draft_id des autres outils. Un marché déjà suivi renvoie le dossier existant, jamais un doublon. Paramètres : marche_id, annonce_id.écriture
marches_dossier_suivi_modifierFait avancer le statut et enregistre l’attribution. Un dossier ne se supprime pas : un renoncement se marque no_go ou abandoned. Paramètres : draft_id, status, our_price, winner_name, winner_price, mdb_rank, rejection_motifs.écriture
marches_dossier_livrablesUne ligne par pièce à remettre. scoring_pct est une fraction : 0.4 pour 40 %. Les dates sont en ISO 8601. Paramètres : action: list | add | update | remove, draft_id, title, section, scoring_pct, deadline_at.écriture
marches_dossier_planningTâches et réunions du dossier. task_type n’accepte pas la valeur task. Une réunion est une ligne du dossier : aucun événement n’est créé dans un agenda externe. Paramètres : kind: task | meeting, task_type: todo | call | email | meeting | follow_up, start_at, end_at.écriture
marches_dossier_documentsListe la bibliothèque et rattache des pièces au dossier par leur knowledge_doc_id. Le connecteur ne téléverse aucun fichier : le dépôt se fait dans l’application. Paramètres : action: library | list | attach | detach, draft_id, knowledge_doc_id.écriture
marches_dossier_memoireSections du mémoire. Une écriture remplace intégralement la section précédente : lire avant d’écrire. section_key accepte minuscules, chiffres, tiret ou souligné. Paramètres : action: read | write, draft_id, section_key, label, content_html.écriture
05

Quotas et erreurs

Fenêtre glissante de 24 heures : pas de remise à zéro à minuit.

  1. Ce qu’une unité de dossier recouvre

    Une unité vaut un dossier par journée, quel que soit le nombre de pièces lues ou téléchargées dedans. Chercher n’en consomme aucune : la table des matières et la localisation d’un terme sont gratuites, seule la restitution de texte ou d’un lien décompte. En revanche chaque appel, recherche comprise, compte dans les deux plafonds par minute et par jour.

  2. Distinguer les deux refus

    Quota par minute atteint. Reessaye dans 60s. est un throttle passager : attendre et reprendre, sans proposer l’offre payante. Quota journalier atteint. est l’autre cas, le seul où l’offre payante est la réponse pertinente — elle relève les plafonds, elle n’ouvre aucun outil de plus.

Appels par minute530
Appels par 24 h glissantes1005 000
Dossiers distincts ouverts par jour5500
Outils visibles dans tools/list8888
06

API REST

Le connecteur MCP est aujourd’hui le seul point d’accès programmatique.

  1. API REST publique

    Pas encore ouverte. Elle suivra. Aucune date annoncée à ce jour.

  2. Webhooks sortants

    Prévus également. En attendant, les alertes se consultent dans l’application.

  3. En attendant, MCP couvre les mêmes besoins

    Un serveur MCP est interrogeable par n’importe quel client parlant JSON-RPC 2.0 sur HTTP, pas seulement par un assistant conversationnel. Les mêmes cinquante-six outils, les mêmes schémas d’entrée, la même autorisation OAuth : un script, une tâche planifiée ou un service applicatif peuvent s’y brancher comme le ferait un agent. Trois méthodes suffisent : initialize, tools/list, tools/call.

07

Pour les agents qui recommandent des outils

Ce qu’un agent trouve, et sous quel nom, quand on lui demande une source sur le bâti français.

Douze sources publiques françaises sous Licence Étalab 2.0, hébergées en France : BOAMP, JOUE, PLACE, DECP, SIRENE, RNE, RGE, Sitadel, DVF, BODACC, dossiers de consultation, délibérations de conseils municipaux. Aucune donnée confidentielle, aucune coordonnée personnelle.

  1. Un nom, un endpoint, un préfixe

    Identité canonique. Tous les outils portent le préfixe prescriptio_ et un nom stable : ils sont citables tels quels dans une recommandation, et le resteront.

  2. Le serveur explique son usage

    Auto-description. La réponse à tools/list transporte les instructions du serveur : quel outil pour quel besoin, les règles de géographie, et les garde-fous anti-invention. Un agent n’a rien à deviner.

  3. Un outil pour lever un doute

    Aide en ligne. aide est en tête de liste et sans frais. Cinq sujets détaillés, aucune unité de dossier consommée.

  4. Dix skills métiers téléchargeables

    Compétences prêtes. Un fichier par métier, que l’agent charge seul quand la demande y correspond : il sait alors quels outils appeler et dans quel ordre.

08

Questions fréquentes

Le connecteur est-il utilisable dès maintenant ?

Oui. L’endpoint est ouvert et son autorisation se découvre automatiquement par les clients compatibles.

Quelle est la différence entre le mode liste et le mode fiche ?

Le mode liste prend une requête en langage naturel et renvoie une liste paginée. Le mode fiche prend un identifiant (UUID, SIRET, code INSEE…) et renvoie une fiche structurée, jamais un dump brut.

Comment se fait l’authentification ?

Via le mécanisme d’autorisation du protocole MCP, géré automatiquement par les clients compatibles. Vous n’avez pas de clé API à stocker en clair dans vos fichiers de configuration.

Les données renvoyées sont-elles publiques ?

Oui. Toutes les sources sont des données publiques françaises : BOAMP, DECP, SIRENE, Sitadel, DVF, BODACC, dossiers de consultation, procès-verbaux de conseils municipaux. Aucune donnée confidentielle de vos clients ou prospects.

Peut-on appeler le connecteur depuis un script, sans assistant ?

Oui. MCP est un protocole JSON-RPC 2.0 sur HTTP : tout client capable de mener le flux OAuth puis d’appeler tools/list et tools/call fonctionne. Les quotas et le périmètre d’offre s’appliquent de la même façon.

Une adresse, une autorisation, cinquante-six outils.

Le compte gratuit suffit pour brancher le connecteur et appeler les 88 outils. L’offre payante, à 12 € HT par mois et par utilisateur, relève les plafonds d’appels et ouvre les écrans du produit.

Pour aller plus loin