Skip to content

Serveur MCP Posos

Qu’est-ce que MCP ?

Le Model Context Protocol (MCP) est un protocole ouvert qui permet aux assistants IA (comme Claude, ChatGPT, ou tout agent compatible) d’utiliser des outils externes de manière standardisée. Concrètement, un serveur MCP expose un ensemble d’outils que l’assistant IA peut appeler automatiquement lorsqu’il en a besoin pour répondre à une question.

Le serveur MCP Posos expose l’ensemble des APIs médicales Posos sous forme d’outils MCP. Cela signifie que votre assistant IA peut, en une seule conversation :

  • Rechercher un médicament, une allergie ou un terrain patient
  • Analyser une ordonnance pour détecter des interactions, contre-indications ou problèmes de posologie
  • Consulter la monographie complète d’un médicament
  • Calculer des paramètres cliniques (DFG, IMC, surface corporelle, etc.)
  • Proposer des alternatives thérapeutiques

Le tout sans que l’utilisateur ait besoin de connaître les APIs sous-jacentes : l’assistant IA choisit et enchaîne les outils de manière autonome.

Comment se connecter

⚠️

L’authentification du serveur MCP est distincte de celle des APIs REST/GraphQL Posos (qui utilisent Google IAP). Le serveur MCP utilise un flux OAuth 2.0 dédié via Zitadel.

Obtenir vos identifiants OAuth

Contactez Posos pour obtenir vos identifiants d’accès au serveur MCP :

  • Un client_id — identifiant unique de votre application
  • Un client_secret — clé secrète associée

Ces identifiants sont générés par Posos pour chaque partenaire. Ils sont strictement confidentiels et ne doivent jamais être exposés dans du code côté client.

Configurer votre client MCP

La méthode de configuration dépend du support OAuth de votre client MCP.

Clients avec support OAuth natif (recommandé)

Les clients MCP compatibles OAuth (comme Claude Desktop) peuvent gérer l’authentification automatiquement. Le serveur MCP expose un endpoint de découverte OAuth :

https://mcp.production.posos.co/.well-known/oauth-authorization-server

Cet endpoint fournit automatiquement les URLs d’autorisation et d’échange de jeton. Il suffit de configurer le serveur MCP avec son URL :

{
  "mcpServers": {
    "posos": {
      "url": "https://mcp.production.posos.co/api/v1/mcp"
    }
  }
}

Le client ouvrira automatiquement une fenêtre d’autorisation lors de la première connexion. Vous devrez vous authentifier et autoriser l’accès.

Le flux OAuth utilisé est Authorization Code avec PKCE (S256). La plupart des clients MCP modernes gèrent ce flux de manière transparente.

Clients sans support OAuth

Si votre client MCP ne supporte pas OAuth nativement, vous devez obtenir un jeton d’accès manuellement puis le passer en en-tête :

1. Obtenir un jeton d’accès

Échangez vos identifiants contre un jeton via l’endpoint de token Zitadel :

curl -X POST https://zitadel.production.posos.co/oauth/v2/token \
  -d "grant_type=client_credentials" \
  -d "client_id=<VOTRE_CLIENT_ID>" \
  -d "client_secret=<VOTRE_CLIENT_SECRET>" \
  -d "scope=openid urn:zitadel:iam:org:project:id:333168797043131145:aud"
⚠️

Le scope urn:zitadel:iam:org:project:id:333168797043131145:aud est obligatoire. Sans ce scope, le jeton ne sera pas accepté par le serveur MCP.

2. Configurer le client avec le jeton

{
  "mcpServers": {
    "posos": {
      "url": "https://mcp.production.posos.co/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer <VOTRE_JETON>"
      }
    }
  }
}

Commencer à utiliser les outils

Une fois connecté, votre assistant IA découvre automatiquement les outils disponibles. Vous pouvez lui poser des questions en langage naturel et il appellera les outils Posos de manière autonome.

Le serveur MCP utilise le transport Streamable HTTP. Les sessions sont gérées automatiquement via l’en-tête mcp-session-id. La plupart des clients MCP gèrent ce mécanisme de manière transparente.

Outils disponibles

Le serveur MCP expose 10 outils répartis en 5 catégories :

CatégorieOutilDescription
Recherchedrug-autocompleteRechercher un médicament par son nom
terrain-autocompleteRechercher un terrain patient (pathologie, condition)
allergies-autocompleteRechercher une allergie (principe actif, excipient, classe)
Structurationposology-structurationConvertir une posologie en texte libre en format structuré (FHIR)
Base de donnéesmedical-database-getDrugMonographyByClinicalDrugObtenir la monographie complète d’un médicament
Analyse d’ordonnanceprescription-analysis-getContraindicationsAndInteractionsDétecter les contre-indications et interactions médicamenteuses
prescription-analysis-getAllergyIntoleranceDétecter les allergies croisées
prescription-analysis-queryAlternativesProposer des alternatives thérapeutiques
Analyse de posologiedosages-analysis-getDosageAlertDétecter les problèmes de posologie
Calculateurspatient-calculators-GetCalcCalculer des paramètres cliniques (DFG, IMC, etc.)

