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-serverCet 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égorie | Outil | Description |
|---|---|---|
| Recherche | drug-autocomplete | Rechercher un médicament par son nom |
terrain-autocomplete | Rechercher un terrain patient (pathologie, condition) | |
allergies-autocomplete | Rechercher une allergie (principe actif, excipient, classe) | |
| Structuration | posology-structuration | Convertir une posologie en texte libre en format structuré (FHIR) |
| Base de données | medical-database-getDrugMonographyByClinicalDrug | Obtenir la monographie complète d’un médicament |
| Analyse d’ordonnance | prescription-analysis-getContraindicationsAndInteractions | Détecter les contre-indications et interactions médicamenteuses |
prescription-analysis-getAllergyIntolerance | Détecter les allergies croisées | |
prescription-analysis-queryAlternatives | Proposer des alternatives thérapeutiques | |
| Analyse de posologie | dosages-analysis-getDosageAlert | Détecter les problèmes de posologie |
| Calculateurs | patient-calculators-GetCalc | Calculer 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,cisouCIP13) - 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), ouALL_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 :
| Type | Description |
|---|---|
MAX_QUANTITY_PER_24_HOURS | Quantité maximale sur 24 heures dépassée |
MAX_QUANTITY_PER_DOSE | Quantité maximale par prise dépassée |
MIN_QUANTITY_PER_24_HOURS | Quantité minimale sur 24 heures non atteinte |
MAX_TREATMENT_DURATION | Durée maximale de traitement dépassée |
MIN_TREATMENT_DURATION | Durée minimale de traitement non atteinte |
MAX_PRESCRIPTION_DURATION | Durée maximale de prescription dépassée |
MIN_DURATION_BETWEEN_DOSES | Intervalle minimum entre deux prises non respecté |
DIVISIBILITY | Problè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 :
| Calcul | Description | Données requises |
|---|---|---|
GLOMERULAR_FILTRATION_RATE | Débit de filtration glomérulaire (DFG) | Date de naissance, sexe, créatinine, (taille et poids pour formules normalisées) |
BODY_MASS_INDEX | Indice de masse corporelle (IMC) | Poids, taille |
BODY_SURFACE_AREA | Surface corporelle | Poids, distance talon-genou |
HEIGHT | Estimation de la taille | Date de naissance, sexe, distance talon-genou |
CORRECTED_ALBUMINEMIA | Albuminémie corrigée | Albuminémie, CRP |
PREGNANCY_DUE_DATE | Date prévue d’accouchement | Date des dernières règles |
PREGNANCY_WEEKS | Semaines de grossesse | Date des dernières règles |
AMENORRHEA_WEEKS | Semaines d’aménorrhée | Date 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
| Terminologie | Description | Exemple | Usage |
|---|---|---|---|
posos | Médicament virtuel Posos (DCI) | MV00001165 | Tous les outils d’analyse |
cis | Code CIS (spécialité française) | 67143532 | Outils d’analyse d’ordonnance |
CIP13 | Code CIP à 13 chiffres (conditionnement) | 3400949497294 | Outils d’analyse d’ordonnance |
CIP7 | Code CIP à 7 chiffres | — | Outils d’analyse d’ordonnance |
UCD7 / UCD13 | Unité Commune de Dispensation | — | Outils 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ème | Usage | Comment l’obtenir |
|---|---|---|
| SNOMED-CT | Terrains, pathologies, allergies, indications | terrain-autocomplete ou allergies-autocomplete |
| CIM-10 | Pathologies (alternative) | terrain-autocomplete |
| LOINC | Observations biologiques (résultats de laboratoire) | Codes standards (voir ci-dessous) |
Codes LOINC courants
| Code | Observation | Unité |
|---|---|---|
33914-3 | Débit de filtration glomérulaire | mL/min/1.73m2 |
2160-0 | Créatinine | umol/L |
29463-7 | Poids corporel | kg |
8302-2 | Taille | cm |
6298-4 | Potassium | mmol/L |
2951-2 | Sodium | mmol/L |
1920-8 | ASAT (GOT) | U/L |
1742-6 | ALAT (GPT) | U/L |
718-7 | Hémoglobine | g/dL |
777-3 | Plaquettes | 10*9/L |
6301-6 | INR | {INR} |
8665-2 | Date 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.