urssaf-vigilance-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@urssaf-vigilance-mcpcontrôle l'attestation Urssaf dans fournisseur.pdf pour le SIRET 12345678900012"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
urssaf-vigilance-mcp
Serveur MCP pour vérifier les attestations de vigilance Urssaf que vous recevez de vos fournisseurs et sous-traitants, et tenir votre tableau de suivi.
En France, tout donneur d'ordre qui conclut un contrat d'au moins 5 000 € HT doit obtenir de son cocontractant une attestation de vigilance Urssaf à la signature, puis tous les six mois, et en vérifier l'authenticité (art. L.8222-1 et D.8222-5 du Code du travail, L.243-15 du Code de la sécurité sociale). À défaut, il peut être tenu solidairement des cotisations et pénalités du sous-traitant en cas de travail dissimulé.
La vérification se fait normalement à la main sur urssaf.fr, code par code, derrière un captcha. Ce connecteur s'appuie sur l'API officielle de l'Urssaf « Attestations Vérification Code Sécurité », qui rend le même service sans captcha et permet de vérifier jusqu'à 100 attestations en un appel. Il ajoute la lecture du PDF reçu, le rapprochement champ à champ, le calcul de la fin de validité et la mise à jour d'un classeur Excel.
Ce projet n'est pas affilié à l'Urssaf. L'API et ses conditions d'utilisation sont décrites sur le Portail API Urssaf.
Sommaire
Related MCP server: eu-verify
Ce que fait le connecteur
Outil MCP | Rôle |
| Vérifie un code de sécurité (15 caractères) auprès de l'Urssaf. Renvoie un statut normalisé — |
| Même chose pour une liste de codes (lots de 100 par appel API). |
| Extrait les données d'un PDF d'attestation Urssaf (code, SIREN, raison sociale, dates, effectif, masse salariale, SIRET). Sans réseau. |
| Contrôle complet d'une attestation reçue : PDF + API + cohérence champ à champ + cocontractant attendu + fin de validité → verdict |
| Lit le tableau Excel de suivi : lignes, codes uniques, attestations dont l'échéance est dépassée. |
| Vérifie les codes du tableau (non encore vérifiés, ou tous) et, si demandé, écrit le résultat dans la colonne « Vérification ». |
| Crée un classeur de suivi vierge au bon format. |
| Configuration courante, sans secrets. |
Natures d'attestation reconnues : vigilance (AVG_UR, AVG_RSI), mais aussi CSG/CRDS, formation
professionnelle, employeur de personnel de maison, frontalier suisse, chiffre d'affaires micro-entrepreneur,
artistes-auteurs — l'API couvre toutes les attestations à code de sécurité émises par l'Urssaf.
Obtenir ses identifiants API Urssaf
L'API est gratuite et ouverte à toute personne physique ou morale, sous réserve de validation par l'Urssaf (« accès public et libre, tout demandeur est éligible »). Comptez 1 à 2 jours ouvrés.
Créer un compte sur le Portail API Urssaf : https://portailapi.urssaf.fr/fr/inscription (adresse e-mail professionnelle, SIRET de votre organisation).
Souscrire à l'API « Attestations Vérification Code Sécurité » : https://portailapi.urssaf.fr/fr/catalogue-api/prd/avcs/souscription-formulaire. Le formulaire demande l'usage prévu (vérification des attestations de vigilance de vos fournisseurs en tant que donneur d'ordre) et l'acceptation des CGU de l'API.
Recevoir les identifiants. L'équipe « Secteur API » de l'Urssaf Caisse nationale envoie un e-mail avec une archive protégée par mot de passe (le mot de passe arrive dans un second e-mail). Elle contient :
client-idetclient-secret(UUID) ;le scope :
attn.codes_securite;l'URL d'obtention du jeton :
https://api.urssaf.fr/api/oauth/v1/token;l'hôte des ressources :
https://api.urssaf.fr. Un accès dit « sandbox » (api-edi.urssaf.fr) peut être fourni avant la production.
Renseigner
URSSAF_CLIENT_IDetURSSAF_CLIENT_SECRETdans la configuration du serveur (ci-dessous), avecURSSAF_ENV=production.
Support : questions techniques via le centre de services ACOSS (JIRA), autres questions via le formulaire du portail. Documentation technique de l'API (PDF ACOSS v1.2) et changelog : onglets « Documentation » et « Changelog » de la page de l'API.
Installation
Python 3.11 ou plus récent.
git clone https://github.com/aghulas/urssaf-vigilance-mcp.git
cd urssaf-vigilance-mcp
python3 -m venv .venv
.venv/bin/pip install -e .Le paquet installe la commande urssaf-vigilance-mcp (serveur MCP sur stdio).
Sans identifiants, vous pouvez tester le connecteur en mode simulé : URSSAF_MOCK=1. Les codes
MOCKVALIDE00001, MOCKPERIMEE0001, MOCKMANQUANT001 renvoient respectivement une attestation valide,
périmée et incomplète ; tout autre code est inconnu.
Configuration
Toute la configuration passe par des variables d'environnement — aucun secret dans un fichier versionné.
Variable | Rôle |
| Identifiants OAuth2 reçus de l'Urssaf. |
|
|
|
|
|
|
| Chemin du classeur Excel de suivi utilisé par défaut par |
| Nom de la feuille ; sinon la première feuille contenant les en-têtes attendus est utilisée. |
|
|
| Délai HTTP en secondes (30). |
Le jeton OAuth2 (client_credentials, validité 1 h) est mis en cache et renouvelé automatiquement deux minutes avant expiration, conformément aux recommandations du portail.
Claude Desktop
Dans claude_desktop_config.json (macOS : ~/Library/Application Support/Claude/, Windows :
%APPDATA%\Claude\), ajoutez :
"urssaf-vigilance": {
"command": "/chemin/vers/urssaf-vigilance-mcp/.venv/bin/urssaf-vigilance-mcp",
"env": {
"URSSAF_ENV": "production",
"URSSAF_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"URSSAF_CLIENT_SECRET": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"URSSAF_FICHIER_SUIVI": "/chemin/vers/Suivi des attestations.xlsx",
"URSSAF_ECRITURE": "1"
}
}Sous Windows, remplacez command par C:\\chemin\\vers\\.venv\\Scripts\\urssaf-vigilance-mcp.exe. Redémarrez
Claude Desktop après modification.
Autres clients MCP
Tout client compatible MCP (Claude Code, Cursor, etc.) peut lancer urssaf-vigilance-mcp sur stdio avec les mêmes
variables d'environnement. Exemple en ligne de commande :
URSSAF_MOCK=1 .venv/bin/urssaf-vigilance-mcpTableau de suivi Excel
Le connecteur lit et met à jour un classeur Excel ordinaire — le vôtre, ou celui que crée suivi_creer_modele.
Il ne dépend pas des lettres de colonnes mais des en-têtes (recherche insensible à la casse et aux retours à
la ligne), ce qui permet d'ajouter vos propres colonnes (assurances, PPSPS, contacts…). Colonnes reconnues :
En-tête (motif) | Usage |
| Libre (chantier, marché, service). |
| Libre ; une ligne sans Lot ou sans Entreprise est ignorée (notes de bas de tableau). |
| Obligatoire. |
| Date de l'attestation. |
| Fin de validité (mise à jour quand l'Urssaf signale une attestation périmée). |
| Libre. |
| Obligatoire : le code à 15 caractères. Une entreprise présente sur plusieurs lots partage son code ; il n'est vérifié qu'une fois et le résultat est reporté sur chaque ligne. |
| Obligatoire : le connecteur y écrit « Authentique et valide - SIRET … (vérifié par API Urssaf le JJ/MM/AAAA) », ou la mention périmée / code inconnu, à la suite du texte existant (l'historique est conservé ; une mention « code à vérifier » est retirée). |
Un code est considéré « à vérifier » tant que sa cellule Vérification ne mentionne pas un contrôle effectué.
L'écriture dans le classeur n'a lieu que si l'appel demande ecrire=True et que URSSAF_ECRITURE=1 ; faites
une sauvegarde avant, et fermez le fichier dans Excel (en particulier sur un lecteur synchronisé).
Règles métier
Validité : une attestation de vigilance est valable six mois à compter de la fin de la période analysée (la date « à jour au » du document), pas de sa date d'édition. Le connecteur arrondit à la fin du mois : à jour au 31/08 → échéance 28/02 (29 en année bissextile). L'Urssaf applique la même règle dans ses réponses « attestation périmée depuis le … ». Une alerte est émise à 30 jours de l'échéance.
Un code valide ne suffit pas. Il prouve que le document existe chez l'Urssaf, pas que l'entreprise est votre cocontractant ni que l'établissement qui travaille pour vous est couvert.
controler_attestationvérifie donc aussi : nature = attestation de vigilance ; SIREN et SIRET du PDF égaux à ceux renvoyés par l'Urssaf ; présence dusiret_attendu(celui du devis ou du contrat) dans la liste des établissements.Verdicts : code inconnu, attestation périmée, SIREN différent ou SIRET attendu absent →
REFUS; écarts d'effectif, de masse salariale ou de date de certification, échéance proche →ALERTE; sinonOK.Une attestation sur l'honneur, un quitus d'une plateforme privée ou une capture d'écran ne remplacent pas l'attestation Urssaf. En cas de code inconnu, demandez à l'entreprise le PDF original téléchargé depuis son espace urssaf.fr.
Sécurité et engagements
En souscrivant à l'API, vous acceptez les CGU de l'Urssaf, qui imposent notamment : n'utiliser l'API que pour
vérifier des attestations (jamais pour obtenir des informations sur des comptes cotisants) ; ne divulguer ni
les identifiants ni les données retournées ; signaler toute faille de sécurité à contact.api@urssaf.fr sous
48 heures ; respecter les quotas (HTTP 429 en cas de dépassement). Repli en cas d'indisponibilité : l'outil web
https://www.urssaf.fr/accueil/outils-documentation/outils/verification-attestation.html.
Le connecteur ne stocke rien : pas de base de données, pas de journal des codes vérifiés ; les identifiants ne sont lus que dans l'environnement du processus.
Développement
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytest -q # tests sans réseau (respx)
python tests/fixtures/generer_fixture.py # régénère le PDF d'exemple (données fictives)Le dossier skills/ contient une skill Claude générique décrivant la procédure de vérification d'une attestation
reçue et la revue périodique du tableau ; adaptez-la à votre organisation (dossiers d'archivage, interlocuteurs).
Les contributions sont bienvenues : ouvrez une issue ou une pull request.
Licence
MIT — voir LICENSE.
Available Tools
8 toolscontroler_attestationA
Contrôle complet d'une attestation reçue : lecture du PDF, vérification du code auprès de l'Urssaf, cohérence champ à champ (SIREN, SIRET, période, effectif, masse salariale), cocontractant attendu (siret_attendu / siren_attendu) et fin de validité (6 mois après la période analysée, fin de mois).
Renvoie verdict OK | ALERTE (échéance < 30 j ou écarts mineurs) | REFUS (code inconnu, périmée, SIRET absent…).
| Name | Required | Description | Default |
|---|---|---|---|
| domaine | No | ||
| fichier | Yes | ||
| siren_attendu | No | ||
| siret_attendu | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does substantial work: it discloses that the tool reads the PDF, calls Urssaf to verify the code (an external dependency), and computes an explicit expiry rule (6 months after the analysed period, end of month). It also defines the three verdict tiers and the ALERTE threshold (<30 days). Gaps remain: it does not state that the operation is read-only/side-effect free, nor how Urssaf unavailability or unreadable PDFs are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense but well-formed blocks: the scope of the check first, the possible verdicts second. Front-loaded and free of filler, though the long parenthetical enumeration of checked fields is slightly list-like rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description is the only source of truth. It does define the verdict vocabulary and the validity rule, which is the critical return-value semantics. But it leaves the input contract incomplete ('fichier' format, 'domaine' meaning) and says nothing about side effects, failure modes, or cost/latency of the Urssaf lookup — significant for a tool that performs external verification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does add real meaning for two of the four parameters by explaining that siret_attendu/siren_attendu define the 'cocontractant attendu' and feed the coherence check. But 'fichier' (the only required parameter) is never described — path, URL or base64 is unknown — and 'domaine' is entirely unexplained, which is the most damaging omission.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Contrôle complet d'une attestation reçue') and enumerates exactly what the check covers: PDF reading, Urssaf code verification, field-by-field coherence, cocontractant matching, validity window. It is clearly a heavier, composite operation than the sibling 'verifier_attestation', but the description never names the siblings or explicitly contrasts with them, so differentiation is only implied by the word 'complet'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'attestation reçue' and 'Contrôle complet' imply this is the full end-to-end validation path, and the mention of siret_attendu/siren_attendu implies a cocontractant-matching use case. However, there is no explicit when-to-use versus 'verifier_attestation', 'verifier_attestations' or 'lire_attestation_pdf', and no stated preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etat_connecteurB
Configuration courante (sans secrets) : environnement, mode mock, fichier de suivi, écriture, version.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are provided, the description carries the full disclosure burden. It usefully states that secrets are excluded, which is meaningful security context. However, it does not explicitly state that the tool is read-only, that it has no side effects, or how the output is structured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single compact sentence that front-loads the key scope 'sans secrets'. The term 'écriture' is slightly ambiguous, but overall there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, listing the returned fields is a useful substitute for an output description. Missing field-level semantics, such as what 'écriture' and 'version' mean precisely, are a minor gap for a simple configuration-inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema baseline is 4. The description's list of configuration fields refers to returned content, not input parameters, and therefore does not create ambiguity about how to call the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource: the current connector configuration (without secrets). It also lists the fields returned, which makes the purpose clear and distinguishes it from the sibling attestation and tracking tools. However, it avoids an explicit action verb and instead relies on the email-like noun phrase 'Configuration courante'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no exclusion criteria, and no mention of alternatives among the sibling tools. An agent can infer that this is a diagnostic or state-inspection call, but that inference is not supported by explicit instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lire_attestation_pdfB
Extrait les données d'un PDF d'attestation de vigilance Urssaf (sans appel réseau).
Renvoie code de sécurité, SIREN, raison sociale, organisme émetteur, date de délivrance, date « à jour au » (fin de période analysée), effectif, masse salariale, SIRET des établissements.
| Name | Required | Description | Default |
|---|---|---|---|
| fichier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses that no network call occurs and enumerates the extracted fields, but says nothing about failure behavior on malformed/non-Urssaf PDFs or whether extraction is lossy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences (a purpose statement plus a return-field enumeration), front-loaded and free of padding. The list of fields earns its place because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The field enumeration compensates for the absent output schema, and the offline note covers a key behavioral trait. However, the single undocumented parameter's input format and error handling remain unaddressed, leaving gaps for an agent to fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists ('fichier') with 0% schema description coverage, and the description does not clarify whether it expects a file path, uploaded content, or base64. The 'sans appel réseau' note weakly implies a local file, but the input format remains ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (extrait) and resource (données d'un PDF d'attestation de vigilance Urssaf), so an agent knows this is a parser, not a verifier. It doesn't explicitly name the sibling verifier/controler tools to draw the boundary, leaving that differentiation implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(sans appel réseau)' hints that this is the offline parsing option versus the network-based verification siblings, but the description never says when to choose this over verifier_attestation or controler_attestation explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suivi_creer_modeleA
Crée un classeur Excel de suivi vierge (colonnes Opération, Lot, Entreprise, SIRET attendu, dates, statut, contact, code de sécurité, vérification) à l'emplacement indiqué. Refuse d'écraser un fichier existant.
| Name | Required | Description | Default |
|---|---|---|---|
| fichier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden. It does disclose one important behavioral trait — that an existing file will not be overwritten (an error/refusal rather than silent destruction) — which is genuinely useful. It says nothing about permissions, whether parent directories are created, or what the tool returns (e.g. the created path).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads what is created and where, the second adds the no-overwrite constraint. Nothing is redundant, though the column enumeration is long enough to slightly dilute the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter creation tool with no output schema and no annotations, the description covers the artifact and one safety behavior. It still omits the parameter's path semantics and the return value (does it return the file path?), which an agent calling it blind would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter 'fichier'. The phrase 'à l'emplacement indiqué' only weakly suggests the parameter is a file path; it does not specify expected format/extension, absolute vs relative path, or whether the directory must already exist. This leaves the agent guessing about the most important input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Crée') and a precisely scoped resource ('un classeur Excel de suivi vierge') and even enumerates the columns it will contain, so an agent knows exactly what artifact will exist afterwards. It is clearly distinguishable from siblings like suivi_lister or suivi_verifier, which operate on data rather than creating a blank template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The implied use case (produce a fresh tracking template to fill in later) is deducible, and the 'refuses to overwrite' clause effectively states one when-not condition. However, no sibling is named as an alternative and there is no guidance on when to use this versus suivi_lister/suivi_verifier or what to do if the file already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suivi_listerA
Lit le tableau Excel « Suivi des attestations par entreprise » : une entrée par ligne (opération, lot,
entreprise, date d'attestation, échéance, statut, code de sécurité, texte de vérification) et la liste des
codes uniques. seulement_a_verifier ne garde que les codes dont la vérification n'est pas tracée.
| Name | Required | Description | Default |
|---|---|---|---|
| fichier | No | ||
| seulement_a_verifier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does clarify that this is a read of an Excel file and what the returned entries contain, but says nothing about missing-file behavior, default file location, performance, or whether the read is side-effect free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and the shape of the result before the filter detail. Nothing is padding, though the long parenthetical field list is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned row fields and the unique-code list. The remaining gap is the unexplained `fichier` parameter and lack of failure-mode context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for both parameters. It explains `seulement_a_verifier` well (keeps only codes whose verification is untraced), but `fichier` is never mentioned — no meaning, format, or default behavior — leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lit le tableau Excel « Suivi des attestations par entreprise »') and enumerates the row fields plus the unique-code list, so the agent knows exactly what comes back. It does not explicitly contrast itself with sibling tools like suivi_verifier or verifier_attestations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is the filter semantic for `seulement_a_verifier` ('ne garde que les codes dont la vérification n'est pas tracée'), which implies a pre-check workflow. There is no explicit statement of when to call this versus suivi_verifier or verifier_attestations, and no prerequisites (e.g., whether the file must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suivi_verifierA
Vérifie auprès de l'Urssaf les codes du tableau de suivi (par défaut seulement ceux non encore
vérifiés ; tous=True pour re-contrôler l'ensemble, utile pour la revue mensuelle) et, si ecrire=True
et URSSAF_ECRITURE=1, écrit le résultat dans la colonne « Vérification » de chaque ligne concernée
(et l'échéance si périmée). Sans ecrire, aucune modification du fichier : simulation.
| Name | Required | Description | Default |
|---|---|---|---|
| tous | No | ||
| ecrire | No | ||
| fichier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that writing requires both `ecrire=True` and `URSSAF_ECRITURE=1`, specifies which columns are updated, and makes clear that omitting `ecrire` performs a simulation. It does not mention error handling or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense but front-loaded sentence that puts the primary action first and layers conditions efficiently. It is somewhat packed with parenthetical detail, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no annotations and no output schema, it covers the main write behavior and dry-run semantics but omits the `fichier` parameter and does not say what the verification returns. It is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It clearly explains `tous` and `ecrire`, but it never defines the `fichier` parameter or its expected format/path, leaving one of three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: verifying Urssaf codes in the tracking table and optionally writing results. It is clearly distinct from the attestation-focused siblings, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the default mode (only unchecked codes), the `tous=True` override for monthly re-checks, and the simulation behavior when `ecrire` is omitted. Usage is clear, but it does not route the agent against sibling tools or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifier_attestationA
Vérifie un code de sécurité (15 caractères) auprès de l'Urssaf.
Renvoie le statut normalisé : valide | perimee (avec perimee_depuis) | inconnue (fraude possible) |
incomplete | erreur, et pour une attestation valide : nature, dénomination, organisme, date de
certification, SIREN, SIRET des établissements, dernière période analysée, effectif, masse salariale.
domaine : URSSAF (défaut, employeurs) ou ISU (artisans / commerçants / indépendants).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| domaine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it enumerates normalized statuses (valide, perimee, inconnue, incomplete, erreur), explains that inconnue may indicate possible fraud, and lists the fields returned for a valid attestation. It does not mention side effects, authentication, or rate limits, but it substantially describes observable behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, followed by a compact status list and a final domain note. Every part contributes useful information, with only minor density in the status enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema and no annotations, the description must explain return behavior, and it does by listing both statuses and valid-attestation fields. It is nearly complete for invocation, missing only explicit sibling differentiation and operational constraints such as auth or rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, and it does: it specifies that `code` is a 15-character security code and explains `domaine` with URSSAF as default for employers and ISU for artisans, merchants, and independent workers. This is strong coverage, though the exact code format remains unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: verifying a 15-character security code with Urssaf. It is clear what the tool does, but it does not explicitly distinguish itself from the sibling verifier_attestations (plural) or controler_attestation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus the several sibling verification tools. The only orientation provided is about the `domaine` parameter, which is parameter semantics rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verifier_attestationsA
Vérifie plusieurs codes de sécurité (lots de 100 par appel API). Renvoie un résultat par code.
| Name | Required | Description | Default |
|---|---|---|---|
| codes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose two useful traits beyond the schema: a batch limit of 100 codes per API call and one result per code. It says nothing about error handling for malformed or unknown codes, authentication requirements, or whether the operation has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the batch constraint front-loaded before the return behavior. Every clause conveys distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must explain both safety profile and results. 'Un résultat par code' establishes cardinality but not what a result contains (valid/invalid status, reason codes), leaving a meaningful gap for a verification tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the single 'codes' array parameter is undocumented in the schema. The description partially compensates by identifying the values as security codes and capping batches at 100, but it omits format expectations (length, character set, duplicates) that an agent needs to build valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (verify multiple security codes) and makes the batch nature explicit with 'plusieurs codes', which implicitly separates it from the singular sibling verifier_attestation. It never names that sibling, so the differentiation is inferred from plurality rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Lots de 100 par appel API' implies the batch use case and gives a practical batching threshold, which is real usage context. However, there is no explicit statement of when to choose this over verifier_attestation, nor any exclusion or prerequisite.
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.
8 tool updates
v0.2.0- First observed
controler_attestation - First observed
etat_connecteur - First observed
lire_attestation_pdf - First observed
suivi_creer_modele - First observed
suivi_lister - First observed
suivi_verifier - First observed
verifier_attestation - First observed
verifier_attestations
TDQS
Scored across 8 tools
verifier_attestation and verifier_attestations differ only by a trailing 's', which is a real misselection risk despite the batch description. controler_attestation also overlaps heavily with lire_attestation_pdf + verifier_attestation since it performs both internally, though its composite verdict purpose is described. The suivi_* group is reasonably distinct.
The attestation tools use verb_noun (verifier_attestation, lire_attestation_pdf, controler_attestation) while the tracking tools invert to noun_verb (suivi_lister, suivi_verifier, suivi_creer_modele). Names remain readable and grouped by prefix, but the mixed verb/noun ordering and singular/plural pair deviate from a single convention.
Eight tools is well within the ideal 3-15 range and each covers a distinct step (single check, batch check, PDF extraction, full control, listing, batch verification, template creation, connector status). No filler tools.
The surface covers the full attestation lifecycle: extraction, verification, cross-check verdicts, Excel tracking, batch re-verification, template creation, and connector config. Minor gaps like updating/removing individual tracking rows or exporting results are not surfaced but can be worked around.
Maintenance
Related MCP Connectors
Verify French and UK companies, EU VAT and IBANs; screen OFAC, UN, EU and UK sanctions lists.
Keyless French company checks (Sirene, BODACC, VIES, sanctions), DPE compliance, product recalls
Generate & validate EN 16931 e-invoices (Factur-X, ZUGFeRD, XRechnung); verification certificates
Inspect XLSX/XLSM workbooks, validate email, generate SVG QR codes, and look up domain DNS and TLS.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides tools to search and retrieve French public procurement data (tenders, awarded contracts) and company information from official open APIs.-
- AlicenseNot gradedqualityDmaintenanceeu-verify lets AI agents verify any European business partner: company existence (official French SIREN registry), insolvency records (BODACC), EU VAT validation before invoicing (VIES), SIRET/IBAN/LEI checks, address and email verification, French business-day deadlines and EU public tenders. 10 paid MCP tools + a free catalog tool, plus 81 HTTP endpoints. Each call costs $0.001-$0.01 in USDC on1MIT
- AlicenseAqualityCmaintenanceEnables converting Indian GST tax invoices into government INV-01 JSON payloads via OCR and deterministic extraction, with tools to validate GSTINs and re-validate payloads, and reports exactly what it couldn't read.3MIT
- AlicenseAqualityCmaintenanceEnables verification of Japanese companies through JP-Verify's API: checking qualified-invoice registration (T-numbers) and Corporate Numbers, resolving company names to candidate numbers, retrieving official or romanised English names and addresses, and fetching major-shareholder tables from EDINET filings. Supports single or batch lookups with API-key or key-less sandbox access, returning raw responses plus quota and provenance metadata.419 PyPIMIT