insourcia
Server Details
Search French companies: financials, directors, ownership, M&A and insolvency events.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
18 toolscreate_saved_searchAIdempotentInspect
Creation d'une recherche sauvegardee pour l'utilisateur, visible dans l'app Insourcia (page /news - Veille).
Utiliser cet outil quand l'utilisateur veut SAUVEGARDER une recherche pour la suivre dans le temps (veille marche, suivi d'un secteur, pipeline de cibles) - pas pour une recherche ponctuelle (utiliser search_companies).
Fonctionnement :
Les filtres acceptes sont les MEMES que search_companies (query texte libre + filtres geographie/secteur/financier/dirigeants/groupe + advanced_filters JSON). Au moins un critere est requis.
Idempotent : si une recherche sauvegardee ACTIVE du meme nom existe deja pour l'utilisateur, elle est renvoyee telle quelle (already_exists=true), sans doublon et sans modifier son alerte.
enable_alert=true active une alerte quotidienne : l'utilisateur est notifie (page /news + email) quand de NOUVELLES societes entrent dans les criteres de la recherche. A la creation, une notification initiale recapitule les societes entrees dans les 90 derniers jours ; ensuite seules les entrees futures declenchent.
Reponse : { id, name, url (page /news), result_count (nombre de societes matchant actuellement, null si indisponible), filters (filtres normalises stockes, absent sur le hit idempotent), already_exists, alert_enabled }.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Nom de la recherche sauvegardee, court et parlant. Ex: "SaaS Bretagne CA > 5M". 1-255 caracteres. | |
| query | No | Nom, SIREN, mot-cle activite, ou "*" pour rechercher uniquement par filtres | |
| ville | No | Nom de ville. Plusieurs villes separees par virgule. Ex: "Paris,Lyon,Bordeaux" | |
| ca_max | No | CA maximum en euros. Ex: 50000000 pour 50M | |
| ca_min | No | CA minimum en euros. Ex: 5000000 pour 5M | |
| radius | No | Rayon de recherche en km (1-200) autour de latitude/longitude. Les trois vont ensemble : un triplet incomplet est refuse. | |
| region | No | Region. Ex: "Ile-de-France", "Bretagne", "Auvergne-Rhone-Alpes" | |
| statut | No | Filtre par statut au registre. DISSOLVED = dissoute ou radiee ; une societe en procedure collective reste ACTIVE jusqu'a sa radiation. Le statut ne se deduit PAS de date_radiation, absente sur environ 9,9M des 12,4M societes dissoutes. | |
| code_naf | No | Code NAF/APE. Exemples courants : - SaaS/Logiciel : 5829C, 6201Z, 6202A - Conseil IT : 6202A, 6209Z - Conseil management : 7022Z - Fintech : 6419Z, 6499Z - Biotech/Pharma : 2120Z, 7211Z - E-commerce : 4791A, 4791B - BTP : 4120A, 4120B - Restauration : 5610A, 5610C Plusieurs codes separes par virgule. | |
| is_cotee | No | true pour les societes cotees en bourse uniquement, false pour les exclure | |
| latitude | No | Latitude du centre pour une recherche par rayon (WGS84). A fournir avec longitude ET radius. | |
| longitude | No | Longitude du centre pour une recherche par rayon (WGS84). A fournir avec latitude ET radius. | |
| cagr_ca_max | No | Croissance CA max sur 1 an en % (ex: 50 pour +50%) | |
| cagr_ca_min | No | Croissance CA min sur 1 an en % (ex: 20 pour +20%) | |
| code_postal | No | Code postal du siege. Ex: "75001", "69001". Plusieurs separes par virgule. | |
| departement | No | Code departement. Ex: "75", "33", "69" | |
| est_filiale | No | true = filiales uniquement, false = entreprises independantes uniquement | |
| has_website | No | true pour ne retourner que les entreprises ayant un site web | |
| effectif_max | No | Effectif maximum (nombre de salaries) | |
| effectif_min | No | Effectif minimum (nombre de salaries) | |
| enable_alert | No | true pour etre notifie quotidiennement des nouvelles societes qui matchent la recherche. Defaut: false. | |
| filter_annee | No | Annee de l'exercice financier. Filtre les entreprises dont le dernier bilan publie correspond a cette annee. Ex: 2024 pour ne voir que les bilans 2024. Combiner avec ca_min pour "societes ayant fait 5M de CA en 2024". | |
| siren_groupe | No | SIREN de la tete de groupe. Retourne toutes les societes du meme groupe. Ex: "352383715" pour lister toutes les filiales de LVMH. | |
| dirigeant_nom | No | Nom de famille du dirigeant (recherche exacte). Ex: "GUILLEMOT". Combine avec dirigeant_prenom et dirigeant_naissance pour desambiguiser les homonymes. | |
| groupe_parent | No | Nom du groupe parent (recherche textuelle). Ex: "LVMH", "Bouygues" | |
| plan_en_cours | No | Societes executant un plan (redressement, sauvegarde ou cession). Distinct de procedure_collective : sous plan, la periode d'observation est terminee. | |
| tresorerie_max | No | Tresorerie maximum en euros | |
| tresorerie_min | No | Tresorerie minimum en euros | |
| advanced_filters | No | ||
| dirigeant_prenom | No | Prenom du dirigeant. A utiliser avec dirigeant_nom. Ex: "Yves" | |
| resultat_net_max | No | Resultat net maximum en euros | |
| resultat_net_min | No | Resultat net minimum en euros | |
| age_dirigeant_max | No | Age maximum des dirigeants (annees). Ex: 50 pour moins de 50 ans. Filtre si au moins un dirigeant correspond. | |
| age_dirigeant_min | No | Age minimum des dirigeants (annees). Ex: 60 pour 60 ans et plus. Filtre si au moins un dirigeant correspond. | |
| appartient_groupe | No | true = uniquement les societes appartenant a un groupe : filiales declarees OU soupcon de groupe fort (groupe_pont probable). Complement exact de independant_strict (ne pas envoyer les deux en meme temps). | |
| date_creation_max | No | Date de creation maximum (ISO). Ex: "2021-12-31" pour les entreprises creees avant 2022 | |
| date_creation_min | No | Date de creation minimum (ISO). Ex: "2021-01-01" pour les entreprises creees apres 2021 | |
| groupe_pont_siren | No | SIREN de la tete de groupe INFEREE (soupcon de groupe via dirigeant-pont). Retourne toutes les societes rattachees au meme groupe soupconne (non declare). A distinguer de siren_groupe (lien capitalistique declare). | |
| est_tete_de_groupe | No | true = uniquement les tetes de groupe | |
| independant_strict | No | true = uniquement les societes reellement independantes : exclut les filiales declarees ET les societes avec un soupcon de groupe fort (groupe_pont probable). Les soupcons plus faibles (possible/soupcon) ne sont pas exclus. | |
| dirigeant_naissance | No | Naissance du dirigeant pour desambiguiser les homonymes, granularite mois : format YYYY-MM. Ex: "1975-03" (un YYYY-MM-DD est accepte mais le jour est ignore). Pour une desambiguisation au jour pres, utiliser search_director_companies. | |
| procedure_collective | No | Procedure collective EN COURS (etat courant, pas l'historique). Valeurs: "liquidation", "redressement", "sauvegarde", "conciliation", "autre", "plan_redressement", "plan_sauvegarde", "plan_cession". Plusieurs separes par virgule. Une procedure cloturee ne matche pas : les societes dont la liquidation est close en sont exclues. | |
| societe_mere_etrangere | No | true = filiales de groupes etrangers uniquement |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| name | Yes | |
| filters | No | |
| result_count | Yes | |
| alert_enabled | Yes | |
| already_exists | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description enriches the annotations substantially. It refines idempotentHint=true by explaining the exact semantics: same name + ACTIVE status → returned as-is with already_exists=true, no duplicate, no modification to the alert. It also details the enable_alert behavior (daily notification, initial 90-day recap, future entries only). All of this is genuinely additive beyond the bare idempotentHint=true flag and consistent with readOnlyHint=false/destructiveHint=false.
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 long but tightly structured: purpose, when-to-use, Fonctionnement (behavior/idempotency/alerts), then the response shape in a clear code-style block. Every paragraph earns its place for a tool with 43 parameters and nuanced idempotent and alert semantics. The most important decision-relevant info (what it does, when to use) is front-loaded.
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 tool of this complexity the description is remarkably complete: purpose, usage routing, idempotency semantics, alert lifecycle, parameter model cross-reference, and the full response shape (id, name, url, result_count, filters, already_exists, alert_enabled). The output schema covers return values, and the 98%-coverage schema handles parameter specifics, so nothing an agent needs to call it correctly is missing.
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 98%, so the schema already carries the heavy lifting — baseline is 3. The description adds real conceptual value on top: it consolidates 40+ parameters into a mental model ('les filtres acceptes sont les MEMES que search_companies... groupe + advanced_filters JSON'), states the 'at least one criterion required' rule, and explains enable_alert's meaning in prose rather than as a bare boolean. That pushes it above the schema-only baseline.
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: 'Creation d'une recherche sauvegardee pour l'utilisateur', plus the concrete UI destination (page /news - Veille). It differentiates itself from the sibling search_companies by contrasting 'saving a search to track over time' vs 'one-off search', so an agent can tell the tools apart without inspecting schemas.
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?
Explicit and complete: 'Utiliser cet outil quand l'utilisateur veut SAUVEGARDER une recherche... pas pour une recherche ponctuelle (utiliser search_companies)'. Names the alternative tool directly and gives concrete example use-cases (veille marche, suivi de secteur, pipeline de cibles). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companyARead-onlyIdempotentInspect
Fiche complete d'une entreprise francaise identifiee par son SIREN.
Utiliser cet outil pour une entreprise a la fois.
Une societe peut etre mise sous surveillance via watch_company (alerte optionnelle sur les evenements futurs : procedures collectives, cessions, changements de dirigeants).
Contenu de la fiche :
Identite — forme juridique, date creation, date_immatriculation (RCS), date_cloture_exercice (JJ-MM, date de cloture comptable recurrente), denomination_usuelle si presente, capital social, siege (adresse complete rue+numero, code postal, departement, region), activite (code NAF + libelle + objet_social si disponible + description si disponible), effectif. Le code LEI (Legal Entity Identifier) est expose au top-level pour les societes ayant un identifiant ESEF/GLEIF (typiquement les cotees). Si radiee : successeur (siren, denomination).
Financier — date_cloture (annee) et type_bilan (K=consolide, C=complet/social, S=simplifie) : un CA en bilan K (consolide groupe) n'est pas comparable a un bilan C (social). CA, croissance CA, resultat net, marge nette, EBITDA, marge EBITDA, dette nette, effectif moyen.
Contact — site web, telephone, email (pro), LinkedIn (pro).
Gouvernance — dirigeants principaux (president, DG), structure PM le cas echeant.
Groupe - appartenance a un groupe (est_filiale, nom du groupe), parent direct et ultime (denomination, SIREN, pays), societe_mere (holding mere directe : siren, denomination, pays, lei - source distincte, souvent renseignee quand parent_direct/ultime sont absents), tete de groupe (est_tete_de_groupe, siren_groupe), nb filiales directes. Absent = independante.
IFRS — si disponible (societes cotees), donnees financieres consolidees IFRS : CA, resultat net, EBITDA, total actif. Absent pour les societes non cotees.
Signaux — cotation, procedures collectives (historique avec type, date, tribunal, jugement), a_fusionne, modifications capital, transferts siege, changements denomination, est_societe_mission, est_ess, reconstitution_capitaux_propres, dernier_depot_date, comptes confidentiels, date radiation.
Cessions — total, derniere_date, historique[] (date, type, cedant, cessionnaire, activite, prix). Null si aucune.
Donnees publiques — marches_publics (nb, montant, types), subventions (nb, montant, regions), brevets (nb total, nb actifs), salons (nb participations, secteurs). Null si aucune donnee.
Fonds d'investissement — bloc fonds si l'entreprise est detenue par un fonds (PE/VC) : nom_fonds, siren_fonds (SIREN du fonds, permet de chainer vers get_company), type_fonds, annee_entree_fonds, nb_fonds_actuels. Null sinon.
Pour approfondir : get_financials (historique multi-annees), get_directors (detail dirigeants), get_events (timeline BODACC/evenements de l'entreprise).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN a 9 chiffres | |
| include_fields | No | Champs root/financiers supplementaires a injecter dans la fiche (parite avec search_companies). Exemple : ['nb_dirigeants','source_esef','dernier_depot_date']. Limite par le plan (3 sur free, illimite sur Pro). |
Output Schema
| Name | Required | Description |
|---|---|---|
| siren | Yes | |
| _user_plan | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnly/idempotent/destructive annotations, adding rich behavioral context: Bilan K vs C comparability caveats, section-by-section null semantics ('Absent = independante', 'Null si aucune'), conditional data availability for listed vs unlisted companies, and the distinction between parent_direct/ultime and societe_mere sources. No contradiction with annotations exists.
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?
Although long, the description is highly structured with numbered content sections and front-loaded purpose and usage guidance. Each section adds distinct value, and the many null/absence caveats earn their place by preventing misinterpretation of the response.
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 description is exceptionally complete for a complex data-rich tool: it covers the full response structure, field availability conditions, financial comparability warnings, related tools, and null semantics. With an output schema present, return-value documentation is not needed, and this description still exceeds expectations.
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 100%, so the input schema already documents both siren and include_fields well. The description adds minimal parameter-specific meaning beyond identifying the company by SIREN and emphasizing 'one company at a time'; it does not elaborate on include_fields beyond what the schema already provides. Baseline 3 is appropriate.
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 opens with a clear, specific statement: it returns the complete record of a French company identified by its SIREN. It distinguishes itself from siblings by explicitly limiting scope to one company at a time and naming deeper-dive alternatives like get_financials, get_directors, and get_events.
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 says to use this tool for one company at a time and points to watch_company for monitoring and get_financials/get_directors/get_events for deeper analysis. It lacks an explicit statement about what to use for multiple companies (e.g., search_companies), so it is clear but not fully exhaustive in routing to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_graphARead-onlyIdempotentInspect
Cartographie des entites autour d'UNE entreprise (par SIREN) : graphe ORIENTE et TYPE construit sur les mandats RCS/RNE et les liens de groupe.
Utiliser cet outil pour visualiser ou analyser la structure d'un groupe : holdings, filiales, societes soeurs, dirigeants communs. Complementaire de get_directors (detail des mandats d'UNE societe) et de search_director_companies (empreinte d'UNE personne).
Reponse : nodes[] (entreprises et personnes physiques) + edges[] (aretes orientees source -> cible) :
mandat_pm : societe dirigeante -> societe dirigee (role, est_actif ; dates de mandat en best-effort, souvent absentes)
filiale : societe mere -> filiale (lien associe unique RNE, detention 100% implicite)
parent_ultime : parent ultime (GLEIF, grands groupes) -> societe
mandat_pp : personne physique -> societe dirigee (role)
Points cles :
Les commissaires aux comptes sont EXCLUS des aretes (un CAC n'est pas de la gouvernance).
Ids : entreprises "co:" ; personnes "pp:||" (date de naissance en precision mois) ; parents etrangers hors index "co:ext:".
Pas de pourcentages de detention (non disponibles dans les sources publiques utilisees).
depth=1 : liens directs de la racine. depth=2 (defaut) : expansion depuis les noeuds structurants (parents, societes dirigeantes) - jamais depuis les filiales pour eviter l'explosion sur les grands groupes.
Expansion via les personnes (defaut ON, depth=2) : les dirigeants de la RACINE tirent leurs AUTRES societes dans le graphe (holdings personnelles, SCI, structures soeurs d'un meme gerant = groupes de fait sans holding). Expansion depuis la racine uniquement, jamais depuis les niveaux suivants. Desactivable avec expand_persons=false pour un graphe purement capitalistique.
Garde hub-dirigeant : un dirigeant de la racine qui est un mandataire professionnel (expert-comptable / officier en serie) n'est PAS etendu - son portefeuille est un carnet de clients, pas le groupe. Detecte par un footprint eleve (plus de 50 societes dirigees) OU un mandat dans un cabinet comptable/audit. Le dirigeant reste dans le graphe (il est officier declare de la racine) mais ses autres societes ne sont pas tirees. Ces dirigeants sont listes dans meta.truncated.hub_directors.
Caps par noeud (20 filiales, 20 societes dirigees, 40 societes par personne) et global (max_nodes) : les troncatures sont signalees dans meta.truncated (dont hub_directors pour les mandataires non etendus) - le graphe peut etre partiel.
Filtres : include_personnes (defaut true), include_sci (false = exclure les SCI), include_ceased (false = exclure les societes cessees), expand_persons (defaut true). La racine n'est jamais filtree.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Profondeur du graphe (1 = liens directs, 2 = defaut) | |
| siren | Yes | SIREN a 9 chiffres de la societe racine | |
| max_nodes | No | Nombre max de noeuds (defaut 100) | |
| include_sci | No | false = exclure les SCI (categorie juridique 65xx) | |
| expand_persons | No | false = ne pas etendre le graphe via les autres societes des dirigeants de la racine (defaut: true) | |
| include_ceased | No | false = exclure les societes cessees | |
| include_personnes | No | Inclure les dirigeants personnes physiques. Defaut: true |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| edges | Yes | |
| nodes | Yes | |
| siren | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses substantial behavior beyond the read-only annotations: orientation and edge types, exclusion of commissaires aux comptes, expansion rules and their pitfalls, hub-director guard, node caps, truncation reporting, and lack of detention percentages. This is exactly the kind of behavior an agent needs to interpret unexpected or partial results.
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 long, but the complexity of the tool justifies it. It is well-structured with clear sections for response shape, key behaviors, and filters, and is front-loaded with the core purpose before moving to edge cases. A little trimming could improve scannability, but nothing is redundant.
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?
Given the graph tool's complexity, the description is remarkably complete: it covers node ID formats, edge types, defaults, expansion behavior, guardrails, truncation notification, and filter semantics. Even with an output schema present, the description adds the interpretive knowledge needed to use the graph correctly.
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 100%, so the baseline is 3, but the description adds meaningful context for depth, expand_persons, and filters: what depth levels actually traverse, when expand_persons=false yields a purely capitalist graph, and that the root is never filtered. It does not merely restate the schema.
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 opens with a precise statement of what the tool does: maps entities around one company by SIREN as a directed, typed graph. It further names sibling alternatives get_directors and search_director_companies, clarifying how this tool differs from entity-detail and person-footprint tools.
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 explicitly states when to use the tool ('visualiser ou analyser la structure d'un groupe') and what it complements, giving concrete sibling alternatives and their scopes. The filter descriptions and expansion rules also give actionable guidance on how to tailor the call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_riskARead-onlyIdempotentInspect
Score de risque credit d'UNE entreprise francaise (par SIREN).
Retourne le grade de risque (AAA -> D), la probabilite de defaut a 3/6/12 mois (taux du grade, master-scale) et les 5 facteurs principaux (aggravants / attenuants).
Reserve au plan Pro. Reponses possibles :
entreprise scoree : { scorable:true, risk:{ grade, grade_default_rate, factors, as_of, model } }
entreprise non scoree (pas de comptes recents) : { scorable:false, risk:null }
SIREN inconnu : erreur 404.
Utiliser pour une entreprise a la fois (use case risque fournisseur / due diligence).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN a 9 chiffres |
Output Schema
| Name | Required | Description |
|---|---|---|
| risk | Yes | |
| siren | Yes | |
| reason | No | |
| scorable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark it as read-only and idempotent; the description adds useful behavioral detail beyond that, including the three possible response shapes, the 404 error for unknown SIRENs, and the Pro plan restriction. This gives the agent a clear picture of edge cases without contradicting annotations.
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 well-structured, front-loads the core behavior, and uses bullets for the concrete response variants. Every line earns its place: scope, output, response shapes, error case, plan restriction, and usage guidance.
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 tool with an output schema already present, the description covers all essential context: input format, output semantics, non-scored companies, unknown-SIREN handling, access restriction, and the intended use case. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is fully documented with one required parameter (siren) and its description 'SIREN a 9 chiffres.' The tool description reinforces that the SIREN identifies a French company but adds no new parameter-level meaning beyond what the schema already provides.
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 the tool's exact purpose: scoring a single French company by SIREN and returning its credit risk grade, default probabilities, and top factors. It is unambiguous and clearly distinct from sibling tools such as get_company or get_financials, which do not focus on credit risk.
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 explicitly says to use it for one company at a time and names the primary use cases (supplier risk / due diligence). It does not explicitly mention when to prefer sibling tools, but the specialized nature of the endpoint makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directorsARead-onlyIdempotentInspect
Detail des dirigeants d'une entreprise avec structure hierarchique.
Retourne les dirigeants classes par importance (decisionnaires en premier). Deux types d'entrees :
PP (personne physique) : nom, prenom, role, annee de naissance, date_debut_mandat, date_fin_mandat
PM (personne morale) : denomination, SIREN, role, date_debut_mandat, date_fin_mandat, avec un tableau representants[] listant les personnes physiques qui la representent (nom, prenom, role dans la PM, dates de mandat)
Inclut les commissaires aux comptes (role="CAC") avec leur date de debut/fin de mandat. Utile pour identifier le mandataire actif vs sortant.
Par defaut, seuls les mandataires actifs sont retournes. Utiliser include_inactive=true pour inclure l'historique.
Utiliser cet outil pour une entreprise a la fois.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de resultats (defaut 20, max 100) | |
| siren | Yes | SIREN a 9 chiffres | |
| offset | No | Pagination (defaut 0) | |
| include_inactive | No | Inclure les mandataires inactifs (historique). Defaut: false |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| siren | Yes | |
| message | No | |
| _user_plan | No | |
| pagination | No | |
| denomination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, and the description adds substantial behavioral detail: sorting by importance, inclusion of CACs, the PP/PM structure, nested representatives, active-vs-inactive filtering, and the one-company constraint. It discloses what the caller should expect beyond the schema.
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 well-structured with a clear summary, useful bullet points, and a front-loaded purpose. It is longer than necessary in places, such as repeating the include_inactive behavior already present in the schema, but every section contributes useful context.
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 description is complete for a single-company directors tool: it explains the required SIREN, the response structure, sorting, active/inactive behavior, CAC inclusion, and confirms one company per call. With an output schema present and annotations covering safety, nothing essential is missing.
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 100%, so the schema already documents siren, limit, offset, and include_inactive. The description restates the default active-only behavior but does not add significant new parameter-level semantics; it mainly details the output shape, which is covered by the output schema.
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 opens with a clear verb and resource: it details the directors of a company with hierarchical structure. It further specifies the two entry types (PP/PM), notes that results are ordered by importance, and closes with 'one company at a time,' which helps distinguish it from sibling search tools.
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 practical context: it is for a single company, active directors are returned by default, and include_inactive=true adds history. It does not explicitly name an alternative like search_directors or state when that sibling should be used, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsARead-onlyIdempotentInspect
Timeline unifiee des evenements d'UNE entreprise (par SIREN).
Fusionne cessions[] + procedures[] + dates scalaires (depot_comptes, augmentation_capital, marche_public, subvention, radiation, creation) en un flux chronologique decroissant.
Utiliser cet outil pour une entreprise a la fois. Pour de la prospection cross-SIREN, utiliser search_events.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filtrer par type(s) d'evenement (CSV) | |
| limit | No | Nombre d'evenements (defaut 50, max 200) | |
| siren | Yes | SIREN a 9 chiffres | |
| offset | No | Pagination (defaut 0) | |
| date_max | No | Date max (YYYY-MM-DD) | |
| date_min | No | Date min (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| siren | Yes | |
| pagination | Yes | |
| denomination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses meaningful behavioral details: it merges cessions[], procedures[], and scalar dates into a single descending chronological timeline. This explains the tool's output semantics in a way annotations alone do not.
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 compact and front-loaded: the first line states the core purpose, the second clarifies the data fusion behavior, and the third gives usage guidance. Every sentence earns its place with no redundant wording.
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 description covers the tool's scope, merge behavior, ordering, single-company constraint, and the alternative for broader searches. Since an output schema exists, the description does not need to enumerate return fields, and the input schema already documents parameters.
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 100%, so the schema already documents all six parameters. The description adds some semantic context about SIREN scoping and chronological ordering, but it does not need to describe each parameter in detail.
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 clearly states the tool provides a unified timeline of events for one company by SIREN, and explicitly distinguishes it from search_events for cross-SIREN prospecting. The verb 'fusionne' and the resource 'evenements d'UNE entreprise' make the purpose specific and actionable.
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 explicitly states when to use this tool ('une entreprise a la fois') and directs users to search_events for cross-SIREN prospecting. This is direct, unambiguous routing to the correct sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsARead-onlyIdempotentInspect
Historique financier detaille d'une entreprise sur plusieurs exercices.
Defaut plan-aware :
Plan free : mode
compact(~40 champs / exercice). Compte de resultat complet (CA -> resultat net en passant par EBITDA, REX, financier, exceptionnel, IS), bilan abrege PCG (actif immobilise net, stocks, creances clients, disponibilites, total general actif, total actif ; capital social, reserves, report a nouveau, capitaux propres, provisions, dettes financieres, dettes fournisseurs, dettes fiscales/sociales, total dettes, total passif), ratios (tresorerie, dette nette, BFR, marges, ratio endettement, CAF, delais paiement), dividendes verses, effectif moyen.Plan pro : mode
fullpar defaut (~140 champs / exercice, audit financier exhaustif). Override explicite viadetail=compactsi on veut la vue resumee.
Mode detail=full (audit financier exhaustif) : retourne TOUS les champs financiers disponibles (~140 par exercice). Sur plan gratuit, renvoie 403 upgrade_required ; sur plan Pro c'est le defaut.
Mode fields (recommande pour 1-5 ratios additionnels au-dessus de compact) : passer fields=["roe","bfr_jours_ca","autonomie_financiere"] ajoute les champs cibles a chaque exercice sans gonfler la reponse. Plus de 130 champs disponibles : ratios (roe, taux_marge_brute, liquidite_generale, capacite_remboursement, etc.), postes detailles (achats_marchandises, salaires_traitements, etc.), immobilisations brutes (terrains_brut, constructions_brut, etc.), reserves (reserve_legale, primes_emission_fusion_apport, etc.), croissance (cagr_ebitda_3ans, cagr_rn_signed_5ans, etc.).
Bloc ifrs : pour les societes cotees, retourne en plus un objet ifrs avec les agregats comptes consolides (chiffre_affaires, ebitda, bpa, dividendes, etc.).
Rendu : la reponse inclut _layout, qui decrit par section (compte de resultat, bilan actif, bilan passif, ratios, dividendes, effectif) l'ordre PCG des lignes, leur libelle francais (line.label), leur niveau d'indentation (level, 2 = lignes "dont ...") et leur nature (kind : value, subtotal, total). exercices[annee][line.key] porte la valeur ; null = poste absent de la source. _layout.not_applicable_pcg: true signale un plan comptable sectoriel (bilan B banque, A assurance) ; _layout.missing_pcg_lines liste les lignes PCG absentes de notre source. Montants en euros ; _layout.doc_url pointe la documentation du format.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN a 9 chiffres | |
| years | No | Nombre d'exercices (defaut 3, max 10) | |
| detail | No | compact (~40 champs, defaut sur plan free) ou full (~140 champs, audit exhaustif, defaut sur plan pro). Sans valeur, le serveur applique le defaut du plan de l'utilisateur. | |
| fields | No | Champs financiers supplementaires a injecter dans chaque exercice. Exemple : ['roe','bfr_jours_ca','autonomie_financiere']. Limite par le plan (3 sur free, illimite sur Pro). | |
| type_bilan | No | K (consolide), C (complet/social), S (simplifie). Sans filtre : meilleure priorite (K > C > S) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ifrs | No | |
| siren | Yes | |
| _layout | No | |
| message | No | |
| exercices | No | |
| _user_plan | No | |
| denomination | No | |
| upgrade_hint | No | |
| fields_skipped | No | |
| dernier_exercice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the call as read-only/idempotent/non-destructive, and the description adds substantial context beyond that: plan-gated 403s, mode defaults by plan, null semantics for missing items, the _layout structure, sector-specific plan nuances, and euro units. This is rich behavioral disclosure that fully carries its weight.
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?
Although the description is long, it is well-structured into distinct mode blocks and front-loaded with the core purpose. Each section—compact, full, fields, ifrs, and _layout—provides invocation-relevant information, and the formatting makes scanning easy.
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?
Given that an output schema exists, the description did not need to explain return values, yet it still documents _layout, null behavior, source caveats, and failure modes like 403 on free plans. Combined with full schema coverage and read-only annotations, an agent has everything needed to select and invoke the tool correctly.
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 100%, so the baseline is 3, but the description adds meaningful semantics: field-count implications of compact vs full, free/pro limits on fields, categories of available fields, and the conditional ifrs block. It materially improves an agent's ability to choose parameter values beyond the schema's enum and format descriptions.
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 clearly identifies the resource and operation: 'Historique financier détaillé d'une entreprise sur plusieurs exercices' and later uses verbs like 'retourne TOUS les champs financiers disponibles'. It is distinct from sibling tools such as get_company or get_credit_risk, which cover different data domains.
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 strong internal usage guidance: plan-aware defaults, free-plan 403 behavior on full mode, and the explicit recommendation to use fields for 1-5 additional ratios. It does not name alternative sibling tools or state explicit when-to-use/exclusions relative to them, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsARead-onlyIdempotentInspect
Veille quotidienne de l'utilisateur : le fil d'actualite de ses societes surveillees, tel qu'il apparait sur la page /news de l'app Insourcia.
Utiliser cet outil pour repondre a "quoi de neuf sur ma veille ?", "qu'est-ce qui a bouge sur mes societes ?", "resume-moi ma veille de la semaine", ou avant de rediger un point hebdomadaire.
Contenu : les alertes reellement delivrees (email/push) ET l'activite des societes des listes de veille (changements de dirigeants, annonces BODACC : procedures collectives, cessions, radiations...), fusionnees et dedupliquees, les plus recentes d'abord. Couvre toutes les listes de l'utilisateur, tous espaces confondus (source.espace indique lequel).
Chaque ligne est HYBRIDE : "label" donne la phrase francaise prete a lire (identique a l'app) et "type"/"before"/"after"/"siren"/"date" donnent les champs structures pour filtrer ou raisonner. "date" est le jour de DETECTION (axe de fraicheur) ; "effective_date", quand present, est la date d'effet juridique.
unread_only=true ne renvoie que ce que l'utilisateur n'a pas encore lu.
"read_key" identifie chaque ligne : la passer a mark_news_read pour la marquer lue.
truncated=true signale plus de signaux que la limite demandee ; since_days et event_types permettent de resserrer (pas de pagination sur ce fil).
Si counts_are_partial=true, "total" et "unread_count" sont des PLANCHERS et non des totaux : le fil est compose sur une fenetre bornee (les 100 dernieres notifications et les 100 derniers evenements), et cette fenetre etait pleine.
hidden_by_plan, quand present, compte les signaux non retournes parce que le plan Free est limite a 5 par jour (meme plafond que la page /news, le digest email et le flux RSS).
Reponse : { news: [...], total, unread_count, last_seen_at, since_days, truncated, url (page /news) }. news vide = aucun signal sur la periode, ce n'est pas une erreur.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre max de signaux retournes (defaut 50, max 100) | |
| since_days | No | Profondeur d'historique en jours (defaut 90, max 365) | |
| event_types | No | Filtre sur les types d'evenements bruts. Ex: ["dirigeant_changed", "procedure_collective", "cession", "radiation"]. | |
| unread_only | No | true = uniquement les signaux non lus par l'utilisateur. Defaut : false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| news | Yes | |
| total | Yes | |
| truncated | Yes | |
| since_days | Yes | |
| last_seen_at | Yes | |
| unread_count | Yes | |
| hidden_by_plan | No | |
| counts_are_partial | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds substantial behavioral context beyond this: merged/deduplicated results sorted newest first, detection date vs effective date, truncated semantics, partial count floors, Free-plan hidden signals, and the fact that an empty news array is not an error.
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 longer than average but nearly every sentence carries operational value: purpose, usage, data composition, parameter caveats, and edge cases. It is front-loaded with the main purpose and usage, though a bit dense toward the end.
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 description covers response shape, filtering, read/unread semantics, read_key usage with mark_news_read, truncation, partial counts, plan limitations, and empty-result handling. Given an output schema is present and the tool has four optional parameters, nothing essential is missing for correct invocation.
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 100%, so the schema already documents all parameters with defaults and limits. The description adds some operational context for since_days and event_types by linking them to truncation and narrowing, but it does not add significant parameter-level meaning beyond what the schema provides.
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: a daily news feed of the user's watched companies as shown on the /news page. It further distinguishes itself from broader siblings by specifying that it merges and deduplicates real alerts plus watchlist activity across all spaces, which separates it from get_events or search_events.
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 explicit use cases: answering 'quoi de neuf sur ma veille ?', summarizing weekly updates, or before drafting a weekly report. It does not explicitly name alternative tools or state when not to use it, but the context and domain are clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_searchesARead-onlyIdempotentInspect
Liste des recherches sauvegardees de l'utilisateur (page /news - Veille de l'app Insourcia).
Utiliser cet outil :
AVANT create_saved_search, pour verifier qu'une veille equivalente n'existe pas deja et eviter les doublons de nom.
Pour repondre a "quelles veilles ai-je ?" / "quelles sont mes recherches sauvegardees ?".
Reponse : { saved_searches: [{ id, name, filters (filtres normalises stockes), result_count (nombre de societes matchant, null si indisponible), alert_enabled (alerte quotidienne nouvelles societes active ou non), url (page /news), created_at }], total }. Les recherches sont triees de la plus recente a la plus ancienne. Liste vide = aucune veille configuree.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre max de recherches retournees (defaut 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| saved_searches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already cover read-only, idempotent, and non-destructive behavior, the description adds valuable details: the exact response shape, field-level semantics (filters normalized, result_count nullable, alert_enabled), sorting order (most recent first), and empty-list meaning (no watches configured). This goes beyond the structured annotations and helps the agent interpret results correctly.
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 well-structured and economical: a one-line purpose, concise usage bullets, and a compact response shape. Every sentence contributes value, and the key context is front-loaded. There is no fluff or redundant restatement of the tool name or schema.
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 read-only list tool with one optional parameter, annotations, and an output schema, the description covers all necessary context: when to use, what it returns, field semantics, sorting, and empty behavior. Nothing needed to invoke or interpret the result is missing.
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 for the single limit parameter is 100%, and the schema already documents its default and bounds. The description does not add new parameter-level meaning, so the baseline of 3 is appropriate. There are no undocumented parameters requiring compensation.
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 begins with a specific verb-resource pair: 'Liste des recherches sauvegardees de l'utilisateur', clearly identifying this as the user's saved searches within the /news monitoring page. This distinguishes it from siblings like create_saved_search (creation), list_watched_companies (different resource), and get_news (news content). The purpose is immediately understandable and unambiguous.
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 explicitly says 'Utiliser cet outil' and gives concrete scenarios: before create_saved_search to avoid duplicate watches, and to answer questions like 'quelles veilles ai-je ?'. This directly names an alternative and the condition that selects this tool, which is exactly what an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watched_companiesARead-onlyIdempotentInspect
Liste des societes surveillees par l'utilisateur dans ses listes de veille (page /lists de l'app Insourcia).
Utiliser cet outil :
AVANT watch_company, pour verifier si une societe est deja surveillee et connaitre les listes existantes (leur nom exact).
Pour repondre a "quelles societes je surveille ?" / "qu'y a-t-il dans ma liste X ?".
list_name (optionnel) restreint a une liste precise (nom exact). Sans list_name, toutes les listes de l'utilisateur sont retournees. Un list_name qui ne matche aucune liste renvoie companies: [] et total: 0 (ce n'est pas une erreur : simplement aucune societe surveillee sous ce nom).
Reponse : { companies: [{ siren, company_name, naf_code, region, list_id, list_name, added_at }] (aplaties toutes listes confondues, plus recentes d'abord), lists: [{ id, name, company_count, alert_enabled }], total, url (page /lists) }.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No | Nom exact de la liste a consulter. Ex: "Surveillance", "Cibles M&A". Omis = toutes les listes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| lists | Yes | |
| total | Yes | |
| companies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and destructiveHint annotations. It explains that a non-matching list_name returns companies: [] and total: 0 rather than an error, that omitting list_name returns all lists, that results are flattened and sorted newest first, and it details the response fields. This is rich behavioral context.
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 well-structured with a clear purpose, bulleted usage cases, parameter behavior, and a response format section. It is somewhat detailed but every section carries useful information; no fluff or redundancy beyond a minor overlap with the schema's list_name description.
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 description covers all essential context: purpose, usage timing, optional parameter behavior, invalid-input behavior, response structure, ordering, and even the relevant app page. Nothing an agent needs to call this tool correctly is missing.
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 100%, so the schema already documents list_name. The description adds meaningful edge-case behavior: an unmatched list_name is not an error, and omission means all lists. This exceeds the baseline but is not needed for basic parameter understanding.
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: 'Liste des societes surveillees par l'utilisateur dans ses listes de veille'. It also ties the tool to a concrete app page (/lists) and gives example user questions, making the tool's purpose immediately clear and distinct from siblings like list_saved_searches.
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 clearly says when to use the tool: before watch_company, and to answer questions about watched companies or list contents. It does not explicitly mention when not to use it or compare it to list_saved_searches, but the usage context is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_news_readAIdempotentInspect
Marque comme lus des signaux precis de la veille de l'utilisateur (page /news de l'app Insourcia).
Utiliser cet outil quand l'utilisateur indique avoir traite des signaux ("ok j'ai vu", "marque-les comme lus").
Fonctionnement :
Prend les "read_key" renvoyees par get_news, telles quelles ; leur format varie selon le type de signal et n'est pas reconstructible.
Idempotent : une cle deja lue est ignoree (comptee dans already_read), sans erreur ni doublon.
Marquage cible uniquement : il n'existe volontairement pas de "tout marquer lu" via l'API, pour ne pas effacer par erreur la file de tri de l'utilisateur.
N'efface rien : la ligne reste visible dans l'app, elle passe simplement de "nouveau" a "lu".
Ne modifie pas la date de derniere visite de l'utilisateur sur /news.
Reponse : { marked_read, already_read, unread_remaining, url (page /news) }.
| Name | Required | Description | Default |
|---|---|---|---|
| read_keys | Yes | Cles "read_key" recopiees telles quelles depuis la reponse de get_news (leur format varie selon le type de signal). Max 500 par appel. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| marked_read | Yes | |
| already_read | Yes | |
| unread_remaining | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint, destructiveHint), the description details how idempotency manifests (already-read keys counted in already_read), what is preserved (line remains visible, last visit unchanged), and what the response contains. It also discloses the non-reconstructible key format, which agents need to know before calling.
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 purpose and usage triggers, then organized into tight bullets for behavior and response. No sentence is filler; each bullet conveys a distinct operational fact an agent must know.
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 one-parameter mutation with output schema and strong annotations, the description covers invocation source, idempotency, side effects, limits, and return fields. There is no missing information needed to call it correctly or to set user expectations.
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 already 100% and covers max 500 items and the read_key provenance. The description adds practical meaning by stressing 'telles quelles' and explaining that key format varies by signal type and is not reconstructible, which strongly guides correct invocation.
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 names a specific action ('Marque comme lus') and a precise resource ('signaux precis de la veille... page /news'), and its scope is differentiated from sibling get_news by referencing read_keys returned by get_news. It is immediately clear this is the state-change counterpart to a read operation, not a search or list tool.
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 gives explicit trigger phrases ('ok j'ai vu', 'marque-les comme lus') and states when not to use it: there is intentionally no mark-all behavior, so agents should not attempt bulk clearing. It also clarifies that the tool does not update last-visit date, preventing incorrect use for that purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_companiesARead-onlyIdempotentInspect
Rapprochement EN LOT de fiches mal identifiees vers leur SIREN - la forme qu'un CRM, un tableur ou un export CSV contient.
Utiliser cet outil quand l'utilisateur arrive avec une LISTE de societes a identifier ("voici 200 clients, retrouve leurs SIREN", "rapproche ce fichier", "nettoie ma base"). Pour UNE societe cherchee par son nom, utiliser search_companies : il rend des resultats classes, celui-ci rend une decision.
Difference de nature avec search_companies : cet outil REFUSE de trancher quand il n'est pas sur, et le dit. Il ne rend jamais un "meilleur resultat" par defaut.
Chaque fiche revient avec un status :
resolved : SIREN certain, exploitable directement.
review : plusieurs candidats plausibles OU nom trop generique ; les candidats sont retournes et le choix revient a l'utilisateur.
no_match : aucune correspondance.
Le champ reason explique un review : ambiguous_candidates (deux societes equivalentes, il faut departager), weak_name_overlap (le nom ne recouvre pas assez le candidat), missing_name, lookup_failed (panne technique, a rejouer - ce n'est PAS une absence de correspondance).
Le code postal double quasiment le taux de rapprochement automatique. Un jeton en trop dans le nom ("Carrefour Massy" au lieu de "Carrefour") degrade plus le rapprochement qu'un nom tronque.
Gratuit et instantane quand la fiche porte deja un identifiant : un siren, un siret (les 9 premiers chiffres) ou un numero de TVA francais sont resolus sans aucune recherche, et sans risque d'erreur.
Retourne results[] (dans l'ordre d'entree, avec l'id fourni s'il y en a un) et summary{total, resolved, review, no_match}. summary indique si le fichier est exploitable tel quel ou s'il demande un passage manuel.
| Name | Required | Description | Default |
|---|---|---|---|
| records | Yes | Fiches a rapprocher, 200 maximum par appel |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| summary | Yes | |
| _user_plan | No | |
| _quota_remaining_month | No | |
| _quota_remaining_today | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds rich behavior beyond those: the tool REFUSES to decide when unsure, returns per-record statuses, explains each review reason including lookup_failed as a replayable technical failure rather than a no-match, and preserves input order. No contradiction with annotations.
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 long but each paragraph earns its place: usage routing, behavioral distinction, status semantics, reason codes, data-quality guidance, identifier shortcut, and return shape. It is front-loaded with the core purpose and structured so an agent can quickly extract routing and status behavior.
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 batch tool with one complex parameter and an output schema, the description fully covers what an agent needs to decide when to use it and what responses to expect: statuses, reasons, order preservation, summary fields, and exploitability indicator. Nothing material is missing.
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 schema describes every field, so the baseline is 3. The description adds genuine value by explaining that an existing siren/siret/TVA is resolved without lookup, that siret uses the first 9 digits, that id is never used for matching, and that postal_code is the strongest non-identifier signal. This goes beyond the schema's per-field descriptions.
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 opens with a specific verb and resource: batch reconciliation of poorly identified records to SIREN. It clearly distinguishes itself from search_companies by contrasting 'liste de sociétés' with 'UNE société cherchée par son nom' and by noting this tool returns a decision rather than ranked results.
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 explicitly states when to use this tool: when the user has a LIST of companies to identify, with concrete example phrasings. It explicitly directs single-company lookups to search_companies and explains the behavioral difference, including refusing to decide when uncertain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesARead-onlyIdempotentInspect
Recherche d'entreprises francaises par nom, SIREN, activite, et criteres financiers.
include_fields : les valeurs d'un filtre financier ou donnees publiques n'apparaissent dans les resultats que si include_fields contient le champ correspondant. Mappings : dividendes_min→dividendes_verses, nb_marches_min→nb_marches_titulaire,montant_marches_titulaire, nb_subventions_min→nb_subventions,montant_subventions_total, nb_brevets_min→nb_brevets,nb_brevets_actifs, nb_cessions_min→nb_cessions,derniere_cession_date, a_fusionne→a_fusionne, est_societe_mission→est_societe_mission. Sans include_fields, les valeurs filtrees ne sont pas retournees.
Utiliser cet outil quand l'utilisateur cherche une entreprise par son nom ou veut explorer un secteur.
Recherche de dirigeant : utiliser dirigeant_nom + dirigeant_prenom pour filtrer les entreprises ayant un dirigeant de ce nom. Ajouter dirigeant_naissance (YYYY-MM, granularite mois ; un YYYY-MM-DD est accepte mais le jour est ignore) pour desambiguiser les homonymes. PERIMETRE : ce filtre matche aussi les dirigeants "remontes" depuis une personne morale representee (resolved_from_pm), donc plus large que les seuls mandats directs. Pour l'empreinte corporate DIRECTE d'UNE personne (mandats directs only, desambiguisation au jour pres, sortie centree personne avec le role par societe), preferer search_director_companies. Filtrer par tranche d'age via age_dirigeant_max et advanced_filters (age_dirigeant_min). Accepte aussi les SIRET a 14 chiffres dans le champ query.
Si l'utilisateur demande des informations sur une entreprise par son nom (ex: "donne moi le CA de Vinci"), utiliser d'abord cet outil pour trouver le SIREN, puis utiliser get_company ou get_financials avec le SIREN obtenu. Les resultats sont classes par pertinence ; effectif et statut aident a departager des homonymes.
Une recherche peut etre enregistree avec les memes filtres via create_saved_search (suivi dans le temps, alerte optionnelle sur les nouvelles societes entrant dans les criteres).
FILTRES : les criteres simples (geographie, secteur, effectif, statut, cotation, site web, procedure collective, dates, dirigeants, groupe, financier de base) sont des parametres de premier niveau. Les DEUX bornes d'un de ces criteres s'ecrivent au premier niveau, cote a cote : effectif_min avec effectif_max, et de meme pour ca, resultat_net, tresorerie, cagr_ca, date_creation, age_dirigeant. Ces sept bornes restent aussi acceptees dans advanced_filters, qui l'emporte si elles arrivent aux deux endroits. Tous les criteres avances - ratios, CAGR multi-annees, postes de bilan, delais de paiement, signaux publics (marches, subventions, brevets, cessions, fusions, ESS, societes a mission, fonds PE/VC), commissaires aux comptes, comptes confidentiels/consolides - vivent dans l'objet advanced_filters, dont le schema liste et type chaque cle. Une cle inconnue dans advanced_filters est rejetee (400), pas ignoree.
Organigramme d'un groupe : le filtre siren_groupe (valeur fournie par get_company) liste toutes les societes du groupe.
TRI : sort_by parmi relevance (defaut), chiffre_affaires, resultat_net, effectif_moyen, date_creation, capital. sort_order parmi asc, desc (defaut desc). Exemples : "les 10 plus gros CA" → sort_by=chiffre_affaires, "top 10 par capital social" → sort_by=capital, "les plus anciennes" → sort_by=date_creation sort_order=asc.
Non disponible : le filtrage par profil LinkedIn des dirigeants.
Par defaut retourne 20 resultats (max 20 free / 100 pro par page). La pagination est reservee au plan Pro.
La reponse inclut "_user_plan" ("free" ou "pro"). include_fields est limite a 3 champs par recherche sur free et 10 sur pro ; les champs au-dela de la limite sont ignores et listes dans include_fields_skipped.
Retourne : siren, denomination, code_ape, code_ape_lib, ville, departement, region, effectif, statut, date_creation, forme_juridique, est_filiale, groupe_parent + les champs demandes via include_fields. Si besoin d'historique multi-annees, enchainer avec get_financials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de resultats par page (defaut 20, max selon plan) | |
| query | Yes | Nom, SIREN, mot-cle activite, ou "*" pour rechercher uniquement par filtres | |
| ville | No | Nom de ville. Plusieurs villes separees par virgule. Ex: "Paris,Lyon,Bordeaux" | |
| ca_max | No | CA maximum en euros. Ex: 50000000 pour 50M | |
| ca_min | No | CA minimum en euros. Ex: 5000000 pour 5M | |
| cursor | No | Curseur de pagination retourne dans next_cursor de la reponse precedente. Ne pas fournir pour la premiere page. | |
| radius | No | Rayon de recherche en km (1-200) autour de latitude/longitude. Les trois vont ensemble : un triplet incomplet est refuse. | |
| region | No | Region. Ex: "Ile-de-France", "Bretagne", "Auvergne-Rhone-Alpes" | |
| statut | No | Filtre par statut au registre. DISSOLVED = dissoute ou radiee ; une societe en procedure collective reste ACTIVE jusqu'a sa radiation. Le statut ne se deduit PAS de date_radiation, absente sur environ 9,9M des 12,4M societes dissoutes. | |
| sort_by | No | Tri des resultats. Par defaut "relevance". Ex: "chiffre_affaires" pour trier par CA. | |
| code_naf | No | Code NAF/APE. Exemples courants : - SaaS/Logiciel : 5829C, 6201Z, 6202A - Conseil IT : 6202A, 6209Z - Conseil management : 7022Z - Fintech : 6419Z, 6499Z - Biotech/Pharma : 2120Z, 7211Z - E-commerce : 4791A, 4791B - BTP : 4120A, 4120B - Restauration : 5610A, 5610C Plusieurs codes separes par virgule. | |
| is_cotee | No | true pour les societes cotees en bourse uniquement, false pour les exclure | |
| latitude | No | Latitude du centre pour une recherche par rayon (WGS84). A fournir avec longitude ET radius. | |
| longitude | No | Longitude du centre pour une recherche par rayon (WGS84). A fournir avec latitude ET radius. | |
| sort_order | No | Ordre de tri. Par defaut "desc". Ex: "asc" pour les plus petits CA en premier. | |
| cagr_ca_max | No | Croissance CA max sur 1 an en % (ex: 50 pour +50%) | |
| cagr_ca_min | No | Croissance CA min sur 1 an en % (ex: 20 pour +20%) | |
| code_postal | No | Code postal du siege. Ex: "75001", "69001". Plusieurs separes par virgule. | |
| departement | No | Code departement. Ex: "75", "33", "69" | |
| est_filiale | No | true = filiales uniquement, false = entreprises independantes uniquement | |
| has_website | No | true pour ne retourner que les entreprises ayant un site web | |
| effectif_max | No | Effectif maximum (nombre de salaries) | |
| effectif_min | No | Effectif minimum (nombre de salaries) | |
| filter_annee | No | Annee de l'exercice financier. Filtre les entreprises dont le dernier bilan publie correspond a cette annee. Ex: 2024 pour ne voir que les bilans 2024. Combiner avec ca_min pour "societes ayant fait 5M de CA en 2024". | |
| siren_groupe | No | SIREN de la tete de groupe. Retourne toutes les societes du meme groupe. Ex: "352383715" pour lister toutes les filiales de LVMH. | |
| dirigeant_nom | No | Nom de famille du dirigeant (recherche exacte). Ex: "GUILLEMOT". Combine avec dirigeant_prenom et dirigeant_naissance pour desambiguiser les homonymes. | |
| groupe_parent | No | Nom du groupe parent (recherche textuelle). Ex: "LVMH", "Bouygues" | |
| plan_en_cours | No | Societes executant un plan (redressement, sauvegarde ou cession). Distinct de procedure_collective : sous plan, la periode d'observation est terminee. | |
| include_fields | No | Champs a inclure dans chaque resultat (CSV) pour que les valeurs d'un filtre financier ou donnees publiques apparaissent. Mapping filtre→champ : dividendes_min→dividendes_verses, tresorerie_min→tresorerie, dettes_financieres_min→dettes_financieres, dettes_fournisseurs_min→dettes_fournisseurs, ebitda_min→ebitda, marge_nette_min→marge_nette, marge_ebitda_min→marge_ebitda. Autres champs include_fields : ca, marge_brute, valeur_ajoutee, resultat_exploitation, resultat_net, total_actif, capitaux_propres, dette_nette, bfr, ratio_endettement, capacite_autofinancement, delai_paiement_clients_jours, delai_paiement_fournisseurs_jours, effectif_moyen, croissance_ca, croissance_ca_2ans, croissance_ca_3ans, croissance_ca_5ans, croissance_ebitda, croissance_ebitda_2ans, croissance_ebitda_3ans, croissance_ebitda_5ans, croissance_rn, croissance_rn_2ans, croissance_rn_3ans, croissance_rn_5ans, annee_financiere. Champs groupe (donnees publiques, disponibles sur tous les plans) : est_filiale, est_tete_de_groupe, groupe_parent, siren_groupe, nb_filiales_directes, societe_mere_etrangere. Champs cessions BODACC (donnees publiques) : nb_cessions, derniere_cession_date. Champs signaux BODACC (donnees publiques) : a_fusionne, nb_modifications_capital, nb_transferts_siege, nb_changements_denomination. Champs marches publics (donnees publiques DECP) : nb_marches_titulaire, montant_marches_titulaire. Champs subventions (donnees publiques) : nb_subventions, montant_subventions_total. Champs brevets (donnees publiques INPI) : nb_brevets, nb_brevets_actifs. Champs salons (donnees publiques) : nb_participations_salons. Champs ESS/Mission (donnees publiques) : est_societe_mission, est_ess. Champs participation de fonds (PE/VC) : a_fonds, nom_fonds, siren_fonds, type_fonds, annee_entree_fonds, nb_fonds_actuels. Champs LEI & provenance (cotees) : a_lei, lei, source_esef, source_gleif. Champs compteurs structuraux : nb_dirigeants, nb_etablissements, nb_representants_actifs, nb_fonds_actuels, nb_instruments_financiers. Champs evenements BODACC additionnels : nb_evt_modif_admin. Champs fraicheur evenementielle : derniere_evt_date, dernier_depot_date, dernier_marche_date. Mapping filtre avance→include_fields : capitaux_propres_min→capitaux_propres, total_actif_min→total_actif, dette_nette_min→dette_nette, bfr_min→bfr, resultat_exploitation_min→resultat_exploitation, ratio_endettement_min→ratio_endettement, nb_cessions_min→nb_cessions, nb_marches_min→nb_marches_titulaire, nb_brevets_min→nb_brevets. Sur le plan gratuit : seuls ca, resultat_net, effectif_moyen, croissance_ca, annee_financiere + les champs groupe + les champs BODACC/marches/subventions/brevets/salons/ESS sont disponibles. _user_plan dans la reponse indique le plan. Ex: filtre dividendes_min → include_fields="dividendes_verses" | |
| tresorerie_max | No | Tresorerie maximum en euros | |
| tresorerie_min | No | Tresorerie minimum en euros | |
| advanced_filters | No | ||
| dirigeant_prenom | No | Prenom du dirigeant. A utiliser avec dirigeant_nom. Ex: "Yves" | |
| resultat_net_max | No | Resultat net maximum en euros | |
| resultat_net_min | No | Resultat net minimum en euros | |
| age_dirigeant_max | No | Age maximum des dirigeants (annees). Ex: 50 pour moins de 50 ans. Filtre si au moins un dirigeant correspond. | |
| age_dirigeant_min | No | Age minimum des dirigeants (annees). Ex: 60 pour 60 ans et plus. Filtre si au moins un dirigeant correspond. | |
| appartient_groupe | No | true = uniquement les societes appartenant a un groupe : filiales declarees OU soupcon de groupe fort (groupe_pont probable). Complement exact de independant_strict (ne pas envoyer les deux en meme temps). | |
| date_creation_max | No | Date de creation maximum (ISO). Ex: "2021-12-31" pour les entreprises creees avant 2022 | |
| date_creation_min | No | Date de creation minimum (ISO). Ex: "2021-01-01" pour les entreprises creees apres 2021 | |
| groupe_pont_siren | No | SIREN de la tete de groupe INFEREE (soupcon de groupe via dirigeant-pont). Retourne toutes les societes rattachees au meme groupe soupconne (non declare). A distinguer de siren_groupe (lien capitalistique declare). | |
| est_tete_de_groupe | No | true = uniquement les tetes de groupe | |
| independant_strict | No | true = uniquement les societes reellement independantes : exclut les filiales declarees ET les societes avec un soupcon de groupe fort (groupe_pont probable). Les soupcons plus faibles (possible/soupcon) ne sont pas exclus. | |
| dirigeant_naissance | No | Naissance du dirigeant pour desambiguiser les homonymes, granularite mois : format YYYY-MM. Ex: "1975-03" (un YYYY-MM-DD est accepte mais le jour est ignore). Pour une desambiguisation au jour pres, utiliser search_director_companies. | |
| procedure_collective | No | Procedure collective EN COURS (etat courant, pas l'historique). Valeurs: "liquidation", "redressement", "sauvegarde", "conciliation", "autre", "plan_redressement", "plan_sauvegarde", "plan_cession". Plusieurs separes par virgule. Une procedure cloturee ne matche pas : les societes dont la liquidation est close en sont exclues. | |
| societe_mere_etrangere | No | true = filiales de groupes etrangers uniquement |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| _user_plan | No | |
| pagination | No | |
| upgrade_hint | No | |
| _quota_remaining_month | No | |
| _quota_remaining_today | No | |
| include_fields_skipped | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses many behavioral details not covered by annotations: unknown keys in advanced_filters are rejected (400), include_fields is limited to 3 on free and 10 on pro, pagination is Pro-only, default 20 results, _user_plan is returned, and results are sorted by relevance. It also explains that a company in collective procedure remains ACTIVE until radiation, and clarifies that date_radiation is missing for ~9.9M companies, providing deep transparency about edge cases.
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 highly detailed but somewhat verbose, with repeated mentions of include_fields mappings (twice) and plan limits. However, it is well-structured with clear sections (FILTRES, TRI, retour) and front-loads the primary use case, making it scannable despite length. The redundancy is minor and does not detract from usability.
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 description is comprehensive for the tool's complexity: it lists the default return fields, explains plan-specific limitations (free vs pro), mentions pagination cursor usage, and provides an example flow (search → get_company/get_financials). It also covers advanced topics like groupe filtering, director disambiguation, and edge cases (e.g., status vs. procedure), leaving no obvious gaps for an agent to misuse the 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?
While the input schema already provides descriptions for each parameter, the tool description adds significant semantic layers: mappings for include_fields (e.g., dividendes_min→dividendes_verses), clarification of advanced_filters key handling, and differentiation between declared groups (siren_groupe) and inferred ones (groupe_pont_siren). The description also explains the interaction between parameters (e.g., radius requires latitude+longitude) and provides examples for enums.
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 clearly states that the tool searches French companies by name, SIREN, activity, and financial criteria, and provides a specific use case (find SIREN then use get_company). It explicitly differentiates from search_director_companies by describing the direct vs. indirect mandate scope, making the purpose distinct and unambiguous.
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?
Extensive usage guidance is provided: when to use this tool first (e.g., for company info by name), how to combine filters, sorting examples, pagination limits, plan-specific behavior, and an explicit recommendation to prefer search_director_companies for direct mandates. The description also notes non-available filters (LinkedIn) and gives concrete examples for sort_by and sort_order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_director_companiesARead-onlyIdempotentInspect
Cartographie de l'empreinte corporate d'UNE personne physique : toutes les entreprises ou elle detient un mandat direct, identifiee de facon non ambigue par nom + prenom + date de naissance exacte.
C'est le pivot "personne -> entreprises", complement de search_directors (trouver la personne) et get_directors (dirigeants d'une entreprise). Cas d'usage M&A : tracer le perimetre de societes d'un fondateur/dirigeant (holdings, SCI, filiales) sans confondre les homonymes.
Parametres TOUS REQUIS : nom, prenom, date_naissance (format YYYY-MM-DD). La date de naissance est obligatoire : c'est elle qui distingue la bonne personne de ses homonymes. L'obtenir au prealable via search_directors ou get_directors (champ date_naissance).
Reponse : dirigeant { nom, prenom, date_naissance, annee_naissance } + data[] = entreprises { siren, denomination, role, ville, departement, code_ape, forme_juridique, est_tete_de_groupe } + pagination { total, returned, limit }. Resultat vide = aucun mandat direct trouve pour cette identite exacte (verifier la date_naissance).
Note : ne couvre que les mandats DIRECTS de la personne physique (exclut les dirigeants remontes depuis une PM representee, resolved_from_pm). C'est la difference de perimetre avec search_companies(dirigeant_nom/prenom/naissance), qui filtre plus large (inclut ces remontees, granularite mois) et retourne des entreprises, pas une empreinte centree personne. Pour la structure de detention capitalistique d'une entreprise, voir les champs groupe de get_company.
| Name | Required | Description | Default |
|---|---|---|---|
| nom | Yes | Nom de famille du dirigeant (requis). | |
| limit | No | Nombre d'entreprises a retourner (defaut 50, max 200). | |
| prenom | Yes | Prenom du dirigeant (requis). | |
| date_naissance | Yes | Date de naissance au format YYYY-MM-DD (requis, desambiguise les homonymes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| message | No | |
| dirigeant | No | |
| _user_plan | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly/idempotent/non-destructive hints, and the description adds valuable behavior: only direct mandates are returned, resolved_from_pm entities are excluded, and an empty result means no direct mandate for that exact identity. It also documents the response shape and pagination, going well beyond the annotation metadata.
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?
Although long, the description is efficiently structured: purpose first, then usage guidance, then parameters, response format, and exclusions. Every sentence contributes distinct information; none are filler.
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 read-oriented search tool with an output schema, rich annotations, and 100% parameter schema coverage, the description covers the use case, prerequisites, response contract, edge cases, and scope boundaries. Nothing an agent needs to select and invoke it correctly is missing.
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 100% and each parameter already has a description including the YYYY-MM-DD format and disambiguation role. The prose repeats the requirement that date_naissance is mandatory but does not add substantial new meaning beyond the schema, so the baseline of 3 applies.
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 opens with a precise verb and resource: mapping the corporate footprint of one natural person via all companies where they hold a direct mandate, disambiguated by exact name and birth date. It explicitly contrasts with search_directors and get_directors, so an agent can distinguish it from siblings without opening schemas.
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 states when to use the tool (M&A perimeter tracing), why date_naissance is mandatory and how to obtain it first via search_directors or get_directors, and what not to use it for (broader search_companies with resolved_from_pm). This is explicit routing to alternatives with exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_directorsARead-onlyIdempotentInspect
Recherche de personnes (dirigeants) a travers toutes les entreprises francaises, par nom de famille.
A la difference de search_companies (qui retourne des ENTREPRISES et accepte dirigeant_nom/dirigeant_prenom comme filtres), search_directors retourne directement des PERSONNES avec leur entreprise de rattachement. Cas d'usage : "toutes les entreprises ou siege un dirigeant nomme DUPONT", cartographie d'un reseau de mandats.
Parametres : nom (REQUIS, nom de famille), prenom (optionnel, desambiguise), role (optionnel, ex "President", "Gerant", "Administrateur"). Par defaut seuls les mandats actifs ; include_inactive=true pour inclure les anciens mandats.
Reponse : data[] = personnes { nom, prenom, civilite, role, role_description, date_naissance, annee_naissance, lieu_naissance, type_personne, entreprise { siren, denomination, ville, departement, code_ape } }. pagination { total (nb entreprises matchees), limit, returned }.
Homonymes : un meme nom+prenom recouvre souvent plusieurs personnes distinctes. date_naissance (et lieu_naissance) est le champ qui les distingue : deux dates differentes = deux personnes ; date absente = identite non confirmee ; meme date = meme personne.
Pour lister TOUTES les entreprises d'une personne donnee une fois sa date de naissance connue, enchainer avec search_director_companies (nom + prenom + date_naissance). Pour la fiche complete d'un dirigeant d'une entreprise donnee, utiliser get_directors avec le SIREN.
| Name | Required | Description | Default |
|---|---|---|---|
| nom | Yes | Nom de famille du dirigeant recherche (requis). | |
| role | No | Role/qualite (optionnel), ex: 'President', 'Gerant', 'Administrateur'. | |
| limit | No | Nombre d'entreprises a scanner (defaut 20, max 50). | |
| prenom | No | Prenom (optionnel) pour desambiguiser les homonymes. | |
| include_inactive | No | Inclure les mandats inactifs (defaut: false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| _user_plan | No | |
| pagination | No | |
| _quota_remaining_month | No | |
| _quota_remaining_today | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses meaningful behaviors: only active mandates are returned by default, include_inactive=true changes that, homonyms are disambiguated by date/lieu de naissance, and pagination.total counts matching companies rather than people. No contradiction with annotations.
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 main purpose is front-loaded and each paragraph has a clear role: sibling differentiation, parameter behavior, response shape, homonym handling, and chaining to other tools. It is long but dense; slight redundancy with the schema and output details prevents a 5.
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 description is complete for this tool's complexity: it covers scope, required parameters, defaults, homonym pitfalls, pagination semantics, and onward paths to sibling tools. Given the annotations and output schema, nothing essential is missing for correct invocation.
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 input schema already documents all 5 parameters at 100% coverage, so the baseline is 3. The description adds useful nuance: nom is required, prenom is for disambiguation, role gets concrete examples, and include_inactive is linked to the default active-only behavior. This elevates it above baseline, though it mostly restates schema details.
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 opening sentence states a specific action ('Recherche de personnes (dirigeants)') across all French companies by surname. It explicitly contrasts with search_companies, which returns companies, making the purpose and sibling distinction unmistakable.
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 provides concrete routing guidance: use search_directors to find people/directors by name, use search_director_companies to list all companies for a known person once the birth date is known, and use get_directors for a full company-director record via SIREN. It also distinguishes itself from search_companies, so an agent can choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsARead-onlyIdempotentInspect
Recherche unifiee d'evenements d'entreprise (cross-SIREN), basee sur notre index ES.
Renvoie des EVENEMENTS individuels (pas des entreprises) : { date, type, siren, denomination, data }. Couvre 8 types : cession (cessions de fonds), procedure (procedures collectives), depot_comptes, augmentation_capital, marche_public, subvention, radiation, creation.
Couvre les evenements BODACC (cessions, procedures collectives, radiations, creations) ainsi que les depots de comptes, augmentations de capital, marches publics et subventions derives des scalaires silver.
REGLE : preciser au moins un filtre region / departement / code_naf, OU un filtre d'evenement (date_min, date_max, cedant_siren, cessionnaire_siren, prix_min/max, tribunal, procedure_type) — sinon 400.
Cas d'usage :
"Cessions de fonds > 1M en Ile-de-France depuis 2024" → type="cession", region="Ile-de-France", date_min="2024-01-01", prix_min=1000000
"Procedures collectives a Lyon" → type="procedure", departement="69"
"Marches publics recents dans le BTP" → type="marche_public", code_naf="4120A"
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Types d'evenements (CSV) : cession, procedure, depot_comptes, augmentation_capital, marche_public, subvention, radiation, creation. Defaut : tous. | |
| limit | No | Nombre d'evenements (defaut 50, max 200) | |
| cursor | No | Curseur de pagination (plan Pro uniquement) | |
| region | No | Region. Ex: "Ile-de-France", "Bretagne" | |
| code_naf | No | Code NAF/APE (CSV possible) | |
| date_max | No | Date max (YYYY-MM-DD) | |
| date_min | No | Date min (YYYY-MM-DD) | |
| prix_max | No | Prix de vente max en euros (filtre cession) | |
| prix_min | No | Prix de vente min en euros (filtre cession) | |
| tribunal | No | Tribunal (filtre procedure, recherche partielle) | |
| departement | No | Code departement. Ex: "75", "69" | |
| cedant_siren | No | SIREN du cedant (filtre cession) | |
| procedure_type | No | Type(s) de procedure (CSV) : liquidation, redressement, sauvegarde, conciliation | |
| cessionnaire_siren | No | SIREN du cessionnaire (filtre cession) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| pagination | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond this: the output shape, the underlying ES index, the BODACC/silver scalar sources, the unconditional 400 error when the filter rule is violated, and the fact that events are returned individually rather than as companies.
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 long but every section earns its place: purpose, return shape, event types, data sources, the mandatory filter rule, and practical examples. It is front-loaded with the most important information and the examples are compact and immediately actionable.
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?
Given the tool's complexity (14 parameters, conditional filter requirement) and the presence of an output schema, the description is complete enough for an agent to call it correctly. It covers what the tool returns, which filters are mandatory, what event types exist, and how to translate real-world requests into valid parameters.
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 100%, so the baseline is 3. The description adds meaningful parameter-usage context by grouping filters, showing examples like type='cession' with region, date_min, and prix_min, and clarifying that certain filters apply to specific event categories (cession, procedure). This goes beyond the individual schema descriptions.
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 names a specific verb ('Recherche'), a resource ('evenements d'entreprise cross-SIREN'), and clearly states that it returns individual events, not companies. It also enumerates the 8 event types, which makes it easy to distinguish from company-level search tools like search_companies.
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 a hard invocation rule (at least one of region/departement/code_naf OR an event filter must be provided, otherwise 400) and provides concrete natural-language-to-parameters use cases. It does not explicitly contrast with get_events or state when not to use this tool, but the contextual guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unwatch_companyADestructiveIdempotentInspect
Retrait d'une societe de la surveillance : l'enleve d'une liste de veille de l'utilisateur (page /lists de l'app Insourcia). Inverse de watch_company.
Utiliser cet outil quand l'utilisateur veut ARRETER de suivre une societe ("je ne suis plus interesse par X", "enleve X de ma veille", "nettoie ma liste").
Fonctionnement :
Sans list_name, la societe est retiree de TOUTES les listes de l'utilisateur - c'est le sens naturel de "arrete de surveiller X". Avec list_name, seule cette liste est nettoyee.
Idempotent : si la societe n'est dans aucune liste (ou si la liste nommee n'existe pas), l'appel renvoie removed=false sans erreur.
La liste elle-meme n'est jamais supprimee, meme si elle devient vide. Une alerte active sur la liste reste active pour les autres societes.
Le retrait fonctionne meme pour une societe absente de l'index (radiee, disparue) : ce qui a pu etre ajoute peut toujours etre enleve.
list_watched_companies donne le nom exact des listes et les societes qu'elles contiennent.
Reponse : { siren, company_name (null si non renseignee), removed, removed_from: [{ list_id, list_name }], url (page /lists) }.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN a 9 chiffres de la societe a retirer de la veille | |
| list_name | No | Nom exact de la liste a nettoyer. Ex: "Surveillance", "Cibles M&A". Omis = retrait de toutes les listes de l'utilisateur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| siren | Yes | |
| removed | Yes | |
| company_name | Yes | |
| removed_from | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: omission of list_name removes from all lists, the operation is idempotent and returns removed=false when absent, the list itself is never deleted, alerts remain active, and removal works even for companies missing from the index. These details are not present in the annotations and are critical for correct use.
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 longer than average but well-organized with a usage line, bulleted behavior, and response shape, all relevant to correct invocation. It loses a point because the response format is largely redundant with the existing output schema.
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?
All edge cases an agent needs to handle are covered: absent company, missing list, empty list, active alerts, and cross-list removal. With the output schema present and the behavioral bullets, nothing essential is missing for correct invocation.
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 schema already documents both parameters thoroughly with 100% coverage, including the exact-name requirement and the omission behavior for list_name. The description largely repeats this information rather than adding new parameter-level semantics, so the baseline of 3 is appropriate.
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 opens with a specific verb and resource: removing a company from watchlists, tied to the /lists page. It identifies the tool as the inverse of watch_company, making it clearly distinguishable from the sibling tool without needing to open schemas.
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 explicitly states when to use the tool: whenever the user wants to stop following a company, with concrete phrasings such as 'je ne suis plus interesse par X' and 'enleve X de ma veille'. It also points to list_watched_companies as the way to obtain exact list names, covering prerequisites and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_companyAIdempotentInspect
Mise sous surveillance d'une societe : l'ajoute a une liste de veille de l'utilisateur, visible dans l'app Insourcia (page /lists).
Utiliser cet outil quand l'utilisateur veut SUIVRE une societe dans le temps (cible d'acquisition, concurrent, client, fournisseur a risque) - pas pour une simple consultation (utiliser get_company).
Fonctionnement :
list_name designe la liste cible ; la liste "Surveillance" est utilisee par defaut et creee automatiquement si besoin (idem pour toute liste nommee qui n'existe pas encore).
Idempotent : si la societe est deja dans la liste, l'appel renvoie already_watched=true sans creer de doublon.
enable_alert=true active une alerte quotidienne sur la liste : l'utilisateur est notifie des evenements FUTURS touchant les societes de la liste (annonces BODACC : procedures collectives, cessions... et changements de dirigeants). Pas de replay de l'historique.
Reponse : { siren, company_name (null si non renseignee), list_id, list_name, url (page /lists), already_watched, alert_enabled }.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN a 9 chiffres de la societe a surveiller | |
| list_name | No | Nom de la liste cible (1-100 caracteres). Defaut: "Surveillance". La liste est creee automatiquement si elle n'existe pas. | |
| enable_alert | No | true pour etre notifie des evenements futurs (BODACC, dirigeants...) sur les societes de la liste. Defaut: false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| siren | Yes | |
| list_id | Yes | |
| list_name | Yes | |
| company_name | Yes | |
| alert_enabled | Yes | |
| already_watched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining exactly what happens: auto-creation of lists, idempotent behavior with already_watched=true, daily alert semantics, future-only events with no history replay, and the response shape. It also aligns with idempotentHint=true and provides practical consequences of enabling alerts.
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 purpose, then gives clear usage guidance, a labeled 'Fonctionnement' section, and a concise response outline. It is detailed but every sentence contributes meaningful behavioral or selection information, and the structure makes it easy to scan.
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 description covers the main use case, alternatives, parameter behavior, alert semantics, idempotency, response fields, and the Insourcia UI context. Given the tool's moderate complexity and the presence of a complete output schema, nothing essential is missing for an agent to call it correctly.
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 100%, so the baseline is 3. The description adds value beyond the schema by explaining list_name as the target list, clarifying that any named list is auto-created, and detailing that enable_alert triggers a daily digest of future BODACC and director-change events. This is more than the schema alone provides, though not substantially more on the siren parameter.
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 opens with a specific verb and resource: 'Mise sous surveillance d'une societe' and 'l'ajoute a une liste de veille'. It clearly distinguishes the tool from get_company by stating this is for following a company over time, not simple consultation.
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 explicitly states when to use the tool: 'Utiliser cet outil quand l'utilisateur veut SUIVRE une societe dans le temps', and names the alternative for the excluded case: 'pas pour une simple consultation (utiliser get_company)'. This leaves no ambiguity about tool selection.
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. Dates show when Glama detected each change.
2 tool updates
- Changed
create_saved_search7 fields changed- added
Input schema / properties / age_dirigeant_minAdded value: +{ + "description": "Age minimum des dirigeants (annees). Ex: 60 pour 60 ans et plus. Filtre si au moins un dirigeant correspond.", + "type": "number" +} - added
Input schema / properties / ca_maxAdded value: +{ + "description": "CA maximum en euros. Ex: 50000000 pour 50M", + "type": "number" +} - added
Input schema / properties / cagr_ca_maxAdded value: +{ + "description": "Croissance CA max sur 1 an en % (ex: 50 pour +50%)", + "type": "number" +} - added
Input schema / properties / date_creation_maxAdded value: +{ + "description": "Date de creation maximum (ISO). Ex: \"2021-12-31\" pour les entreprises creees avant 2022", + "type": "string" +} - added
Input schema / properties / effectif_maxAdded value: +{ + "description": "Effectif maximum (nombre de salaries)", + "type": "number" +} - added
Input schema / properties / resultat_net_maxAdded value: +{ + "description": "Resultat net maximum en euros", + "type": "number" +} - added
Input schema / properties / tresorerie_maxAdded value: +{ + "description": "Tresorerie maximum en euros", + "type": "number" +}
- Changed
search_companies7 fields changed- added
Input schema / properties / age_dirigeant_minAdded value: +{ + "description": "Age minimum des dirigeants (annees). Ex: 60 pour 60 ans et plus. Filtre si au moins un dirigeant correspond.", + "type": "number" +} - added
Input schema / properties / ca_maxAdded value: +{ + "description": "CA maximum en euros. Ex: 50000000 pour 50M", + "type": "number" +} - added
Input schema / properties / cagr_ca_maxAdded value: +{ + "description": "Croissance CA max sur 1 an en % (ex: 50 pour +50%)", + "type": "number" +} - added
Input schema / properties / date_creation_maxAdded value: +{ + "description": "Date de creation maximum (ISO). Ex: \"2021-12-31\" pour les entreprises creees avant 2022", + "type": "string" +} - added
Input schema / properties / effectif_maxAdded value: +{ + "description": "Effectif maximum (nombre de salaries)", + "type": "number" +} - added
Input schema / properties / resultat_net_maxAdded value: +{ + "description": "Resultat net maximum en euros", + "type": "number" +} - added
Input schema / properties / tresorerie_maxAdded value: +{ + "description": "Tresorerie maximum en euros", + "type": "number" +}
18 tool updates
- Changed
create_saved_search3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "name", - "context" -]New value: +[ + "name" +]
- Changed
get_company3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
get_company_graph3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
get_credit_risk3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
get_directors3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
get_events3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
get_financials3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
get_news3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "context" -]
- Changed
list_saved_searches3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "context" -]
- Changed
list_watched_companies3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "context" -]
- Changed
mark_news_read3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "read_keys", - "context" -]New value: +[ + "read_keys" +]
- Changed
resolve_companies3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "records", - "context" -]New value: +[ + "records" +]
- Changed
search_companies4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / properties / include_fields / descriptionPrevious value: -"REQUIS des qu'un filtre financier est utilise. Champs financiers a inclure dans chaque resultat (CSV). Mapping filtre→champ : dividendes_min→dividendes_verses, tresorerie_min→tresorerie, dettes_financieres_min→dettes_financieres, dettes_fournisseurs_min→dettes_fournisseurs, ebitda_min→ebitda, marge_nette_min→marge_nette, marge_ebitda_min→marge_ebitda.\nAutres champs include_fields : ca, marge_brute, valeur_ajoutee, resultat_exploitation, resultat_net, total_actif, capitaux_propres, dette_nette, bfr, ratio_endettement, capacite_autofinancement, delai_paiement_clients_jours, delai_paiement_fournisseurs_jours, effectif_moyen, croissance_ca, croissance_ca_2ans, croissance_ca_3ans, croissance_ca_5ans, croissance_ebitda, croissance_ebitda_2ans, croissance_ebitda_3ans, croissance_ebitda_5ans, croissance_rn, croissance_rn_2ans, croissance_rn_3ans, croissance_rn_5ans, annee_financiere.\nChamps groupe (donnees publiques, disponibles sur tous les plans) : est_filiale, est_tete_de_groupe, groupe_parent, siren_groupe, nb_filiales_directes, societe_mere_etrangere.\nChamps cessions BODACC (donnees publiques) : nb_cessions, derniere_cession_date.\nChamps signaux BODACC (donnees publiques) : a_fusionne, nb_modifications_capital, nb_transferts_siege, nb_changements_denomination.\nChamps marches publics (donnees publiques DECP) : nb_marches_titulaire, montant_marches_titulaire.\nChamps subventions (donnees publiques) : nb_subventions, montant_subventions_total.\nChamps brevets (donnees publiques INPI) : nb_brevets, nb_brevets_actifs.\nChamps salons (donnees publiques) : nb_participations_salons.\nChamps ESS/Mission (donnees publiques) : est_societe_mission, est_ess.\nChamps participation de fonds (PE/VC) : a_fonds, nom_fonds, siren_fonds, type_fonds, annee_entree_fonds, nb_fonds_actuels.\nChamps LEI & provenance (cotees) : a_lei, lei, source_esef, source_gleif.\nChamps compteurs structuraux : nb_dirigeants, nb_etablissements, nb_representants_actifs, nb_fonds_actuels, nb_instruments_financiers.\nChamps evenements BODACC additionnels : nb_evt_modif_admin.\nChamps fraicheur evenementielle : derniere_evt_date, dernier_depot_date, dernier_marche_date.\nMapping filtre avance→include_fields : capitaux_propres_min→capitaux_propres, total_actif_min→total_actif, dette_nette_min→dette_nette, bfr_min→bfr, resultat_exploitation_min→resultat_exploitation, ratio_endettement_min→ratio_endettement, nb_cessions_min→nb_cessions, nb_marches_min→nb_marches_titulaire, nb_brevets_min→nb_brevets.\nSur le plan gratuit : seuls ca, resultat_net, effectif_moyen, croissance_ca, annee_financiere + les champs groupe + les champs BODACC/marches/subventions/brevets/salons/ESS sont disponibles. Verifier _user_plan dans la reponse pour connaitre le plan.\nEx: filtre dividendes_min → include_fields=\"dividendes_verses\""New value: +"Champs a inclure dans chaque resultat (CSV) pour que les valeurs d'un filtre financier ou donnees publiques apparaissent. Mapping filtre→champ : dividendes_min→dividendes_verses, tresorerie_min→tresorerie, dettes_financieres_min→dettes_financieres, dettes_fournisseurs_min→dettes_fournisseurs, ebitda_min→ebitda, marge_nette_min→marge_nette, marge_ebitda_min→marge_ebitda.\nAutres champs include_fields : ca, marge_brute, valeur_ajoutee, resultat_exploitation, resultat_net, total_actif, capitaux_propres, dette_nette, bfr, ratio_endettement, capacite_autofinancement, delai_paiement_clients_jours, delai_paiement_fournisseurs_jours, effectif_moyen, croissance_ca, croissance_ca_2ans, croissance_ca_3ans, croissance_ca_5ans, croissance_ebitda, croissance_ebitda_2ans, croissance_ebitda_3ans, croissance_ebitda_5ans, croissance_rn, croissance_rn_2ans, croissance_rn_3ans, croissance_rn_5ans, annee_financiere.\nChamps groupe (donnees publiques, disponibles sur tous les plans) : est_filiale, est_tete_de_groupe, groupe_parent, siren_groupe, nb_filiales_directes, societe_mere_etrangere.\nChamps cessions BODACC (donnees publiques) : nb_cessions, derniere_cession_date.\nChamps signaux BODACC (donnees publiques) : a_fusionne, nb_modifications_capital, nb_transferts_siege, nb_changements_denomination.\nChamps marches publics (donnees publiques DECP) : nb_marches_titulaire, montant_marches_titulaire.\nChamps subventions (donnees publiques) : nb_subventions, montant_subventions_total.\nChamps brevets (donnees publiques INPI) : nb_brevets, nb_brevets_actifs.\nChamps salons (donnees publiques) : nb_participations_salons.\nChamps ESS/Mission (donnees publiques) : est_societe_mission, est_ess.\nChamps participation de fonds (PE/VC) : a_fonds, nom_fonds, siren_fonds, type_fonds, annee_entree_fonds, nb_fonds_actuels.\nChamps LEI & provenance (cotees) : a_lei, lei, source_esef, source_gleif.\nChamps compteurs structuraux : nb_dirigeants, nb_etablissements, nb_representants_actifs, nb_fonds_actuels, nb_instruments_financiers.\nChamps evenements BODACC additionnels : nb_evt_modif_admin.\nChamps fraicheur evenementielle : derniere_evt_date, dernier_depot_date, dernier_marche_date.\nMapping filtre avance→include_fields : capitaux_propres_min→capitaux_propres, total_actif_min→total_actif, dette_nette_min→dette_nette, bfr_min→bfr, resultat_exploitation_min→resultat_exploitation, ratio_endettement_min→ratio_endettement, nb_cessions_min→nb_cessions, nb_marches_min→nb_marches_titulaire, nb_brevets_min→nb_brevets.\nSur le plan gratuit : seuls ca, resultat_net, effectif_moyen, croissance_ca, annee_financiere + les champs groupe + les champs BODACC/marches/subventions/brevets/salons/ESS sont disponibles. _user_plan dans la reponse indique le plan.\nEx: filtre dividendes_min → include_fields=\"dividendes_verses\"" - changed
Input schema / requiredPrevious value: -[ - "query", - "context" -]New value: +[ + "query" +]
- Changed
search_director_companies3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "nom", - "prenom", - "date_naissance", - "context" -]New value: +[ + "nom", + "prenom", + "date_naissance" +]
- Changed
search_directors3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "nom", - "context" -]New value: +[ + "nom" +]
- Changed
search_events3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "context" -]
- Changed
unwatch_company3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
- Changed
watch_company3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / contextRemoved value: -{ - "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "siren", - "context" -]New value: +[ + "siren" +]
1 tool update
- Changed
resolve_companies3 fields changed- added
Output schema / properties / _quota_remaining_monthAdded value: +{ + "type": "number" +} - added
Output schema / properties / _quota_remaining_todayAdded value: +{ + "type": "number" +} - added
Output schema / properties / _user_planAdded value: +{ + "type": "string" +}
18 tool updates
- Changed
create_saved_search3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "name" -]New value: +[ + "name", + "context" +]
- Changed
get_company3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
get_company_graph3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
get_credit_risk3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
get_directors3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
get_events3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
get_financials3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
get_news3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
list_saved_searches3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
list_watched_companies3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
mark_news_read3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "read_keys" -]New value: +[ + "read_keys", + "context" +]
- Changed
resolve_companies3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "records" -]New value: +[ + "records", + "context" +]
- Changed
search_companies3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "context" +]
- Changed
search_director_companies3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "nom", - "prenom", - "date_naissance" -]New value: +[ + "nom", + "prenom", + "date_naissance", + "context" +]
- Changed
search_directors3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "nom" -]New value: +[ + "nom", + "context" +]
- Changed
search_events3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
unwatch_company3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
- Changed
watch_company3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "siren" -]New value: +[ + "siren", + "context" +]
18 tool updates
- First observed
create_saved_search - First observed
get_company - First observed
get_company_graph - First observed
get_credit_risk - First observed
get_directors - First observed
get_events - First observed
get_financials - First observed
get_news - First observed
list_saved_searches - First observed
list_watched_companies - First observed
mark_news_read - First observed
resolve_companies - First observed
search_companies - First observed
search_director_companies - First observed
search_directors - First observed
search_events - First observed
unwatch_company - First observed
watch_company
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
European business data — French company check, EU VAT validation, legal search.
French company data: financials, dirigeants, BODACC, INPI filings, PEP checks, alerts.
French & European company registry for AI agents: KYB, sanctions, annual accounts. x402, no API key.
Search French and European case law and French legal texts (codes, statutes, treaties).
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search and retrieve detailed profiles of 25 million French companies from the official government registry, including directors, activity codes, and establishment data, without requiring an API key.-
- FlicenseNot gradedqualityBmaintenanceEnables querying French business registers (RNE, BODACC) and trademarks via INPI APIs. Provides tools to search companies, retrieve legal status, directors, beneficial owners, collective procedures, and trademark details.-
- AlicenseBqualityFmaintenanceEnables interaction with the French business search API from data.gouv.fr, allowing users to search for French companies by text or geographical criteria and access essential business information.21819MIT
- AlicenseAqualityCmaintenanceEnables querying French company registry data by name, SIREN, or SIRET, returning clean JSON with registry codes translated into plain French labels. Supports searching, full profiles, establishment listings, and decoding of NAF/legal form/workforce codes without requiring an API key.4290MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a clearly distinct resource and action: company lookup, financial history, directors, events, graph, risk, batch resolution, watchlist lifecycle, saved searches, and news feed. Even the closely related tools like search_directors, search_director_companies, and get_directors are explicitly differentiated.
All tools follow a consistent verb_noun snake_case pattern: get_, search_, list_, create_, watch_, unwatch_, mark_, and resolve_. Pluralization is predictable and there is no mixing of camelCase or inconsistent verb styles.
18 tools is above the ideal lean range, but the server covers a broad domain: search, enrichment, risk, watchlists, saved searches, and news. Each tool has a distinct purpose, so the count is reasonable, though slightly heavy.
The tool surface is strong for company data, search, watchlists, and news, but the saved-search workflow is incomplete: create and list exist with no update or delete, and alert settings cannot be changed after creation. This creates dead ends for user requests like removing a saved search or turning off an alert.