Rechercher dans la documentation

Saisissez au moins deux caractères.

↑ ↓ naviguer↵ ouvriresc fermer
Assistants et MCP

Protocole MCP et découverte

Transport, contexte, schémas, résultats et limites.

Vérifié le 2026-10-12 · Version Markdown

Transport#

Le serveur est exposé en POST /api/mcp, en Streamable HTTP sans session serveur persistante. Chaque requête est authentifiée. Les réponses sont JSON ; GET et DELETE répondent 405 et il n'y a pas de flux SSE durable.

Un client MCP doit négocier la connexion selon le protocole qu'il prend en charge. Utilisez de préférence un SDK compatible et les métadonnées de découverte du serveur. Ne supposez pas qu'un test HTTP sans authentification décrit les capacités réelles.

OAuth et découverte#

Le 401 du MCP fournit un challenge avec la ressource protégée. L'organisation sert /.well-known/oauth-protected-resource/api/mcp et les métadonnées du serveur d'autorisation. Le flux personnel utilise un client public, un code d'autorisation avec PKCE S256 et le rafraîchissement autorisé.

La ressource doit correspondre à l'hôte de l'organisation. Ne choisissez pas une URL de retour arbitraire et ne désactivez pas la vérification d'état ou de PKCE pour débloquer une connexion.

Ordre de travail d'un assistant#

  1. Lisez /llms.txt sur l'instance pour l'orientation générale.
  2. Appelez load_context pour le vocabulaire, le porteur du jeton, les capacités, les quotas et le travail ouvert.
  3. Appelez describe_schema avant d'inventer une structure ou d'écrire un champ.
  4. Consultez tools/list pour les outils et leurs schémas effectivement autorisés.
  5. Recherchez les objets existants, puis appelez l'outil métier adapté.
  6. Vérifiez le résultat, y compris les validations et demandes d'approbation.

Les ressources cercla://context et cercla://schema donnent les équivalents des deux outils de découverte. load_context accepte ifNoneMatch pour éviter de retransmettre un contexte inchangé.

Périmètre et schémas#

La référence de ce site recense les définitions du dépôt. Le serveur filtre le catalogue selon l'identité et les scopes. Des gardes complémentaires s'appliquent à l'exécution, notamment pour les outils composés et les documents rattachés.

Les schémas de tools/list sont ceux de la version installée. describe_schema ajoute les noms personnalisés et les champs de l'organisation. Ne réutilisez pas le schéma d'une autre organisation sans vérification.

Résultats et erreurs#

Les erreurs de transport sont JSON-RPC avec les statuts HTTP appropriés. Un outil peut aussi retourner une erreur métier dans son résultat. Vérifiez le contenu et l'indicateur d'erreur du SDK ; un HTTP 200 ne prouve pas qu'une action a abouti.

