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 }.
Apres creation, communiquer l'URL a l'utilisateur pour qu'il retrouve sa veille dans l'app.
| 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_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. | |
| context | Yes | 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." | |
| 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_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_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_min | No | Tresorerie minimum en euros | |
| advanced_filters | No | ||
| dirigeant_prenom | No | Prenom du dirigeant. A utiliser avec dirigeant_nom. Ex: "Yves" | |
| 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. | |
| 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_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?
Beyond the annotations (idempotentHint=true), the description details the exact idempotent behavior: an existing active search with the same name is returned as-is with already_exists=true, no duplicate is created, and the existing alert is not modified. It also discloses the alert side effects: daily notifications, an initial 90-day recap, and only future matches triggering subsequent 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 well structured with a purpose statement, explicit usage guidance, a 'Fonctionnement' section, and a response summary. It is detailed enough for a 37-parameter tool but contains no filler; each section earns its place.
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 complex tool with rich schema and annotations, the description covers all necessary invocation context: when to use it, the idempotent behavior, alert consequences, the response shape including already_exists and result_count, and the post-creation action of sharing the URL with the user. 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 97%, so the schema carries most parameter documentation. The description adds valuable high-level semantics by stating that accepted filters are the same as search_companies, listing the filter families, and emphasizing that at least one criterion is required—a constraint not obvious from the schema's required fields alone.
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: 'Creation d'une recherche sauvegardee pour l'utilisateur, visible dans l'app Insourcia (page /news - Veille).' It also distinguishes itself from search_companies, so an agent can tell exactly which tool creates persistent saved searches versus one-off company 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 explicitly states when to use the tool—'quand l'utilisateur veut SAUVEGARDER une recherche pour la suivre dans le temps'—and explicitly says not to use it for one-off searches, directing the agent to search_companies instead. It also notes the minimum criterion requirement.
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.
Suivi dans le temps : si le contexte montre un interet durable pour la societe (cible d'acquisition, concurrent, client, fournisseur a risque, due diligence en cours), PROPOSER a l'utilisateur de la mettre sous surveillance via watch_company (et enable_alert=true pour etre notifie des evenements futurs : procedures collectives, cessions, changements de dirigeants). Ne pas l'ajouter sans son accord.
Presentation : structurer les donnees en sections :
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 — TOUJOURS preciser l'annee (champ date_cloture) ET le 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 | |
| context | Yes | 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." | |
| 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?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds valuable behavioral context beyond annotations: the output is a comprehensive structured fiche, financial figures must always be labeled with year and type_bilan due to comparability caveats, absent group/fund/IFRS fields mean independence or no data, and the agent is expected to propose watch_company under the right conditions. 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 the length is largely justified because there is no output schema and the tool returns a very rich record. It is front-loaded with the core purpose, then organized into ten numbered sections with clear formatting instructions. The 'Suivi dans le temps' paragraph adds an actionable usage policy, though it is a bit tangential to the tool's own behavior, so the description is not perfectly concise.
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 complex retrieval tool with no output schema, the description is exceptionally complete: it defines the ten output sections, covers special cases like radiated companies, group membership absence, non-listed IFRS absence, private-equity ownership blocks, and public-data null states. It also tells the agent how to present results and where to route deeper follow-up queries. Nothing essential to calling the 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?
The input schema already documents all three parameters thoroughly: siren format, context purpose with word-count guidance, and include_fields examples with plan limits. Schema coverage is effectively 100%, so the baseline is 3. The description mostly reinforces the SIREN key and the include_fields parity concept but does not add significant new parameter semantics 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 opens with a precise verb and resource: 'Fiche complète d'une entreprise française identifiée par son SIREN.' It immediately indicates the tool returns a full company record for one SIREN, and it distinguishes itself from siblings by naming the focused alternatives get_financials, get_directors, get_events and the follow-up action watch_company.
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 pour une entreprise à la fois.' It also gives clear routing guidance: propose watch_company when the user shows durable interest, only with consent, and use get_financials/get_directors/get_events to get deeper multi-year, director, or event-level detail. This is explicit when-to-use and alternative guidance.
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, le dire si c'est le cas.
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 | |
| context | Yes | 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." | |
| 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 goes far beyond the readOnlyHint/idempotent annotations by disclosing detailed behavioral traits: statutory auditors are excluded, IDs follow specific formats, shareholding percentages are unavailable, depth semantics govern expansion, hub-director detection prevents exploding the graph, and node/global caps produce truncations reported in meta.truncated. This is exceptional transparency and contains no contradiction with the 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 every section earns its place: purpose, usage, response format, key behavioral caveats, and filters. It is front-loaded with the core purpose and uses clear bullets and labels, making the density navigable. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool, the description is remarkably complete: it explains edge types, node ID conventions, depth behavior, person expansion rules, hub-director logic, truncation caps, and all filter defaults. Because an output schema exists, return-value structure is already available, and the description complements it with the exact semantic details an agent needs to interpret 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?
Although the schema already covers 100% of parameters, the description adds substantial meaning: depth=1 vs depth=2 expansion behavior, expand_persons=false for capitalist-only graphs, caps like 20 subsidiaries and 40 companies per person, and the guarantee that the root is never filtered. This goes well beyond the baseline for full schema coverage by explaining how parameters interact with graph construction.
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: 'Cartographie des entites autour d'UNE entreprise (par SIREN)' and explicitly states the output is an oriented, typed graph built from RCS/RNE mandates and group links. It distinguishes itself from siblings by naming get_directors and search_director_companies as complementary tools with different scopes, so an agent can clearly identify what this tool uniquely provides.
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 tells the agent when to use this tool: 'Utiliser cet outil pour visualiser ou analyser la structure d'un groupe : holdings, filiales, societes soeurs, dirigeants communs.' It also names alternatives and their different purposes, and gives concrete guidance about when to disable expand_persons for a purely capitalist graph, which is exactly the kind of decision support an agent needs.
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 | |
| context | Yes | 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." |
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?
Annotations already declare this as read-only and idempotent. The description adds meaningful behavioral context: possible response variants (scorable vs non-scorable), 404 for unknown SIREN, and restriction to Pro plan, which are not present in 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-organized with a clear front-loaded purpose, followed by return values, plan restriction, response shapes, and usage hint. Each sentence carries relevant information, though the response-shape list makes it slightly longer than strictly necessary.
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 two-parameter read-only tool with an output schema, the description covers the important operational cases: success, non-scorable company, and 404 error. It also notes the plan restriction and use cases, leaving little ambiguity for an agent.
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%: both siren and context have full descriptions. The tool description only reinforces 'one company at a time' without adding new parameter-level detail, 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 clearly states the tool scores the credit risk of one French company by SIREN and lists specific returned outputs (risk grade, default probabilities, factors). This distinguishes it from sibling tools like get_company and get_financials.
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 says the tool is for one company at a time and names the target use cases: supplier risk and due diligence. It does not mention exclusions or compare itself to alternatives, but the context is 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) | |
| context | Yes | 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." | |
| 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?
Beyond the readOnly/idempotent annotations, the description discloses sorting by importance, default filtering to active mandataires, inclusion of CAC roles with mandate dates, and nested representants[] for PM entities. This gives the agent a clear expectation of what the tool returns and how it behaves.
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 bolded entity types, bullet-like field lists, and a clear flow from purpose to output shape to defaults to usage guidance. Every sentence adds useful information without redundancy.
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?
Combined with the output schema and annotations, the description is complete for selecting and invoking the tool: it specifies required context (single company), return structure, filtering behavior, and how to include history. 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 baseline is 3. The description reinforces include_inactive semantics and default behavior, but adds little beyond what the schema already states for parameters like siren, limit, and offset.
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 'Detail des dirigeants d'une entreprise avec structure hierarchique' and specifies that it returns directors sorted by importance, with PP and PM entity shapes. This clearly distinguishes it from sibling search tools by anchoring it to a single company via SIREN.
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 clear usage context: 'Utiliser cet outil pour une entreprise a la fois' and explains the active/inactive default behavior via include_inactive. It does not explicitly name alternatives or state when not to use sibling tools, but the single-company constraint and SIREN requirement provide solid 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) | |
| context | Yes | 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." | |
| 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?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds valuable behavioral context beyond those hints: it discloses that the tool fuses cessions[], procedures[], and scalar dates into a single descending chronological stream. This gives the agent a clear model of the returned timeline's structure.
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: three sentences, with the core purpose and merging behavior front-loaded and the sibling alternative in the final sentence. Every sentence contributes meaningful routing or behavioral information with no 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 tool with a rich output schema, complete input schema, and safety annotations, the description covers the essential operational context: what events are merged, how they are ordered, the single-company constraint, and when to route to search_events. Nothing critical is missing for correct selection and 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 has 100% description coverage for all parameters, so the schema already documents each parameter's meaning. The description reinforces the SIREN-based single-company scope and the timeline semantics, but does not add significant per-parameter detail beyond 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 states a specific verb and resource: it returns a unified, chronological event timeline for a single company (by SIREN), merging multiple event sources into one decreasing flow. It also explicitly distinguishes itself from the sibling search_events, making the tool's scope 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 explicitly says to use this tool for one company at a time and directs the agent to search_events for cross-SIREN prospecting. This clear 'when to use vs. alternative' guidance fully satisfies the dimension.
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 DETERMINISTE — toujours utiliser _layout retourne dans la reponse :
ORDRE : iterer
_layout.sections.<section>.linesdans l'ordre fourni. NE PAS inventer l'ordre PCG.LABEL : afficher
line.label(FR humain : "Chiffre d'affaires net", "Marge brute"...), pasline.keybrut.VALEUR : lire
exercices[year][line.key]. Si null/absente : afficher "-" SANS supprimer la ligne (les sous-totaux restent visibles).INDENTATION : 2 espaces par niveau au-dela de 1.
level=1sans indent,level=2precede de " " (les "dont ...").EMPHASE : gras pour
kind=subtotal|total. Soulignement superieur pourkind=total.FORMAT NOMBRES (convention FR) :
Echelle automatique : si max(|values|) > 1 milliard EUR -> afficher en M EUR (3 decimales), sinon en k EUR (1 decimale).
Separateur milliers : espace insecable.
Negatifs : parentheses, ex (1 234).
Pourcentages (label se terminant par "(%)") : 1 decimale.
EXCEL/CSV : 1 sheet par section. Col A = label avec indentation, Col B+ = annees croissantes (ancien gauche -> recent droite). Bold subtotal/total. Format nombre Excel : "#,##0;(#,##0);-".
VERIFICATIONS automatiques (mentionner si KO) :
bilan_actif.total_actif ~= bilan_passif.total_passif (tolerance 1%).
Si
_layout.not_applicable_pcg: true(bilan B banque ou A assurance) : afficher uniquement les sections presentes + note "Plan comptable sectoriel non disponible".Si
_layout.missing_pcg_lines.length > 0: mentionner en bas "Note : N lignes PCG non disponibles dans notre source de donnees : ".
Toujours afficher en sections separees (compte de resultat + bilan actif + bilan passif + ratios). Les postes en lignes, annees en colonnes de gauche (ancien) a droite (recent). Jamais l'inverse.
| 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). | |
| context | Yes | 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_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 only declare readOnlyHint/idempotentHint/destructiveHint. The description goes far beyond: the 403 upgrade_required behavior on free plan for full mode, plan-aware defaults, the ifrs block appearing only for listed companies, and the deterministic `_layout` rendering contract (order, labels, indentation, number formatting, verification checks). This is rich behavioral context fully consistent with the read-only 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 well-structured and front-loaded: mode/plan semantics come first, rendering rules second. The 8-item rendering spec is verbose (Excel number formats, non-breaking spaces) and partially redundant with the output schema's job, but it is organized, numbered, and almost all of it earns its place for an agent that must render results deterministically.
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 with 6 parameters, plan-dependent behavior, and a rendering contract, everything an agent needs is present: error behavior (403 upgrade_required), field-count expectations, output structure (_layout sections/lines), formatting conventions, and verification steps. An output schema exists, so return values need no further explanation. No meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds real value: it distinguishes compact (~40 champs) from full (~140 champs), explains plan-dependent defaults for `detail`, and illustrates the `fields` parameter with a concrete example (["roe","bfr_jours_ca","autonomie_financiere"]) plus the 130+ available field categories. It complements rather than repeats 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 opening sentence, "Historique financier detaille d'une entreprise sur plusieurs exercices," states a specific verb (get), resource (financial history), and scope (multiple fiscal years). This clearly differentiates it from siblings like get_company, get_credit_risk, and get_directors, so an agent can select it correctly without opening the schema.
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 clear, explicit context on mode selection: "Mode `fields` (recommande pour 1-5 ratios additionnels au-dessus de compact)", plan-aware defaults (compact on free, full on pro), and the explicit `detail=compact` override. It doesn't explicitly name sibling-tool alternatives or exclusions, but the mode-level usage guidance is concrete and actionable.
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 : c'est le mode a privilegier pour un point quotidien.
"read_key" identifie chaque ligne : la passer a mark_news_read pour la marquer lue.
Si truncated=true, il y a plus de signaux que la limite demandee : reduire since_days ou filtrer avec event_types (il n'y a 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. Ne pas annoncer ces nombres comme exhaustifs a l'utilisateur.
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) | |
| context | Yes | 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." | |
| 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, idempotentHint, and destructiveHint, and the description adds substantial behavioral detail: merged/deduplicated content, date detection vs effective date, no pagination, truncated behavior, counts_are_partial semantics, hidden_by_plan limits, and the meaning of an empty news array. 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 well organized: purpose, trigger questions, content composition, per-line fields, filtering flags, plan limitations, and response shape. It is front-loaded and dense, though it could be slightly trimmed without losing value, so it does not reach a perfect score.
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 remarkably complete for the tool's complexity. It explains the hybrid output structure, freshness semantics, how to mark items as read via read_key, the absence of pagination, partial count warnings, plan caps, and the exact response shape. An agent has enough context to invoke this tool and interpret its results 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 practical meaning beyond the schema: unread_only is the preferred mode for daily points, truncated=true should trigger reducing since_days or filtering with event_types, and the limit context is reinforced. This goes beyond mere repetition of schema definitions.
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: the user's daily news feed of watched companies as shown on the /news page of Insourcia. It conveys the specific purpose and content composition, but it does not explicitly name sibling tools like get_events or search_events to draw a contrast.
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 lists trigger questions ('quoi de neuf sur ma veille ?', 'résume-moi ma veille de la semaine') and says it should be used before writing a weekly summary. It also recommends unread_only=true for daily briefings, but it does not state when to prefer alternative tools such as get_events.
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) | |
| context | Yes | 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." |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| saved_searches | Yes |
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 meaningful behavioral context beyond that: results are sorted newest-to-oldest, an empty list means no saved searches exist, result_count can be null, and alert_enabled is explained. This helps the agent interpret the response 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: a one-line purpose, a clear bulleted usage section, and a compact response definition. Every section earns its place and is scannable for an agent.
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 full parameter schema coverage and an output schema, the description covers use cases, sorting, null semantics, and empty-list meaning. No critical information an agent needs to call or interpret this tool 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 both limit and context. The description adds no extra parameter-level meaning, but none is needed because the schema carries the full burden.
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 'Liste des recherches sauvegardees de l'utilisateur', stating a specific action (list), a specific resource (saved searches), and user scope. This clearly differentiates it from siblings like create_saved_search and list_watched_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 'Utiliser cet outil' section explicitly states when to use it: before create_saved_search to avoid duplicate names, and to answer questions like 'quelles veilles ai-je ?'. It names the sibling alternative and the conditions that select this tool.
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 |
|---|---|---|---|
| context | Yes | 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." | |
| 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?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds genuinely useful behavior beyond that: a non-matching list_name returns companies: [] and total: 0 (explicitly framed as not an error), results are flattened across lists and sorted most-recent-first, and list_name must be an exact name. This is rich, non-obvious behavioral context that 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 longer than average but every section earns its place: purpose, usage scenarios, parameter semantics with edge case, and return format. It is well-structured with bullets and clear sections, though the inline response-shape explanation is slightly redundant given the output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complexity is low (list tool with one optional filter), annotations carry the safety profile, and the description covers defaults, edge cases, sorting, and response shape — everything needed to call it correctly. Minor gaps remain, such as pagination behavior for very large result sets, but nothing material 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 description coverage is 100%, so the schema already documents both parameters; the baseline is 3. The description compensates by adding semantics beyond the schema: the default behavior when list_name is omitted (all lists returned) and the exact-match requirement including the empty-result contract. That pushes it above 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?
The description opens with a specific verb+resource statement: "Liste des societes surveillees par l'utilisateur dans ses listes de veille" — listing watched companies in the user's watch lists, tied to page /lists. It distinguishes itself from siblings by contrasting with watch_company (the add operation) and unwatch_company, making the scope 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 gives explicit usage scenarios: use BEFORE watch_company to check if a company is already watched and learn exact list names, and to answer "which companies do I watch?" / "what's in my list X?". It names the sibling tool (watch_company) as the linked alternative, leaving no inference required.
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 APRES avoir presente les signaux a l'utilisateur, quand il confirme les avoir traites ("ok j'ai vu", "marque-les comme lus").
Fonctionnement :
Prend les "read_key" renvoyees par get_news, telles quelles. Ne JAMAIS inventer ni reconstruire une cle : appeler get_news d'abord et recopier la valeur. Leur format varie selon le type de signal, ne pas s'y fier.
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 |
|---|---|---|---|
| context | Yes | 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." | |
| 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?
The description goes well beyond the annotations by explaining that already-read keys are ignored and counted in already_read, that nothing is deleted and rows remain visible, that the user's last-visit date is not modified, and that the response contains marked_read, already_read, unread_remaining, and url. This fully aligns with the idempotentHint and destructiveHint 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 and front-loaded, with a clear purpose statement followed by concise bullet sections. Every sentence adds operational value: when to use, how to obtain keys, idempotence, exclusions, side effects, and response shape. No filler or redundancy.
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 with only two parameters and a fully described schema plus an output schema, the description is complete. It covers prerequisites, sequencing, constraints, side effects, and response fields, so an agent has everything needed to invoke it correctly without additional inference.
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 covers 100% of the parameters, including a detailed description for context. The description adds meaningful semantic guidance for read_keys, emphasizing that keys must be copied verbatim from get_news and that their format varies and must not be reconstructed or inferred.
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 uses a specific verb and resource: it marks precise news signals as read on the Insourcia /news page. It also clarifies the scope by explicitly stating that targeted marking is intentional and no bulk 'mark all read' API exists, which separates it from any broader operation.
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: after presenting signals to the user and after the user confirms they have handled them. It also directs the agent to call get_news first and copy the returned read_keys verbatim, while noting that there is deliberately no mark-all endpoint.
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. NE PAS choisir a sa place : presenter les candidats a l'utilisateur et lui faire confirmer.
no_match : aucune correspondance.
Le champ reason explique un review et appelle des gestes differents : 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).
CONSEIL A DONNER : fournir le code postal double quasiment le taux de rapprochement automatique. Si les fiches n'en ont pas et que la source en contient un, le demander vaut mieux que d'accepter des candidats douteux. Un jeton en trop dans le nom ("Carrefour Massy" au lieu de "Carrefour") coute plus cher qu'un nom tronque : nettoyer les suffixes de ville ou d'agence avant d'envoyer.
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}. Lire summary AVANT de detailler : c'est lui qui dit si le fichier est exploitable tel quel ou s'il demande un passage manuel.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | 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." | |
| records | Yes | Fiches a rapprocher, 200 maximum par appel |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent, and the description adds substantial behavioral context on top: the tool refuses to decide when uncertain, never returns a default 'best result', distinguishes lookup_failed (technical failure, to retry) from genuine no_match, and resolves instantly when an identifier is already present. No contradiction with readOnlyHint=true — this is a lookup, not a mutation.
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 densely packed with high-value information: usage conditions, sibling differentiation, status semantics, reason semantics, data-quality advice, and return-format guidance. The only redundancy is the search_companies comparison appearing twice, and the content justifies the length given the tool's nuanced refusal 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?
Very complete for a complex batch tool: covers input expectations, output shape (results[] preserving order with id passthrough, summary counts), the instruction to read summary before detailing, and per-status actions. Minor gap: no guidance on handling inputs exceeding the 200-record schema limit (batching strategy), but the output schema covers return values so the description need not repeat them.
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 baseline is 3. The description adds value beyond the schema by explaining that siren/siret/TVA inputs resolve without search, that postal_code roughly doubles the automatic match rate, and that extra tokens in the name field are costlier than truncated ones (clean city/agency suffixes). This enriches the agent's understanding of how parameter values affect outcomes.
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 operation — batch matching ('Rapprochement EN LOT') of poorly identified records to SIREN identifiers — and immediately contrasts itself with search_companies ('il rend des resultats classes, celui-ci rend une decision'). This distinguishes it from its closest sibling without requiring schema inspection.
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?
Explicitly states when to use this tool ('quand l'utilisateur arrive avec une LISTE de societes a identifier') and when NOT to ('Pour UNE societe cherchee par son nom, utiliser search_companies'). It also provides a downstream protocol: for review status, present candidates and let the user confirm rather than choosing. This is exemplary routing guidance.
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.
REGLE CRITIQUE — include_fields : des qu'un filtre financier OU donnees publiques est utilise, tu DOIS ajouter include_fields avec les champs correspondants. 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 N'APPARAITRONT PAS dans les resultats.
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. En cas de resultats multiples, privilegier l'entreprise avec le plus grand effectif sauf si le contexte indique clairement une autre cible.
Suivi dans le temps : apres avoir presente les resultats, si la recherche releve d'un besoin recurrent (veille secteur, pipeline de cibles, criteres d'investissement) plutot que d'une question ponctuelle, PROPOSER a l'utilisateur de la sauvegarder via create_saved_search avec les memes filtres (et enable_alert=true s'il veut etre notifie des nouvelles societes qui entreront dans les criteres). Ne pas sauvegarder sans son accord.
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. 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. Lire le schema plutot que de deviner : une cle inconnue est desormais rejetee, elle n'est plus ignoree en silence.
Astuce organigramme : pour obtenir l'organigramme complet d'un groupe, d'abord get_company pour recuperer le siren_groupe, puis search_companies avec siren_groupe pour lister 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.
Fonctionnalites NON disponibles actuellement : filtrage par profil LinkedIn des dirigeants. Si l'utilisateur demande ce filtre, indiquer poliment qu'il sera disponible prochainement.
Par defaut retourne 20 resultats (max 20 free / 100 pro par page). La pagination est reservee au plan Pro.
La reponse inclut un champ "_user_plan" ("free" ou "pro") indiquant le plan de l'utilisateur. Adapter le discours en consequence :
Si _user_plan="pro" : ne JAMAIS mentionner de limitations de plan. include_fields limite a 10 champs par recherche.
Si _user_plan="free" : include_fields est limite a 3 champs maximum par recherche. Tous les champs sont accessibles, mais limites en nombre. Choisir les 3 plus pertinents pour la question. Si des champs sont ignores, ils apparaitront 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_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. | |
| context | Yes | 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." | |
| 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_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_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 | 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. 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. Verifier _user_plan dans la reponse pour connaitre le plan. Ex: filtre dividendes_min → include_fields="dividendes_verses" | |
| 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_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. | |
| 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_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?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds substantial non-obvious runtime behavior: include_fields is mandatory for filtered values to appear, pagination is Pro-only, _user_plan drives plan-specific limits, and unknown advanced_filters keys are rejected rather than ignored. These are exactly the behavioral details an agent needs beyond 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 the tool is complex with 40 parameters and multiple plan-dependent behaviors. It is well structured: the critical include_fields rule is front-loaded, and subsequent sections cover usage, filtering, sorting, unsupported features, pagination, and return fields. Some redundancy exists with the schema's own field descriptions, but the organization makes the information navigable for an agent.
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 this complex, the description is remarkably complete: it covers core search usage, advanced_filters, the include_fields dependency, plan-specific limits, sorting options, pagination, return fields, follow-up workflows, and known unsupported features. The presence of an output schema reduces the burden for return-value details, but the description still lists the default returned fields. Nothing essential to selecting or invoking this tool correctly appears 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 baseline is high. The description adds critical cross-parameter semantics not obvious from individual schemas, especially the include_fields mappings (dividendes_min→dividendes_verses, nb_marches_min→nb_marches_titulaire, etc.) and the rule that financial/advanced filters require include_fields. It also clarifies that SIRETs are accepted in the query field and that advanced_filters keys must be read from the schema. This meaningfully supplements the schema without replacing it.
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 precise statement: 'Recherche d'entreprises francaises par nom, SIREN, activite, et criteres financiers.' This names the verb, resource, and key search dimensions, distinguishing it clearly from a pure director lookup. It also explicitly routes director-focused queries away from this tool to search_director_companies, further clarifying its scope.
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 explicit when-to-use guidance: use this tool when a user looks up a company by name or explores a sector. It also gives a concrete workflow ('trouver le SIREN, puis utiliser get_company ou get_financials'), names the alternative for direct director searches, and advises proposing create_saved_search for recurring needs. This is strong, actionable routing that leaves little to inference.
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). | |
| context | Yes | 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." | |
| 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 carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), lowering the bar. The description adds genuinely useful behavioral context: coverage limited to direct mandates (excludes resolved_from_pm), and the disclosure that an empty result means no direct mandate exists for that exact identity, prompting the agent to verify date_naissance. No annotation contradiction.
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 (~220 words) but front-loaded with the core purpose and organized into clear sections: purpose, tool-family positioning, required parameters, response shape, and scope note. Each paragraph earns its place; the homonym disambiguation point is restated a couple of times and could be tightened, but the structure remains highly scannable.
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 (covering return values) and annotations cover the safety profile, the description covers everything else an agent needs: required parameters, how to obtain them, empty-result semantics, scope boundaries, and pointers to all three relevant sibling tools. Rate limits and auth requirements are the only omissions, which are minor for an idempotent, read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter, giving a baseline of 3. The description adds value beyond it by flagging that all parameters are required, reinforcing the YYYY-MM-DD format, and providing the workflow to obtain date_naissance beforehand via search_directors or get_directors.
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: maps the corporate footprint of ONE physical person via all companies where they hold a direct mandate, disambiguated by exact date of birth. It also positions itself as the 'person -> entreprises' pivot and explicitly names sibling tools (search_directors, get_directors) it complements, so an agent can distinguish it without opening any schema.
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?
Gives explicit when-to-use guidance (M&A perimeter tracing for a founder/director across holdings, SCIs, subsidiaries) and explicit when-not-to-use guidance: search_companies for broader filtering that includes resolved_from_pm mandates with month granularity, and get_company for capitalistic holding structure. No ambiguity remains about tool selection.
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 }.
DESAMBIGUISATION (important) : un meme nom+prenom recouvre souvent plusieurs personnes distinctes (homonymes). Ne PAS conclure que deux mandats appartiennent a la meme personne sur le seul nom/prenom. Comparer date_naissance (et lieu_naissance) : deux dates differentes = deux personnes distinctes ; date absente = lien NON confirme (ne pas l'affirmer). A l'inverse, ne pas declarer "homonymes" deux mandats partageant la meme date_naissance.
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. | |
| context | Yes | 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." | |
| 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?
Annotations already declare readOnlyHint true and destructiveHint false, and the description adds substantial behavioral context: active mandates are returned by default, include_inactive toggles old mandates, and there is an important disambiguation warning about same-name/different-person cases. It also describes the pagination and response structure. 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 front-loaded with the core purpose, then organized into parameter semantics, response shape, disambiguation notes, and sibling tool routing. Every section carries operational value; nothing feels redundant or decorative.
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 complexity of disambiguating homonyms and the availability of an output schema, the description is complete: it defines the output structure, explains defaults, warns about identity pitfalls, and gives explicit chaining paths to related tools. There is no missing information that would prevent an agent from using 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 meaning beyond the schema: prenom is described as a disambiguator, role gets example values, and include_inactive's effect on active mandates is explained. It does not deeply expand on limit or context, but the schema already covers them.
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 uses a specific verb and resource: searching for people/directors across all French companies by last name. It explicitly contrasts with search_companies, which returns companies, so the agent can distinguish the tool from siblings without ambiguity. The use case is concrete.
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 when-to-use guidance: when you need people rather than companies, e.g. 'all companies where a director named DUPONT sits'. It also identifies when to switch to search_director_companies or get_directors, providing a clear routing rule based on the data already known.
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" | |
| context | Yes | 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." | |
| 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 convey read-only, idempotent, non-destructive, open-world behavior. The description adds useful behavioral context: event-level results, coverage of BODACC and silver scalar sources, and the mandatory-filter condition. 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 front-loaded with the core purpose, then presents the coverage, the critical filter rule, and compact examples. Every sentence earns its place for a tool with 15 parameters.
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 complex search tool with 15 parameters and rich schema/annotations, the description covers output shape, event type coverage, data sources, the mandatory-filter rule, and representative use cases. The output schema handles return-value details, so 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 baseline is 3. The description adds value by mapping natural-language use cases to specific parameters (e.g., 'Cessions de fonds > 1M en Ile-de-France depuis 2024' -> type, region, date_min, prix_min) and clarifying filter semantics across event types.
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 a specific verb and resource: a unified cross-SIREN search that returns individual events (not companies), and enumerates the eight event types. It does not explicitly differentiate from the sibling get_events, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit filter requirement rule (region/department/NAF or event filter, else 400) and three concrete query-to-parameter examples. It does not name alternatives or state when not to use this tool, 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.
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.
Avant un retrait de masse ou en cas de doute sur le nom exact d'une liste, appeler list_watched_companies pour voir ou la societe est reellement surveillee.
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 | |
| context | Yes | 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." | |
| 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?
Beyond the annotations, the description discloses nuanced behavior: default removal from all lists, idempotent false-result behavior, list preservation even when emptied, alerts remaining active, and successful removal of companies absent from the index. This is substantial operational context that an agent could not infer from annotations or schema alone.
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 front-loaded purpose sentence, a usage trigger section, and bullet-pointed behavioral details. It is somewhat long and repeats the response shape that an output schema already provides, but every section earns its place by clarifying edge cases and side effects.
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 core operation, default vs. scoped behavior, idempotency, side effects on lists and alerts, edge cases around missing companies, and a fallback verification tool. Combined with the rich annotations and output schema, the 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?
The input schema already has 100% parameter coverage and describes siren, context, and list_name including the omission default. The description reinforces list_name behavior but does not add meaning beyond the schema; it mostly restates the same semantics in prose.
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: 'Retrait d'une societe de la surveillance' and explains it removes a company from the user's watchlist. It also positions itself as the inverse of watch_company, making the tool's purpose unambiguous and clearly distinct from its sibling.
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 ARRETER de suivre une societe') and gives concrete user-phrase triggers. It also directs the agent to call list_watched_companies before mass removal or when a list name is uncertain, which is valuable routing guidance.
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 }.
Apres l'ajout, communiquer l'URL a l'utilisateur pour qu'il retrouve sa liste dans l'app.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN a 9 chiffres de la societe a surveiller | |
| context | Yes | 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." | |
| 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?
Beyond the annotations (idempotentHint: true), the description adds concrete behavioral details: list auto-creation, idempotent already_watched=true behavior, daily alert semantics with future events only and no history replay, and the response fields. It also clarifies that the user should be given the resulting URL. This is rich and non-contradictory.
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 guidance, followed by a compact 'Fonctionnement' bullet list covering the essential behaviors and the response shape. Every sentence carries operational value, including the closing instruction to communicate the URL to the user. It is thorough without being 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?
The description fully equips an agent to invoke the tool correctly: clear selection criteria, parameter semantics, idempotency behavior, alert semantics, response format, and post-call instruction. With 100% schema coverage and an output schema present, nothing required for correct usage 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 already covers 100% of parameters, so the baseline is 3. The description adds extra meaning for list_name (default list 'Surveillance', auto-created) and enable_alert (daily frequency, future events only, no replay), going beyond the schema descriptions. Siren and context parameters gain nothing additional, but the overall semantic enrichment justifies a 4.
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 : l'ajoute a une liste de veille de l'utilisateur'. It clearly differentiates this tool from simple lookup by naming get_company as the alternative for mere 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: when the user wants to SUIVRE a company over time (acquisition target, competitor, client, risky supplier), and when not to use it: for simple consultation, with the explicit alternative 'utiliser get_company'. This gives an agent unambiguous selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 or an account that owns the GitHub organization, then choose Claim with GitHub.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.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Most tools have clearly distinct resource+action purposes, and the descriptions explicitly contrast near-neighbor tools like search_companies vs resolve_companies and get_events vs search_events. The only real risk is the trio of director-oriented tools, especially search_director_companies vs search_companies with dirigeant filters, which requires careful reading to avoid misselection.
All 18 tools follow a consistent snake_case verb_noun pattern: search_, get_, list_, create_, watch_, unwatch_, mark_, resolve_. Singular names are used for single-entity actions and plural for list/search operations, making the pattern predictable. There is no camelCase, vague verb, or style mixing.
18 tools is slightly above the ideal 10-15 range, but the count is justified by the broad domain covering search, company intelligence, watchlists, and news. Each tool appears to earn its place, and there are no obvious stubs or redundant duplicates. It feels a bit heavy but not bloated.
The company intelligence surface is very complete: search, deep company data, financials, directors, group graphs, events, and credit risk are all covered. Watchlists also have full add/remove/list coverage, but saved searches have a notable lifecycle gap—create and list exist, yet there is no update, delete, or alert-toggle for existing saved searches, creating a management dead end.