Skip to main content
Glama

Doctolib MCP

Serveur MCP non officiel qui donne à Claude (ou à tout client MCP) un accès complet à l'API publique de Doctolib : chercher des praticiens autour d'un lieu, lister tous les créneaux libres d'une spécialité dans un rayon, lire les infos pratiques d'un cabinet, et être alerté dès qu'un créneau se libère.

« Trouve-moi tous les rendez-vous de dermatologue dans les 15 km autour de Clermont-Ferrand d'ici un mois. » « Surveille le Dr X et préviens-moi sur mon téléphone dès qu'un créneau s'ouvre avant le 15 octobre. »

Aucun compte Doctolib n'est nécessaire : le serveur utilise uniquement les données publiques que le site affiche à tout visiteur. La réservation, elle, se fait toujours sur Doctolib (lien direct fourni, lieu et motif pré-sélectionnés).

Fonctionnalités

  • Recherche géographique : spécialité + ville / code postal / adresse + rayon, triée par distance, avec secteur de conventionnement, paiement, langues, motif, acceptation des nouveaux patients.

  • Tous les créneaux d'une zone en un appel (find_slots) : chaque agenda est interrogé, les créneaux sont remis dans l'ordre chronologique, avec la raison quand il n'y en a pas (« agenda fermé », « prochain créneau le … »).

  • Détail d'un praticien : tous ses motifs (réservés aux patients suivis ? restrictions d'âge ? vidéo ?), agendas fermés, téléphone du cabinet, horaires d'ouverture, carte Vitale, moyens de paiement.

  • Créneaux sur la période voulue (au-delà des 15 jours par appel de Doctolib), avec remplaçants et créneaux sur demande.

  • Surveillance d'un praticien ou de toute une zone, avec notifications macOS, push téléphone (ntfy, gratuit) ou webhook (n8n, Make, Zapier…).

  • Référentiels : 123 spécialités, autocomplétion Doctolib (spécialités, actes, praticiens), sitemaps publics.

21 outils au total : voir docs/TOOLS.md. Les endpoints Doctolib sous-jacents sont documentés dans docs/API.md.

Related MCP server: Doktor MCP Server

Installation

Prérequis : Python ≥ 3.11 et uv.

git clone https://github.com/arvernesmotion/Doctolib-MCP.git
cd Doctolib-MCP
uv sync

Claude Code

claude mcp add doctolib --scope user -- uv --directory /chemin/vers/Doctolib-MCP run doctolib-mcp

Claude Desktop

Dans claude_desktop_config.json (voir examples/claude_desktop_config.json) :

{
  "mcpServers": {
    "doctolib": {
      "command": "uv",
      "args": ["--directory", "/chemin/vers/Doctolib-MCP", "run", "doctolib-mcp"]
    }
  }
}

Autres clients MCP

Le serveur parle MCP en stdio : commande uv --directory <dossier> run doctolib-mcp.

Exemples de demandes

Vous demandez

Outils utilisés

« Quels ophtalmos à moins de 10 km de Lyon prennent de nouveaux patients ? »

search_practitioners

« Tous les créneaux de kiné autour de Nantes cette semaine »

find_slots

« Ce médecin accepte-t-il la carte Vitale ? Quels sont ses horaires ? »

practitioner_practical_info

« Pourquoi je ne trouve aucun créneau chez ce dermato ? »

practitioner_booking_info, get_availabilities

« Préviens-moi dès qu'un pédiatre se libère à 15 km de Bordeaux »

watch_area, configure_notifications

Alertes de créneaux

  1. Choisir les canaux (une fois) : demandez à Claude « configure les notifications avec un topic ntfy » (configure_notifications), puis installez l'app ntfy (iOS / Android) et abonnez-vous au topic renvoyé. Gardez-le secret : quiconque le connaît reçoit vos alertes. Un webhook_url permet aussi de relayer vers n8n, Slack…

  2. Créer une surveillance : watch_practitioner (un praticien) ou watch_area (toute une zone).

  3. Planifier la vérification : la commande doctolib-mcp-watch fait une passe et notifie les nouveaux créneaux. Lancez-la toutes les 5 à 10 minutes :

    • macOS (launchd) : adapter examples/launchd.plist puis

      cp examples/launchd.plist ~/Library/LaunchAgents/fr.doctolib-mcp.watch.plist
      launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/fr.doctolib-mcp.watch.plist

      ⚠ Protection macOS : launchd refuse d'exécuter un script situé dans ~/Documents, ~/Desktop ou ~/Downloads (« Operation not permitted »). L'exemple appelle donc .venv/bin/python -m doctolib_mcp.watch. Si la passe reste bloquée malgré tout, clonez le dépôt hors de ces dossiers (ex. ~/Services/Doctolib-MCP).

    • Linux (systemd) : examples/doctolib-mcp-watch.service et examples/doctolib-mcp-watch.timer.

    • cron : */10 * * * * cd /chemin/vers/Doctolib-MCP && uv run doctolib-mcp-watch >> ~/.doctolib-mcp/watch.log 2>&1