La section capabilities de load_context dit, par domaine, ce que le jeton peut lire ou modifier, les outils qui lui sont fermés et ceux qui passent par une approbation. Un refus porte sa cause et son remède : scope_not_granted (accès non coché au consentement, ou non accordé à l'application connectée), profile (le profil d'accès de la personne ne le permet pas, un administrateur doit agir), module_off (application arrêtée pour l'organisation), record_read_only (fiche partagée en lecture seule). Une fiche hors du périmètre reste introuvable. Des arguments invalides sont signalés champ par champ.

La pagination MCP utilise couramment 20 éléments par défaut et un plafond de 200. Les outils particuliers peuvent avoir leur propre limite. Respectez les curseurs et les refus de quota.

Idempotence#

Les outils d'écriture reçoivent idempotency_key. Conservez une clé par intention logique et réutilisez-la après une coupure ou pour retrouver le résultat d'une demande déjà soumise. Changer de clé à chaque reprise peut produire une seconde action.

Une réponse pending_approval impose d'attendre et de suivre l'approbation ; elle n'autorise pas à passer par un autre outil pour contourner le contrôle.

Matrice de couverture#

Générée depuis le catalogue des outils et le contrat OpenAPI v1 : chaque case objet:verbe a un outil, ou une décision (exclusion d'ADR-205 D1, ou travail à faire suivi par une issue).

119 cases : 87 couvertes par un outil, 22 à faire, 10 exclues (liste fermée d'ADR-205 D1).

Objet:verbeOutilsDécision
abysign:autreà faire (#1702) : Signature électronique : enveloppes, relance, annulation
activity:listlist_activity
affiliations:autreà faire (#1702) : Supprimer un lien saisi par erreur ; end_affiliation termine un lien réel
affiliations:createlink_contact_to_company
affiliations:listà faire (#1702) : Lister les affiliations ; list_contacts (companyId) couvre l'usage courant
affiliations:updateend_affiliation
approvals:autrecancel_approval
approvals:getget_approval
approvals:listlist_approvals
articles:searchsearch_articles
business-units:getà faire (#1702) : Lecture unitaire d'une entité ; list_business_units couvre la liste
business-units:listlist_business_units
business-units:updateà faire (#1702) : Identité légale et bancaire d'une entité (administration)
campaigns:autreget_campaign_report, send_test_campaign, archive_campaign, get_campaign_profitability
campaigns:createcreate_campaign
campaigns:getget_campaign
campaigns:listlist_campaigns
campaigns:transitionsend_campaign, schedule_campaign, cancel_scheduled_campaign
campaigns:updateupdate_campaign
chat:autreà faire (#1702) : Messagerie interne
comments:createadd_comment
comments:listà faire (#1702) : Lire le fil de discussion d'une fiche
companies:autreassign_record, claim_record, share_record, archive_company, restore_record, upsert_company_map, link_company_reference
companies:createcreate_company
companies:getget_company
companies:listlist_companies
companies:updateupdate_company
company-relations:listà faire (#1702) : Relations entre sociétés
contacts:autrelist_hot_contacts, archive_contact
contacts:createcreate_contact
contacts:getget_contact
contacts:listlist_contacts
contacts:transitiontag_contacts, untag_contacts
contacts:updateupdate_contact
contracts:autreset_external_ref, remove_external_ref
contracts:getget_contract
contracts:listlist_contracts
contracts:transitionpropose_renewal, terminate_contract
contracts:updateupdate_contract
cycles:listlist_cycles
devices:autreexclu : Jetons d'appareil de l'app mobile : authentification (ADR-205 D1)
devices:createexclu : Jetons d'appareil de l'app mobile : authentification (ADR-205 D1)
discovery:getload_context
discovery:searchfind_screen
documents:getget_document_url
documents:listlist_documents
exports:autreà faire (#1702) : Téléchargement des exports de l'organisation
exports:listà faire (#1702) : Liste des exports de l'organisation
forms:autreget_form_submissions
forms:listlist_forms
home:listmorning_briefing
insights:getget_insight
invoices:autreà faire (#602) : Facturation par MCP (PDF, Factur-X, transmissions), backlog
invoices:getget_invoice
invoices:listlist_invoices
invoices:transitionà faire (#602) : Encaissement d'une facture, backlog
journeys:autresimulate_journey
journeys:getget_journey
journeys:listlist_journeys
journeys:transitionpublish_journey
journeys:updatesave_journey
kpis:listget_kpis
meta:listdescribe_schema
notifications:autreà faire (#1702) : Notifications de la personne
notifications:listà faire (#1702) : Notifications de la personne
notifications:transitionà faire (#1702) : Notifications de la personne
ping:listexclu : Santé du service : surface plateforme (ADR-205 D1)
products:createcreate_product
products:getget_product
products:listlist_products
products:updateupdate_product
quality:getget_data_quality, get_duplicate_pair, get_link_dossier
quality:listlist_duplicate_pairs, list_unlinked_companies, list_enrichment_suggestions
quality:transitionmerge_duplicate_pair, dismiss_duplicate_pair, decide_enrichment_suggestion
quotes:autreget_quote_cohort, retain_quote_options
quotes:createcreate_quote
quotes:getget_quote
quotes:listlist_quotes
quotes:transitionset_quote_tags, request_quote_approval, set_quote_forecast, transition_quote, propose_quote_alternative, set_quote_alternative_reference, leave_quote_alternatives, advance_quote
quotes:updateupdate_quote
recipes:createprepare_recipe
recipes:getpreview_recipe
recipes:listlist_recipes
reply-templates:listlist_reply_templates
requests:createcreate_request
requests:getget_request
requests:listlist_requests
requests:transitiontransition_request
requests:updateupdate_request
sales-activities:createcreate_sales_activity, log_interaction
sales-activities:getget_sales_activity
sales-activities:listlist_sales_activities
sales-activities:transitiontransition_sales_activity
sales-activities:updateupdate_sales_activity
sales-targets:autreà faire (#1702) : Objectifs individuels (geste targets.manage)
sales-targets:listà faire (#1702) : Objectifs individuels (geste targets.manage)
sales-targets:updateà faire (#1702) : Mode des objectifs (geste targets.manage)
search:searchsearch
sectors:listà faire (#1702) : Référentiel des secteurs
segments:autrepreview_segment
segments:createcreate_segment
segments:listlist_segments
sync:autreexclu : Synchronisation hors ligne de l'app mobile : surface plateforme (ADR-205 D1)
tags:createà faire (#1702) : Créer une étiquette ; tag_contacts pose les étiquettes existantes
tags:listlist_tags
templates:createcreate_email_template
templates:getget_template
templates:listlist_templates
templates:updateupdate_email_template
users:admininvite_user, list_org_users, update_user, deactivate_user, reactivate_user, resend_invitation
users:autreà faire (#1702) : Profil de la personne (users/me) ; load_context dit qui porte le jeton
users:listlist_users
users:updateà faire (#1702) : Modifier son propre profil (users/me)
webhook-deliveries:listexclu : Webhooks : configuration des apps connectées (ADR-205 D1)
webhook-deliveries:transitionexclu : Webhooks : configuration des apps connectées (ADR-205 D1)
webhook-subscriptions:autreexclu : Webhooks : configuration des apps connectées (ADR-205 D1)
webhook-subscriptions:createexclu : Webhooks : configuration des apps connectées (ADR-205 D1)
webhook-subscriptions:listexclu : Webhooks : configuration des apps connectées (ADR-205 D1)
webhook-subscriptions:updateexclu : Webhooks : configuration des apps connectées (ADR-205 D1)