Recherche et identification

Autocomplétion de médicaments (drug-autocomplete)

Recherche un médicament à partir de son nom (même partiel ou approximatif) et retourne ses identifiants.

L’outil accepte une liste de termes de recherche et retourne pour chaque terme les meilleurs candidats avec :

  • Le code Posos (ex: MV00001165) et la terminologie associée
  • Le nom complet du médicament (DCI + dosage + forme)
  • Le type : médicament virtuel (CLINICAL_DRUG), spécialité (BRANDED_DRUG), conditionnement (PACKAGED_DRUG) ou principe actif (INGREDIENT)
  • Les ingrédients et la classification ATC

Bon à savoir : Cet outil est souvent le point de départ d’un workflow. Les autres outils d’analyse attendent des codes médicaments Posos — l’autocomplétion permet de les obtenir à partir d’un simple nom.

Autocomplétion de terrains (terrain-autocomplete)

Recherche un terrain patient (pathologie, condition médicale) et retourne les codes associés (SNOMED-CT, CIM-10). Ces codes sont utilisés pour renseigner le profil patient lors d’une analyse de contre-indications.

Autocomplétion d’allergies (allergies-autocomplete)

Recherche une allergie par nom et retourne les codes correspondants. Gère les allergies aux principes actifs, excipients et classes médicamenteuses.

Structuration de posologie (posology-structuration)

Convertit une posologie en texte libre (par exemple “1 comprimé matin et soir pendant 7 jours”) en format FHIR structuré. Le résultat inclut les informations de fréquence, dose et durée dans un format exploitable par l’outil d’analyse de posologie.

Chaque résultat est accompagné d’un score de confiance indiquant la fiabilité de la structuration.


Base de données médicale

Monographie (medical-database-getDrugMonographyByClinicalDrug)

Retourne la monographie complète d’un médicament virtuel : indications thérapeutiques, posologies recommandées, effets indésirables, alertes, interactions par classe médicamenteuse.

Cet outil attend un code Posos de médicament virtuel (préfixe MV, ex : MV00000004). Utilisez drug-autocomplete avec le type CLINICAL_DRUG pour obtenir ce code à partir d’un nom de médicament.

⚠️

Seuls les codes Posos de type médicament virtuel sont acceptés (préfixe MV). Les codes CIS ou CIP13 ne sont pas compatibles avec cet outil.


Analyse d’ordonnance

Ces outils permettent d’analyser une prescription médicamenteuse en tenant compte du profil du patient.

Contre-indications et interactions (prescription-analysis-getContraindicationsAndInteractions)

Détecte les contre-indications (liées au terrain du patient) et les interactions médicamenteuses (entre les médicaments de l’ordonnance).

Entrées :

  • Médicaments : liste de codes médicaments (terminologie posos, cis ou CIP13)
  • Patient (optionnel) : sexe, date de naissance, pathologies (codes SNOMED-CT), observations biologiques (codes LOINC)
  • Types d’alertes (optionnel) : filtrer par type (ABSOLUTE_CONTRAINDICATION, RELATIVE_CONTRAINDICATION, PRECAUTION, WARNING)

Bon à savoir : Plus le profil patient est renseigné, plus l’analyse est pertinente. Sans profil patient, seules les interactions médicamenteuses seront détectées.

Allergies croisées (prescription-analysis-getAllergyIntolerance)

Détecte les réactions allergiques croisées entre les médicaments d’une ordonnance et les allergies connues du patient.

Entrées :

  • Médicaments : liste de codes médicaments
  • Allergies : liste de codes allergies (SNOMED-CT ou classes médicamenteuses Posos, obtenus via allergies-autocomplete)

Alternatives thérapeutiques (prescription-analysis-queryAlternatives)

Propose des traitements alternatifs plus sûrs pour un médicament donné, en tenant compte d’une indication thérapeutique spécifique et du profil patient.

Entrées :

  • Médicament à remplacer (code + terminologie)
  • Indication thérapeutique visée (code SNOMED-CT)
  • Niveau de filtrage : NO_RISK (aucun risque), NO_SEVERE_RISK (pas de risque sévère), ou ALL_ALTERNATIVES (toutes les alternatives)
  • Patient (optionnel) : pathologies et traitements concomitants

Analyse de posologie

Alertes de posologie (dosages-analysis-getDosageAlert)

Détecte les problèmes de posologie pour une liste de médicaments : surdosage, sous-dosage, durée de traitement excessive, problèmes de divisibilité, etc.

Types d’alertes disponibles :