Au premier passage, les créneaux déjà ouverts sont signalés ; ensuite, uniquement les nouveaux. Un créneau qui disparaît puis réapparaît (annulation d'un autre patient) est signalé à nouveau : ce sont les meilleures occasions.

Configuration

Variable d'environnement

Défaut

Rôle

DOCTOLIB_MCP_DATA

~/.doctolib-mcp

Dossier des surveillances (watches.json) et de la configuration des alertes (config.json)

DOCTOLIB_MCP_MIN_INTERVAL

0.35

Délai minimal entre deux requêtes vers Doctolib (secondes)

DOCTOLIB_MCP_USER_AGENT

Chrome récent

User-Agent envoyé (obligatoire pour les créneaux)

Limites à connaître

  • Connexion résidentielle requise pour les créneaux. Doctolib (Cloudflare) bloque availabilities.json depuis les IP de datacenter (Vercel, AWS, la plupart des VPS…) : réponse 403. Faites tourner le serveur sur votre ordinateur. La recherche et les infos pratiques passent, elles, depuis n'importe où.

  • Pas de réservation automatique. Réserver exige votre compte Doctolib ; le serveur fournit le lien direct (lieu + motif pré-sélectionnés). Le créneau lui-même ne peut pas être pré-sélectionné.

  • Seuls les agendas ouverts en ligne sont visibles. Beaucoup de spécialistes n'ouvrent leur agenda que par vagues, ou réservent certains motifs à leurs patients suivis ; c'est précisément là que la surveillance est utile.

  • Le motif principal renvoyé par la recherche est choisi par Doctolib et peut être un motif réservé (« Ancien patient du Dr X ») : practitioner_booking_info liste tous les motifs.

  • Tarifs chiffrés, accessibilité, RPPS ne sont exposés que dans un endpoint réservé aux navigateurs : non couverts.

  • API non officielle : Doctolib peut en changer le format à tout moment.

Usage responsable

Ce projet n'est ni affilié à Doctolib, ni approuvé par Doctolib. Il est destiné à un usage personnel, pour trouver un rendez-vous médical plus facilement. Le robots.txt et les conditions d'utilisation de Doctolib encadrent l'accès automatisé à leurs services : restez à faible débit (réglage par défaut ≈ 3 requêtes/s, surveillances toutes les 5–10 min), ne republiez pas et ne revendez pas les données, et n'utilisez pas cet outil pour accaparer des créneaux au détriment d'autres patients. Vous êtes responsable de l'usage que vous en faites.

Développement

src/doctolib_mcp/
├── client.py     # HTTP : en-têtes navigateur, limitation de débit globale, reprises sur 429
├── api.py        # un wrapper par endpoint Doctolib + normalisation
├── geo.py        # géocodage (geo.api.gouv.fr, api-adresse.data.gouv.fr)
├── finder.py     # moteur « tous les créneaux d'une zone »
├── store.py      # surveillances, configuration, notifications
├── watch.py      # passe de surveillance (commande doctolib-mcp-watch)
├── server.py     # serveur MCP (21 outils + 1 ressource)
└── data/specialities.json

Test de bout en bout contre le vrai site (depuis une connexion résidentielle) :

uv run python tests/smoke_live.py

Il démarre le serveur en stdio, appelle chaque outil et affiche OK / ERR (les surveillances de test sont écrites dans un dossier temporaire).

Licence

MIT

Available Tools

21 tools
autocompleteA
Read-only

Autocomplétion Doctolib : spécialités / actes (searchEntries) et praticiens ou centres par nom (profiles). Astuce : le moteur préfère les préfixes courts ('derma' plutôt que 'dermatologue').

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
includeNoALL

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful behavioral note the annotations do not: the engine prefers short prefixes ('derma' over 'dermatologue'), which directly affects how the agent should phrase queries. It omits return format or result limits, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the capability mapping front-loaded and the practical tip clearly marked as advice. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only autocomplete tool with no output schema, the description covers purpose, the enum semantics, and a query-phrasing tip. What ALL returns or the shape of the results is unstated, a minor gap given annotations cover safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it explains the semantic meaning of the enum values (SEARCH_ENTRIES vs PROFILES) that the schema only lists as bare strings. It does not explain the ALL default, hence not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (autocomplétion) and the resource domains it covers: specialties/acts via searchEntries and practitioners/centres via profiles. It implicitly distinguishes itself from siblings like list_specialities or place_autocomplete, though it does not name them explicitly, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mapping of searchEntries to specialties/acts and profiles to practitioners/centres implies when each mode applies, but there is no explicit when-to-use guidance or routing against alternatives like search_practitioners or list_specialities. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_notificationsC

Canaux d'alerte : notification macOS, push téléphone via ntfy.sh (app gratuite, s'abonner au topic), webhook JSON (POST {title, message, url}) vers n8n, Slack, Discord… Envoie une notification de test.

