Documentation développeur

Connecteur MCP et accès programmatique

La référence complète de ce que Prescriptio expose à un agent : vingt-cinq 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 chercher. Les outils que votre offre ne couvre pas ne sont pas seulement refusés : ils n’apparaissent pas dans tools/list, donc l’agent ne tente jamais un appel voué à l’échec.

  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 prescriptio_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 huit 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 prescriptio_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 25 outils

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

Trois groupes : quatorze outils de lecture ouverts dès l’offre gratuite, trois lectures réservées à l’offre payante, et huit écritures qui n’agissent que dans votre espace et exigent une organisation.

prescriptio_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.gratuit
prescriptio_rechercheTriage sur les neuf sources en un appel. Aucun filtre de statut ni de dossier : pour isoler des avis ouverts, passer par prescriptio_marches. Paramètres : query, localisation, limit.gratuit
prescriptio_marchesAvis 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.gratuit
prescriptio_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.gratuit
prescriptio_bodaccAnnonces 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.gratuit
prescriptio_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, et relève de l’offre payante. Paramètres : marche_id, type: rc | cctp | ccap | dpgf | bpu, filename, query, page.gratuit
prescriptio_dce_downloadLien 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.gratuit
prescriptio_mairiesAvec 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 : offre payante, et seul chemin vers un pv_id. Paramètres : pv_id, query, localisation, page.gratuit
prescriptio_mairies_downloadLa 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.gratuit
prescriptio_permisAutorisations 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.gratuit
prescriptio_dvfMutations 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.gratuit
prescriptio_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.gratuit
prescriptio_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.gratuit
prescriptio_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.gratuit
prescriptio_aoLe 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.payant
prescriptio_ao_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.payant
prescriptio_chantiersObjets 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.payant
prescriptio_alerteDé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.payant
prescriptio_suivisSuivre ou retirer une entité, avec étiquettes, note et priorité de 0 (normal) à 4 (urgent). Paramètres : action: list | add | remove, type: entreprise | contact | mairie | acheteur, siren, priority: 0–4.payant
prescriptio_ao_trackOuvre 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.payant
prescriptio_ao_advanceFait 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.payant
prescriptio_ao_deliverableUne 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.payant
prescriptio_ao_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.payant
prescriptio_ao_documentListe 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.payant
prescriptio_ao_propositionSections 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.payant
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, celui où l’offre payante est la réponse pertinente.

Appels par minute530
Appels par 24 h glissantes1005 000
Dossiers distincts ouverts par jour5500
Outils visibles dans tools/list1425
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 vingt-cinq 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. prescriptio_aide est en tête de liste et gratuit. 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, vingt-cinq outils.

Le compte gratuit suffit pour brancher le connecteur et chercher. Une seule offre payante débloque le reste, à 12 € HT par mois et par utilisateur.

Pour aller plus loin