TypeDescription
MAX_QUANTITY_PER_24_HOURSQuantité maximale sur 24 heures dépassée
MAX_QUANTITY_PER_DOSEQuantité maximale par prise dépassée
MIN_QUANTITY_PER_24_HOURSQuantité minimale sur 24 heures non atteinte
MAX_TREATMENT_DURATIONDurée maximale de traitement dépassée
MIN_TREATMENT_DURATIONDurée minimale de traitement non atteinte
MAX_PRESCRIPTION_DURATIONDurée maximale de prescription dépassée
MIN_DURATION_BETWEEN_DOSESIntervalle minimum entre deux prises non respecté
DIVISIBILITYProblème de divisibilité du comprimé

Bon à savoir : La posologie doit être fournie au format FHIR (dosageInstruction). Si vous disposez d’une posologie en texte libre, utilisez d’abord l’outil posology-structuration pour la convertir.


Calculateurs médicaux

Calculateur (patient-calculators-GetCalc)

Effectue des calculs cliniques courants à partir des données patient.

Calculs disponibles :

CalculDescriptionDonnées requises
GLOMERULAR_FILTRATION_RATEDébit de filtration glomérulaire (DFG)Date de naissance, sexe, créatinine, (taille et poids pour formules normalisées)
BODY_MASS_INDEXIndice de masse corporelle (IMC)Poids, taille
BODY_SURFACE_AREASurface corporellePoids, distance talon-genou
HEIGHTEstimation de la tailleDate de naissance, sexe, distance talon-genou
CORRECTED_ALBUMINEMIAAlbuminémie corrigéeAlbuminémie, CRP
PREGNANCY_DUE_DATEDate prévue d’accouchementDate des dernières règles
PREGNANCY_WEEKSSemaines de grossesseDate des dernières règles
AMENORRHEA_WEEKSSemaines d’aménorrhéeDate des dernières règles, (durée du cycle, optionnel)

Plusieurs formules sont disponibles pour certains calculs (par exemple Cockroft, MDRD, CKD-EPI pour le DFG).


Codes et terminologies

Les outils d’analyse utilisent différents systèmes de codification. Voici les principaux :

Codes médicaments

TerminologieDescriptionExempleUsage
pososMédicament virtuel Posos (DCI)MV00001165Tous les outils d’analyse
cisCode CIS (spécialité française)67143532Outils d’analyse d’ordonnance
CIP13Code CIP à 13 chiffres (conditionnement)3400949497294Outils d’analyse d’ordonnance
CIP7Code CIP à 7 chiffresOutils d’analyse d’ordonnance
UCD7 / UCD13Unité Commune de DispensationOutils d’analyse d’ordonnance

Bon à savoir : Le code posos (médicament virtuel, préfixe MV) est le format recommandé. Il est compatible avec tous les outils et représente le médicament indépendamment de la marque. Utilisez drug-autocomplete pour obtenir ce code.

Codes pathologies et observations

SystèmeUsageComment l’obtenir
SNOMED-CTTerrains, pathologies, allergies, indicationsterrain-autocomplete ou allergies-autocomplete
CIM-10Pathologies (alternative)terrain-autocomplete
LOINCObservations biologiques (résultats de laboratoire)Codes standards (voir ci-dessous)

Codes LOINC courants

CodeObservationUnité
33914-3Débit de filtration glomérulairemL/min/1.73m2
2160-0Créatinineumol/L
29463-7Poids corporelkg
8302-2Taillecm
6298-4Potassiummmol/L
2951-2Sodiummmol/L
1920-8ASAT (GOT)U/L
1742-6ALAT (GPT)U/L
718-7Hémoglobineg/dL
777-3Plaquettes10*9/L
6301-6INR{INR}
8665-2Date des dernières règles(date)

Exemple de workflow complet

Voici un exemple typique de conversation avec un assistant IA connecté au serveur MCP Posos :

Utilisateur : “Mon patient de 72 ans prend de la simvastatine et son médecin veut ajouter de la clarithromycine. Y a-t-il un risque ?”

L’assistant IA enchaîne automatiquement les outils suivants :

Recherche des médicaments

L’assistant appelle drug-autocomplete avec les termes “simvastatine” et “clarithromycine” pour obtenir les codes Posos (MV00001165 et MV00000271).

Analyse des interactions

L’assistant appelle prescription-analysis-getContraindicationsAndInteractions avec les deux médicaments et le profil patient (âge 72 ans).

Résultat

L’assistant détecte une contre-indication : la clarithromycine est un inhibiteur puissant du CYP3A4, ce qui majore le risque de rhabdomyolyse avec la simvastatine.

Recherche d’alternatives

L’assistant peut ensuite appeler prescription-analysis-queryAlternatives pour proposer un antibiotique alternatif compatible avec la simvastatine.

Tout ce workflow se déroule de manière transparente dans une simple conversation, sans que l’utilisateur ait besoin de manipuler les APIs directement.