ParametersJSON Schema
NameRequiredDescriptionDefault
macosNo
send_testNo
ntfy_topicNo
webhook_urlNo
generate_ntfy_topicNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and openWorldHint=true, so the description adds real value by disclosing the outbound webhook payload shape (POST {title, message, url}) and the ntfy subscription requirement. It still omits the most important behavioral fact for a config mutation: whether omitted channels are disabled, preserved, or require auth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single dense sentence whose front-loading works (channels first, side effect last), but the middle is a cluttered list of examples and parentheticals that mixes channel names with implementation notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 optional parameters, no output schema, and no annotation detail, the description should explain how channels are selected and what the test notification does. It covers channel types but leaves the mechanics of configuration and the effect of send_test/generate_ntfy_topic unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description must compensate. It loosely maps to macos, ntfy_topic and webhook_url, but says nothing about generate_ntfy_topic or send_test (default true), leaving two parameters — including the one controlling side effects — entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates the alert channels (macOS, ntfy.sh push, JSON webhook to n8n/Slack/Discord) and notes it sends a test notification, so the resource area is identifiable. However, the verb is only implied by the tool name — the text never states that this configures/persists settings — and it is not distinguished from any sibling, though the siblings listed are unrelated booking tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives, nor any prerequisites or exclusions. The clue that ntfy requires a free app and topic subscription is operational context for one channel, not usage guidance for invoking the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_slotsB
Read-only

TOUS les créneaux libres d'une spécialité autour d'un lieu, sur N jours, en un appel.

Renvoie la liste chronologique des créneaux (heure, praticien, distance, motif, remplaçant, lien de réservation) et l'état de chaque praticien (nb de créneaux, premier créneau, prochain créneau hors période, agenda fermé…). Peut prendre 10 à 60 s selon le nombre de praticiens (≈ 3 requêtes/s vers Doctolib).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lngNo
cityNo
daysNo
radius_kmNo
specialityYes
sector_1_onlyNo
new_patients_onlyNo
max_slots_returnedNo
include_telehealth_kiosksNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the returned fields are enumerated, practitioner-level status is described, and it discloses latency (10-60 s) plus the underlying rate limit (~3 req/s to Doctolib) — rare and valuable operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short front-loaded sentences; the core capability leads and the return shape and latency follow. Efficient, though the return-field enumeration is a little list-heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description commendably explains the return payload and per-practitioner status, and it warns about runtime. But for a 10-parameter aggregation tool at 0% schema coverage, the missing parameter semantics leave the definition under-complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 10 parameters, so the description carries the full burden. It only loosely maps to speciality, location and days ('sur N jours'); it never explains lat/lng vs city precedence, radius_km, sector_1_only, new_patients_only, max_slots_returned, or include_telehealth_kiosks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('TOUS les créneaux libres d'une spécialité') with clear scope: around a location, over N days, in one call. It is distinguishable from aggregation-free siblings, but never names the competing tools (search_availabilities, get_availabilities) to sharpen the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'en un appel' implies this aggregates what scattered siblings do, but there is no explicit when-to-use, when-not-to-use, or named alternative. The agent is left to infer that this replaces search_availabilities/get_availabilities from the sibling list alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geocode_addressB
Read-only

Adresse précise → coordonnées (api-adresse.data.gouv.fr), pour centrer une recherche sur un domicile.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-call profile is covered. The description usefully adds the external data source, which explains the open-world behavior, but does not note failure modes (unmatched addresses), rate limits, or localization, keeping it at the minimum-viable level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single telegraphic sentence with the input→output mapping front-loaded and the use case trailing. Every element earns its place, though the compressed style borders on terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is rightly omitted, and the tool is simple with only one parameter. Still, the description leaves the required parameter format and address-scope expectations underspecified for a geocoding call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'query' parameter has 0% schema description coverage, so the description carries the burden. 'Adresse précise' does convey that the input should be a fully qualified address rather than a partial/fuzzy term, but gives no format example, country scope, or handling of ambiguous input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific transformation: precise address to coordinates, and even names the backing service (api-adresse.data.gouv.fr). It implicitly contrasts with fuzzy-input siblings like autocomplete/place_autocomplete by emphasizing 'Adresse précise', but never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'pour centrer une recherche sur un domicile' gives one concrete use case, which implies when to reach for it. However it offers no when-not guidance and does not distinguish itself from siblings such as search_city or place_autocomplete, which overlap in the geocoding space.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_availabilitiesA
Read-only

Créneaux d'un praticien pour un motif, sur N jours (Doctolib limite à 15 j par appel : l'outil enchaîne).

Deux usages :

  • url_or_slug (+ motive_id / practice_id optionnels) : agendas résolus automatiquement ; sans motive_id, TOUS les motifs réservables sont interrogés.

  • motive_id + agenda_ids (+ practice_id) : appel direct (ids issus de search_practitioners). Renvoie slots, substitutes (créneaux assurés par un remplaçant), next_slot si rien dans la période, reason (agenda fermé / pas encore ouvert) et booking_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
motive_idNo
agenda_idsNo
start_dateNo
practice_idNo
url_or_slugNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly and openWorld, and the description adds genuinely non-structured behavior: the 15-day per-call API limit with automatic chaining, and the returned shape (slots, substitutes, next_slot, reason, booking_url). It omits any auth/rate-limit caveats beyond the chaining note, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then a clean two-branch usage list and a return-value sentence. Dense but every clause carries information; the parenthetical 15-day note and return enumeration both earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description supplies the return fields and the special cases (substitutes, next_slot, reason). It is self-sufficient for calling; the only shortfall is the undocumented start_date and unspecified date/number formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and largely delivers: it explains url_or_slug, motive_id, practice_id and agenda_ids roles and their interdependencies. start_date and the exact semantics of the days default are not addressed, leaving one gap in an otherwise strong compensation for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: practitioner availability slots for a motive over N days, with the Doctolib 15-day chunking behavior spelled out. It also situates itself relative to search_practitioners (source of ids), so the agent can tell what it does and where its inputs come from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly enumerates two invocation modes: url_or_slug-based auto-resolution (and the default of querying ALL bookable motives when motive_id is omitted) versus direct motive_id + agenda_ids calls. This is exactly when-to-use-which-pattern guidance with the branch conditions made explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_specialitiesA
Read-only

Liste des 123 spécialités Doctolib (slug à utiliser dans les autres outils, nom, id). query filtre sans tenir compte des accents (ex. 'derma', 'kiné', 'ophtal').

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds useful behavior (accent-insensitive filtering, the 123-entry fixed set, returned fields) but says nothing about pagination, ordering, or limits, keeping it at a moderate 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero filler, front-loaded with the resource and its role, then the filter behavior. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be detailed, and the annotations carry the safety profile. For a single-optional-param list tool the description is nearly complete; only ordering/pagination behavior is left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter meaning, and it does: query is accent-insensitive and the examples ('derma', 'kiné', 'ophtal') demonstrate substring/partial matching. It stops short of formally stating partial-match semantics, so it is good but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Liste des 123 spécialités Doctolib') and enumerates the returned fields (slug, nom, id), making the purpose concrete. It does not explicitly contrast itself with siblings like autocomplete or search_filters, so it stays at a clear-but-undifferentiated 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It hints at downstream usage ('slug à utiliser dans les autres outils') and explains the query filter, which implies when the lookup is useful. However, it never states when to prefer this over siblings such as autocomplete or search_filters, and offers no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_watchesB
Read-only

Surveillances et leur état (dernière vérification, nb de créneaux, dernière alerte, erreur).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description's remaining content (the state fields) describes return values, which an output schema already exists to convey, so it adds little behavioral context beyond what structured fields provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly-scoped sentence with the resource front-loaded and no filler. It is arguably too terse, but every word carries meaning and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, an output schema present, and read-only annotations, the definition is minimally viable: an agent knows it lists watches and their state. It still lacks any routing guidance among the many watch-related siblings, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline of 4 applies. Nothing in the description misrepresents or conflicts with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ("Surveillances") and enumerates the state fields returned (last check, slot count, last alert, error), which pairs with the list_* name to make the operation clear. It does not, however, distinguish itself from watch-related siblings like run_watches_now, watch_practitioner, or stop_watch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all — nothing says this is the read-side companion to run_watches_now/watch_practitioner, nor any prerequisite or exclusion. The agent must infer usage purely from the tool name and the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

place_autocompleteA
Read-only

Autocomplétion de lieux côté Doctolib (villes, codes postaux, adresses). Ne renvoie pas de coordonnées.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuine context beyond that by disclosing the data source (Doctolib) and the missing-coordinates behavior, but says nothing about matching behavior, ranking, or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the scope front-loaded and the caveat second; no filler. Slightly under-specified rather than overlong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented, and the 'no coordinates' note usefully sets result expectations for a read-only, single-parameter autocomplete. Nothing critical is missing for a correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it only indirectly implies the query is a place name/city/postal code/address. For a single, near-self-evident 'query' parameter this is adequate but adds little syntax or format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (place autocomplete) with its scope (cities, postal codes, addresses) and clarifies it is Doctolib-side data. The negative statement 'ne renvoie pas de coordonnées' implicitly separates it from geocode_address, though it never names the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the word 'autocomplétion' and the field list, and the note about coordinates hints at when another tool is needed. But there is no explicit when-to-use statement or reference to the very similar siblings autocomplete, search_city, or geocode_address.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

practitioner_booking_infoB
Read-only

Données du tunnel de réservation d'un praticien : lieux (adresse, GPS, téléphone), agendas (fermés ?), tous les motifs (vidéo, réservés aux patients déjà suivis sur tel agenda, restrictions d'âge, où ils sont réservables).

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_slugYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds content-level context (what the returned data includes, that agendas may be closed), but says nothing about auth needs, error cases, or shape of the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The nested parenthetical lists make it slightly dense, but every clause names actual returned content rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned data, which partially compensates. However, for a required-input fetch tool the missing parameter semantics and absent usage guidance leave the definition only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter, url_or_slug, with 0% schema description coverage, so the description carries the full burden. It only implies 'd'un praticien' and never explains whether the input is a URL, a slug, or what format is accepted, leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete resource (a practitioner's booking-tunnel data) and enumerates its contents: locations, agendas, and all booking motives with their constraints. An agent understands what it retrieves, but the description never distinguishes it from the close sibling practitioner_practical_info, which also covers address/phone-style data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use statement, no prerequisites, and no named alternative among the many siblings (practitioner_practical_info, find_slots, get_availabilities). The agent must infer the call site from the resource name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

practitioner_messagingB
Read-only

Catégories de demandes par messagerie Doctolib (renouvellement, résultats…) si le praticien l'a activée.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered externally. The description adds one genuine behavioral fact – the feature may be disabled by the practitioner, implying empty/absent results – but says nothing about return shape, permissions, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the identifying information front-loaded and zero filler. It is efficient, though arguably so terse that some clarifying content was dropped rather than truly earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists and annotations are minimal, so the description carries the full burden for a read tool. It conveys what is returned and the activation condition but omits return format and what to do when the feature is off, leaving it minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description says nothing about profile_id. However, the single parameter is a self-explanatory practitioner profile id in context, so the gap is mild rather than severe; the description neither compensates nor actively misleads.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('catégories de demandes par messagerie Doctolib') and gives concrete examples (renouvellement, résultats), which distinguishes it from booking/availability siblings. It is a noun phrase rather than a verb+resource, so the action (listing/retrieving) is inferred rather than stated, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives among the many sibling practitioner tools. The clause 'si le praticien l'a activée' is a condition on results, not a usage decision rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

practitioner_practical_infoA
Read-only

Infos pratiques : horaires d'ouverture, accepte les nouveaux patients, téléconsultation, secteur, carte Vitale, moyens de paiement, langues, adresses. profile_id vient de search_practitioners ; sinon fournir url_or_slug (résolu via le tunnel de réservation).

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idNo
url_or_slugNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-lookup behavior are covered. The description adds genuinely new behavioral context — the existence of a 'tunnel de réservation' that resolves a slug to a profile — but says nothing about what happens on resolution failure or ambiguous identifiers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both load-bearing: the first is a dense field inventory, the second handles the parameter contract. The long comma-separated field list is front-loaded but slightly heavy; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of telling the agent what comes back, and it enumerates the returned data categories. Combined with the input-resolution note, an agent has enough to call it correctly; only failure/edge behavior is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: it states where profile_id originates (search_practitioners) and that url_or_slug is an alternative resolved through the booking tunnel. It leaves the URL-vs-slug format and the precedence/mutual-exclusivity rule implicit, which is the only real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a practitioner's practical information) and enumerates the concrete fields returned — opening hours, new-patient acceptance, teleconsultation, sector, carte Vitale, payment methods, languages, addresses. That is far more specific than the bare name. It does not, however, distinguish itself from the sibling practitioner_booking_info, which likely covers adjacent territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the field list, and the second sentence does clarify how to supply the inputs (profile_id from search_practitioners, else url_or_slug). That is parameter-sourcing guidance rather than when-to-use-this-vs-an-alternative guidance; no exclusion or sibling routing is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_watches_nowA

Lance immédiatement une passe de surveillance (notifie les nouveaux créneaux).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this is a mutating, externally interacting operation. The description adds that it runs a monitoring pass and notifies about new slots, but omits auth needs, idempotency, rate limits, and notification delivery details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that immediately states the action and its effect. Every phrase earns its place with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. For a zero-parameter trigger action, the description adequately covers the purpose and notification effect, though it could specify prerequisites or scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and schema description coverage is 100%, so the baseline is 4. The description adds no parameter information, which is acceptable because no parameters exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lance') and resource ('passe de surveillance'), plus the notification effect ('notifie les nouveaux créneaux'). Clear what the tool does, but it does not explicitly distinguish itself from sibling watch tools such as watch_practitioner or list_watches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The adverb 'immédiatement' implies a manual immediate trigger as opposed to configured or scheduled watches. However, it never states when to use this tool versus watch_practitioner, watch_area, configure_notifications, or when not to use it, leaving usage only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_availabilitiesC
Read-only

Variante « vue liste » de Doctolib (7 jours max) avec filtre de régime d'assurance. Réponse brute.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
motive_idYes
agenda_idsYes
practice_idNo
insurance_sectorNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only safety profile is covered. The description adds that the response is 'brute' (raw/unformatted), a useful behavioral note, but says nothing about pagination behavior or the external/live nature of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single terse sentence with no wasted words, but it is a fragment ('variante... réponse brute') rather than a front-loaded action statement, and the French phrasing is opaque for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with 0% schema coverage and no output schema, the description covers only two parameters and omits required inputs, usage context, and return format. It is materially incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description only accounts for insurance_sector (the filter) and days (7-day cap). The two required parameters motive_id and agenda_ids, plus practice_id, are entirely undocumented in both schema and description, leaving the agent unable to populate the required inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific Doctolib "liste" variant with an insurance filter and a 7-day cap, which frames the resource and differentiates it from a presumed alternate view (e.g. get_availabilities). However, it never states the core verb/action (searching availability) explicitly, relying on the tool name to convey that.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies an alternative exists ('variante vue liste') but never says when to use this tool versus get_availabilities or find_slots. The 7-day limit and insurance filter are constraints, not usage guidance, and no prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cityB
Read-only

Communes françaises par nom ou code postal, avec coordonnées (geo.api.gouv.fr).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-lookup profile is covered. The description adds that results include coordinates and that geo.api.gouv.fr backs it, which is useful context, but says nothing about result limits, ambiguity handling, or matching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight sentence that front-loads the resource and lookup modes. Nothing wasted, though the parenthetical source reference is the least essential part.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. What is missing is routing guidance among the many search/autocomplete siblings and any note on result cardinality, which matters for a lookup tool in this crowded namespace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'query' parameter, so the schema gives no help. The description partially compensates by stating the two accepted forms (nom or code postal), but gives no format, length, or accent/partial-match semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (French communes) and the two lookup keys (name or postal code), plus what comes back (coordinates) and the data source. It is distinguishable from siblings like geocode_address or place_autocomplete, though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of the overlapping siblings (geocode_address, autocomplete, place_autocomplete) that an agent would need to disambiguate against. The scope 'françaises' is the only implicit boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filtersB
Read-only

Filtres de recherche proposés par Doctolib pour une spécialité (délais, secteurs, langues, vidéo).

ParametersJSON Schema
NameRequiredDescriptionDefault
specialityYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a read-only, open-world operation. The description adds the nature of the returned filters (délais, secteurs, langues, vidéo), which is useful context. However, it does not state authentication needs, rate limits, or response structure beyond what the output schema likely provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that efficiently conveys the tool's purpose and the kinds of filters returned. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema and annotations, the description gives adequate high-level purpose but misses practical details an agent needs: where to obtain a valid specialty value (e.g., from list_specialities) and any usage constraints. The output schema presumably covers return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the single required parameter 'speciality'. The description only says 'pour une spécialité', which restates the parameter name without explaining format, source, or constraints. Minimal compensation for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource: search filters for a given specialty, with examples of filter types (wait times, sectors, languages, video). It is clear enough to distinguish from siblings like list_specialities or search_practitioners, though it lacks an explicit verb and does not name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage context is 'for a specialty', which is implied by the required parameter. There is no when-to-use guidance, no exclusions, and no mention of alternatives such as list_specialities for obtaining valid specialty values.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_practitionersA
Read-only

Praticiens d'une spécialité autour d'un lieu (ville/code postal/adresse ou lat+lng), triés par distance.

Chaque résultat donne : distance, adresse, motif principal (id, nom, nouveaux patients acceptés ?), agendas, secteur de conventionnement, moyens de paiement, langues, profile_id (→ practitioner_practical_info), slug (→ practitioner_booking_info) et booking_url.

  • available_within_days : seulement ceux avec un créneau sous N jours (filtre Doctolib, incomplet).

  • languages : codes Doctolib (gb, es, de, it, ar, pt, ru, cn…).

  • Les bornes de téléconsultation en pharmacie sont exclues par défaut.

  • online_booking_only=False inclut les fiches annuaire (pas de RDV en ligne, souvent téléphone uniquement).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lngNo
cityNo
limitNo
languagesNo
radius_kmNo
specialityYes
sector_1_onlyNo
unscheduled_careNo
video_consultationNo
online_booking_onlyNo
available_within_daysNo
include_telehealth_kiosksNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint and openWorldHint already covering safety, the description adds useful behavioral context: result fields, the incomplete available_within_days filter, Doctolib language codes, default exclusion of pharmacy teleconsultation kiosks, and the effect of online_booking_only=False. It stops short of explaining pagination/limit behavior or rate limits, but it significantly enriches the annotation-only baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, followed by result fields and bulleted filter notes. The structure is efficient for a complex search tool, though the result-field list is dense and some parameter gaps remain rather than being addressed compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter search tool with no output schema and 0% schema description coverage, the description gives a useful purpose statement and output overview. However, it leaves many parameters undocumented and omits pagination/limit behavior, so it is only minimally adequate for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 13 parameters, so the description must compensate. It clarifies speciality, location broadly, available_within_days, languages, online_booking_only, and the default telehealth kiosk exclusion, but leaves lat vs lng vs city, radius_km, limit, sector_1_only, unscheduled_care, and video_consultation unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb/resource/scope: find practitioners of a specialty around a location, sorted by distance. It also names the detail-lookup siblings via profile_id → practitioner_practical_info and slug → practitioner_booking_info, so an agent can distinguish this search tool from follow-up tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns and gives filter caveats, but it never says when to choose this tool over siblings such as search_availabilities, find_slots, or get_availabilities. There is no explicit when/when-not guidance or tool-selection routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sitemapB
Read-only

Sitemaps publics Doctolib : 'sitemap' (index), 'sitemap_specialities/1', 'sitemap_skills/1' (1604 actes), 'sitemap_practitioner_doctors/1'… (≈ 295 000 fiches au total). Renvoie les URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNositemap

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful scale context (≈295,000 records, an index plus per-category sitemaps), which warns the agent about large result sets, but it says nothing about pagination, format (XML vs JSON), or error behavior for unknown names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: it names the resource, gives examples, states the return, and stops. The dense inline list of names with parenthetical counts is slightly cluttered but every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations cover the read-only/open-world profile. However, for a tool that can surface hundreds of thousands of URLs, the description omits pagination behavior and the exact nature of the payload, leaving an agent under-informed about how to consume it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'name' parameter has no schema description, so the description must compensate — and it partially does by giving four concrete valid values ('sitemap', 'sitemap_specialities/1', 'sitemap_skills/1', 'sitemap_practitioner_doctors/1'). It still omits patterns, the meaning of the '/1' suffix, or behavior when a nonexistent name is passed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the resource clearly ('Sitemaps publics Doctolib') and the action ('Renvoie les URL'), and enumerates concrete sitemap names with volume ('≈ 295 000 fiches au total'). It is distinguishable from all siblings, which are search/booking tools, though the phrasing is an example list rather than a crisp one-line purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It never says when to reach for this tool versus alternatives like search_practitioners or list_specialities, nor what prerequisites exist. The enumerated sitemap names only hint at valid inputs, not at usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_watchA
Destructive

Met en pause (ou supprime avec delete=True) une surveillance.

ParametersJSON Schema
NameRequiredDescriptionDefault
deleteNo
watch_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true but do not say which path is destructive. The description supplies exactly that missing context: the default behavior is a reversible pause and destruction only occurs with delete=True. It still omits whether a paused watch can be resumed, so it is not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the destructive branch parenthetically front-loaded after the default action. Efficient, though the extreme brevity leaves room that could have been spent on watch_id or pause-resume semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the tool is simple at two parameters. Still, for a mutation tool with 0% schema coverage the description should at minimum clarify what watch_id refers to and whether pausing is reversible; those gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the delete flag's effect (suppression) clearly, but says nothing about watch_id beyond it being required, leaving the key identifying parameter unexplained in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (pause/delete) on a specific resource (une surveillance), and distinguishes the two modes via delete=True. It does not, however, differentiate itself from siblings such as list_watches or run_watches_now, which an agent might confuse when deciding which watch tool to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'ou supprime avec delete=True' gives the condition that switches from pause to delete, which is implicit usage guidance. There is no statement of when this tool should be preferred over siblings, nor prerequisites (e.g. watch must exist or belong to the caller).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watch_areaC

Surveille TOUTE une zone : notification dès qu'un nouveau créneau apparaît chez n'importe quel praticien de la spécialité dans le rayon (via doctolib-mcp-watch, à planifier).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lngNo
cityNo
daysNo
labelNo
radius_kmNo
specialityYes
sector_1_onlyNo
new_patients_onlyNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds useful behavioral context beyond that: the watch is area-wide and fires on newly appearing slots, and "à planifier" signals it is scheduled/asynchronous. It still omits what is required for the watch to function (a location source) and how notifications are delivered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the scope (area-wide watch) front-loaded before the trigger condition. The trailing parenthetical about doctolib-mcp-watch is slightly awkward but does not waste much space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with no output schema and an asynchronous mode, the description is thin: it never states the location requirement, the meaning of the scheduling parenthetical, or how the agent should follow up. An agent could invoke it, but only by guessing at most parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 9 parameters, so the description must carry the burden. It only indirectly signals speciality ("de la spécialité") and radius ("dans le rayon"); lat, lng, city, days, label, sector_1_only and new_patients_only are never mentioned, and no format or precedence (lat/lng vs city) is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Surveille TOUTE une zone") and the trigger event (notify on a new slot from any practitioner of the speciality in the radius). The capitalized "TOUTE" implicitly contrasts with the per-practitioner sibling watch_practitioner, but that sibling is never named, so the differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no routing to alternatives despite the presence of watch_practitioner, list_watches, run_watches_now and stop_watch. The parenthetical "(via doctolib-mcp-watch, à planifier)" hints at a deferred/scheduled mechanism but does not tell the agent when to pick this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watch_practitionerB

Surveille un praticien : notification dès qu'un nouveau créneau s'ouvre (via doctolib-mcp-watch, à planifier). Sans motive_id : motif de l'URL, sinon le premier motif réservable. before = AAAA-MM-JJ ignore les créneaux plus tardifs.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
labelNo
beforeNo
motive_idNo
practice_idNo
url_or_slugYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the write-but-safe profile is covered. The description adds that registration happens via the external doctolib-mcp-watch mechanism and must be scheduled, which is real context beyond the annotations, but it omits persistence, auth needs, and deduplication behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core action front-loaded and the parameter caveats appended. No filler, though the parenthetical about doctolib-mcp-watch is slightly cryptic rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool that registers an ongoing watch, the description covers the trigger and two parameter behaviors but omits what is returned (watch identifier), how to cancel (stop_watch), and whether watches persist across runs. Adequate for a first call but not fully complete given six parameters and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning and only partially does. It usefully explains motive_id fallback behavior (URL motive, else first bookable motive) and the before=YYYY-MM-DD exclusion rule, but leaves days, label, practice_id, and url_or_slug completely opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ("Surveille") and resource ("praticien"), and states the concrete effect: a notification when a new slot opens. It is distinguishable from watch_area (which watches an area) by naming the practitioner scope, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to use this versus watch_area, run_watches_now, or list_watches, nor any prerequisites for setting up a watch. The clause "à planifier" hints the watch must be scheduled/run separately but does not say how or via which sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv1.0.0
    • First observedautocomplete
    • First observedbooking_link
    • First observedconfigure_notifications
    • First observedfind_slots
    • First observedgeocode_address
    • First observedget_availabilities
    • First observedlist_specialities
    • First observedlist_watches
    • First observedplace_autocomplete
    • First observedpractitioner_booking_info
    • First observedpractitioner_messaging
    • First observedpractitioner_practical_info
    • First observedrun_watches_now
    • First observedsearch_availabilities
    • First observedsearch_city
    • First observedsearch_filters
    • First observedsearch_practitioners
    • First observedsitemap
    • First observedstop_watch
    • First observedwatch_area
    • First observedwatch_practitioner

TDQS

B3.1/5.0

Scored across 21 tools

Disambiguation3/5

Most tools are distinguishable, but availability retrieval is split across search_practitioners, find_slots, get_availabilities, and search_availabilities, which an agent could easily confuse. Location resolution also overlaps across autocomplete, place_autocomplete, search_city, and geocode_address, though the descriptions provide useful distinctions.

Naming Consistency4/5

Tool names are consistently snake_case and mostly readable. However, the set mixes verb-led names (list_specialities, search_practitioners, get_availabilities) with noun-led names (practitioner_booking_info, sitemap), so it is not a perfect verb_noun pattern throughout.

Tool Count3/5

With 21 tools, the surface is on the heavy side for a Doctolib search and booking assistant. Many functions are justified, but some availability and location tools could potentially be consolidated or nested.

Completeness4/5

The server covers specialty lookup, location resolution, practitioner search, practical details, availability retrieval, booking links, watches, and notifications. The main gap is that it does not actually create, modify, or cancel appointments, but this may be intentional because booking is handled through the external Doctolib tunnel.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Athena Health's API for comprehensive healthcare practice management. Supports appointment scheduling, provider and department management, patient search, and available slot discovery through natural language.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to search the doktor.mx directory for over 56,000 verified doctors and medical specialists across Mexico. It provides tools for verifying professional licenses, finding specialists by symptoms or conditions, and checking medical insurance compatibility.
    10
    41 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables querying the Polish National Health Fund (NFZ) public API for medical waiting lists and service dictionary, allowing AI to compare wait times and find providers.
    3
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Doctolib that enables searching practitioners, checking availability, and booking or canceling appointments across Doctolib Germany, France, and Italy.
    2
    -