protogrid

Search / io.insourcia/insourcia

insourcia

R0· no sign-in

Search French companies: financials, directors, ownership, M&A and insolvency events.

v1.0.0 · active · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality89good
Trust80of 100
Uptime, 30 days100%
Latency p50577 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "insourcia": {
      "type": "http",
      "url": "https://mcp.insourcia.io/mcp"
    }
  }
}
claude mcp add --transport http insourcia https://mcp.insourcia.io/mcp
[mcp_servers.insourcia]
url = "https://mcp.insourcia.io/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "insourcia": {
      "type": "remote",
      "url": "https://mcp.insourcia.io/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "insourcia": {
      "type": "http",
      "url": "https://mcp.insourcia.io/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=insourcia&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmluc291cmNpYS5pby9tY3AifQ%3D%3D"
}
{
  "servers": {
    "insourcia": {
      "type": "http",
      "url": "https://mcp.insourcia.io/mcp"
    }
  }
}
{
  "mcpServers": {
    "insourcia": {
      "httpUrl": "https://mcp.insourcia.io/mcp"
    }
  }
}
extensions:
  "insourcia":
    enabled: true
    name: "insourcia"
    type: streamable_http
    uri: "https://mcp.insourcia.io/mcp"
    timeout: 300

Quality 89 / 100good

protocol100 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • pass
    protocol.list_ttltool list is cacheable (ttlMs 3600000)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length15 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations21 of 21 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • warn
    tools.token_costabout 16,672 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes90 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

21 tools, about 16,672 tokens to load them all · tool set 2467356613ee · tools last changed 2026-10-20 · checked 2026-10-20 23:59 UTC

Tool changes

  • reveal_director_emailchangeddescription
    before

    Révèle l'email PROFESSIONNEL d'un dirigeant identifié (après get_directors). Exige un compte FullEnrich, Dropcontact, Apollo, Lusha ou Kaspr connecté dans les paramètres Insourcia (sinon no_payment_source) ; provider dit lequel a servi. COÛT : 1 crédit de ce compte par email trouvé, catch-all compris. Gratuit si rien n'est trouvé (sauf Lusha : 1 crédit de recherche dès que la personne est trouvée, même sans email), ou si ce dirigeant a déjà été révélé (3 mois chez FullEnrich, 15 minutes chez Apollo, Lusha et Kaspr). Kaspr exige un profil LinkedIn (sinon linkedin_profile_required, rien consommé). Offre gratuite : 5 révélations facturées par mois (connected_account_monthly_limit). Autres erreurs : connected_account_key_invalid (à reconnecter), connected_account_out_of_credits. OUTIL UNITAIRE, sans variante par lot : boucler sur une liste consomme des crédits et déclenche une limite horaire. deliverability_proven=false : domaine catch-all, boîte non prouvée. email=null (not_found, rejected_by_verification) : inutile de réessayer. Avec Dropcontact, ou sans profil LinkedIn connu, l'outil rend status="pending" et un retrieval_token ; le rappeler avec ce SEUL paramètre après retry_after_seconds, tant que pending (jeton valable 15 min, gratuit). Ni téléphone ni email personnel. L'appelant devient responsable de traitement : information de la personne au premier contact (mention dans _notice), respect de toute opposition. Reconstituer un fichier est interdit.

    after · 98% of words in common

    Révèle l'email PROFESSIONNEL d'un dirigeant identifié (après get_directors). Exige un compte FullEnrich, Dropcontact, Apollo, Lusha ou Kaspr connecté dans les paramètres Insourcia (sinon no_payment_source) ; provider dit lequel a servi. COÛT : 1 crédit de ce compte par email trouvé, catch-all compris. Gratuit si rien n'est trouvé (sauf Lusha et Apollo : un crédit peut être débité dès que la personne est trouvée, même sans email), ou si ce dirigeant a déjà été révélé (3 mois chez FullEnrich, 15 minutes chez Apollo, Lusha et Kaspr). Kaspr exige un profil LinkedIn (sinon linkedin_profile_required, rien consommé). Offre gratuite : 5 révélations facturées par mois (connected_account_monthly_limit). Autres erreurs : connected_account_key_invalid (à reconnecter), connected_account_out_of_credits. OUTIL UNITAIRE, sans variante par lot : boucler sur une liste consomme des crédits et déclenche une limite horaire. deliverability_proven=false : domaine catch-all, boîte non prouvée. email=null (not_found, rejected_by_verification) : inutile de réessayer. Avec Dropcontact, ou sans profil LinkedIn connu, l'outil rend status="pending" et un retrieval_token ; le rappeler avec ce SEUL paramètre après retry_after_seconds, tant que pending (jeton valable 15 min, gratuit). Ni téléphone ni email personnel. L'appelant devient responsable de traitement : information de la personne au premier contact (mention dans _notice), respect de toute opposition. Reconstituer un fichier est interdit.

  • get_directorschangedoutput schema
  • unlock_premium_dataadded

    Débloque pour 12 mois, en crédits, des données premium d'une société, partagées dans l'organisation : linkedin (director_id de get_directors ; sans director_id, page de la société), presse, conseils. dry_run=true : devis sans débit. Sinon débite le solde dans la limite du budget mensuel de l'agent et de max_credits ; une même idempotency_key ne débite qu'une fois.

  • get_accountadded

    État du compte : plan, solde de crédits, plafond de consultation (sociétés distinctes restantes sur 24 h et 7 j, lignes de recherche, mode normal ou ralenti), budget mensuel de l'agent IA, barème des données premium, déblocages actifs. Ne consomme rien.

  • get_company_graphchangedoutput schema
  • get_credit_riskchangedoutput schema
  • get_eventschangedoutput schema
  • search_directorschangedoutput schema
  • get_directorschangedoutput schema
  • get_financialschangedoutput schema

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 80 / 100

no-repository
provenance55
liveness100
freshness85
hygiene80

+dns-namespace +website +reachable +uptime-100% ~updated-54d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.insourcia.io/mcp streamable-httpnoneyes100%577 ms2026-07-282026-10-20

Tools (21)

create_saved_searchCréation d'une recherche sauvegardée 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 marché, suivi d'un secteur, pipeline de cibles) - pas pour une recherche ponctuelle (utiliser search_companies). Fonctionnement : - Les filtres acceptés sont les MÊMES que search_companies (query texte libre + filtres geographie/secteur/financier/dirigeants + advanced_filters JSON). Au moins un critère est requis. - Idempotent : si une recherche sauvegardée ACTIVE du même nom existe déjà pour l'utilisateur, elle est renvoyée telle quelle (already_exists=true), sans doublon et sans modifier son alerte. - Alerte quotidienne ACTIVE PAR DÉFAUT (enable_alert=false pour s'en passer) : elle notifie l'utilisateur (page /news + email) quand de NOUVELLES sociétés entrent dans les critères de la recherche. À la creation, une notification initiale récapitule les 90 derniers jours ; ensuite seules les entrées futures déclenchent. Réponse : { id, name, url (page /news), result_count (nombre de sociétés matchant actuellement, null si indisponible), filters (filtres normalisés stockés, absent sur le hit idempotent), already_exists, alert_enabled }.
get_accountread-onlyÉtat du compte : plan, solde de crédits, plafond de consultation (sociétés distinctes restantes sur 24 h et 7 j, lignes de recherche, mode normal ou ralenti), budget mensuel de l'agent IA, barème des données premium, déblocages actifs. Ne consomme rien.
get_companyread-onlyFiche complète d'une société française identifiée par son SIREN. Pour plusieurs sociétés, le paramètre sirens sert jusqu'à 10 fiches en une requête, au lieu d'un appel par société. COÛT : 1 appel de quota par société, en lot comme à l'unité. Pour comparer beaucoup de sociétés, search_companies rend les mêmes champs en include_fields (dont description_activite et site_internet), 20 sociétés par appel. Contenu : 1. Identité - forme juridique, dates de création et d'immatriculation, date_cloture_exercice, capital, siege complet, activite (NAF, objet_social, description), effectif, LEI si présent ; successeur si radiée. 2. Financier - date_cloture et type_bilan (K consolidé, C social, S simplifié : un CA K n'est pas comparable à un CA C), CA, croissance, résultat net, marges, EBITDA, dette nette, effectif moyen. 3. Contact - site web et page LinkedIn de la société. 4. Gouvernance - dirigeants principaux. 5. IFRS - agrégats consolidés des cotées. 6. Signaux - cotation, procédures collectives, fusions, modifications de capital, transferts de siege, changements de denomination, ESS, société à mission, dernier dépôt, radiation. 7. Score crédit - grade AAA à D, probabilités de défaut 3/6/12 mois, facteurs ; détail dans get_credit_risk. Null si non scorée. 8. Cessions - historique (date, type, cédant, cessionnaire, prix). 9. Données publiques - marchés publics, subventions, brevets, salons. 10. Fonds PE/VC - nom_fonds, siren_fonds (chaînable vers get_company), annee d'entrée. 11. Estimation financière (compte de résultat confidentiel seulement) - fourchette de CA, confiance, tranche de marge d'EBE, probabilité de déficit. C'est une ESTIMATION : la présenter comme telle, jamais comme un chiffre déposé. 12. Presse - actualite_presse : 5 derniers articles. Pour approfondir : get_financials (historique), get_directors (mandats), get_events (annonces BODACC), get_company_graph (structure). watch_company met la société sous surveillance.
get_company_graphread-onlyCartographie des entités autour d'UNE société (par SIREN) : graphe orienté construit sur les mandats RCS/RNE et les liens de groupe. Pour la structure d'un groupe : holdings, filiales, sociétés sœurs, dirigeants communs. Complémentaire de get_directors (mandats d'une société) et de search_director_companies (mandats directs d'un dirigeant). Réponse : nodes[] (entreprises "co:<siren>", personnes "pp:<nom>|<prenom>|<AAAA-MM>", parents étrangers "co:ext:<slug>") et edges[] orientées : - mandat_pm : société dirigeante -> société dirigée - filiale : mère -> filiale (associé unique RNE) - parent_ultime : parent ultime (GLEIF) -> société - mandat_pp : personne -> société dirigée À savoir : - Pas de pourcentage de détention. Les commissaires aux comptes sont exclus. - depth=1 : liens directs. depth=2 (défaut) : expansion depuis les parents et sociétés dirigeantes, jamais depuis les filiales. - Les dirigeants de la racine tirent leurs autres sociétés (holdings personnelles, SCI, structures sœurs). expand_persons=false donne un graphe purement capitalistique. Un mandataire professionnel (plus de 50 mandats, ou cabinet comptable) n'est pas étendu : voir meta.truncated.hub_directors. - Plafonds par nœud et max_nodes : meta.truncated signale un graphe partiel. Filtres : include_personnes, include_sci, include_ceased, expand_persons. La racine n'est jamais filtrée. Pour plusieurs sociétés, le paramètre sirens sert 3 graphes en une requête (2 en depth=2), à depth=1 par défaut : une traversée coûte 3 à 5 secondes et ne se parallélise pas.
get_credit_riskread-onlyScore de risque crédit d'UNE société française (par SIREN). Retourne le grade de risque (AAA -> D), la probabilité de défaut à 3/6/12 mois (taux du grade, master-scale), la position de la société dans la fourchette de son grade (bas / milieu / haut) et les facteurs principaux (5 par défaut, jusqu'à 10 avec factors_limit). Chaque facteur porte son sens (aggravant / atténuant), son poids (part de l'écart au risque moyen, 0 à 1) et la valeur de la société quand elle est affichable ; other_factors regroupe le reste. Disponible sur tous les plans. Réponses possibles : - société scorée : { scorable:true, risk:{ grade, grade_default_rate, grade_position, factors, other_factors, coverage, as_of, model } } - société non scorée (pas de comptes récents) : { scorable:false, risk:null } - SIREN inconnu : erreur 404. Cas d'usage : risque fournisseur, due diligence. Pour scorer un portefeuille, le paramètre sirens rend jusqu'à 10 scores en une requête.
get_directorsread-onlyDétail des dirigeants d'une société avec structure hiérarchique. Retourne les dirigeants classés par importance (décisionnaires en premier). Deux types d'entrées : - **PP** (personne physique) : nom, prenom, role, annee de naissance, date_debut_mandat, date_fin_mandat, linkedin_url - **PM** (personne morale) : denomination, SIREN, role, date_debut_mandat, date_fin_mandat, avec un tableau représentants[] listant les personnes physiques qui la représentent (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. linkedin_url est le profil LinkedIn de la personne physique, présent uniquement quand un profil a été apparié avec certitude (nom + prénom + date de naissance). La clef est absente quand aucun profil n'est confirmé : c'est le cas courant, pas une anomalie. Réservé au plan pro. Par défaut, seuls les mandataires actifs sont retournés. Utiliser include_inactive=true pour inclure l'historique. Pour plusieurs sociétés, le paramètre sirens sert jusqu'à 10 sociétés en une requête. Le lot rend les 20 premiers mandataires de CHAQUE société et signale celles qu'il a tronquées : limit et offset n'ont pas de sens sur dix sociétés à la fois, et l'appel unitaire reste là pour dérouler l'historique complet d'une seule.
get_eventsread-onlyTimeline unifiée des événements d'UNE société (par SIREN). Flux chronologique décroissant qui réunit : - une ligne par annonce BODACC de modification (forme juridique, dirigeants, siege, activite, capital, denomination, dissolution), avec libellé, sous_type et source_url vers l'avis officiel ; - une ligne par dépôt des comptes (un par exercice) et par immatriculation ; - les cessions (y compris côté cédant d'une vente) et les procédures collectives ; - la radiation, l'augmentation de capital, la creation ; - une ligne par année de marchés publics, les subventions ; - sur 12 mois, les mouvements de dirigeants (dirigeant_entry, dirigeant_exit, dirigeant_change), les changements de note crédit (changement_note) et de dénomination (changement_denomination), et les transferts de siège et changements d'activité SIRENE (modification_administrative, avec un libellé explicite). Pour plusieurs sociétés, le paramètre sirens sert jusqu'à 10 timelines en une requête, 20 événements par société et sans pagination. Pour de la prospection multi-SIREN sans liste de départ, utiliser search_events. COÛT : 1 appel de quota par société.
get_financialsread-onlyHistorique financier détaillé d'une société sur plusieurs exercices. COÛT : 1 appel de quota par société, réponse de ~10 à 45 Kio selon détail et years. Pour le seul dernier exercice (ca, ebitda, resultat_exploitation, resultat_net, effectif_moyen), search_companies le rend en include_fields, 20 sociétés par appel. Pour plusieurs sociétés, le paramètre sirens sert jusqu'à 10 historiques en une requête (3 en detail=full). Le lot part en compact sauf demande explicite, y compris sur Pro, et ne pagine pas. Niveau de détail : - compact (défaut sur Free, ~40 champs par exercice) : compte de résultat complet, bilan abrégé PCG, ratios (trésorerie, dette nette, BFR, marges, endettement, CAF, délais de paiement), dividendes, effectif moyen. - full (défaut sur Pro, ~140 champs) : tous les postes. Refusé sur Free (403). - fields : ajoute quelques champs à compact sans gonfler la réponse, ex fields=["roe","bfr_jours_ca","autonomie_financiere"]. Plus de 130 disponibles : ratios, postes détaillés, immobilisations brutes, réserves, croissances (cagr_ebitda_3ans...). type_bilan : K consolidé, C social, S simplifié. Quand la fenêtre mélange plusieurs types, un seul est gardé et type_bilan_mixte l'indique ; type_bilan force un type. Les cotées ont en plus un bloc ifrs. Compte de résultat confidentiel : ni CA ni EBE déposé. Plan Pro : inclure_estimation=true ajoute estimation_financiere (fourchette de CA et d'EBE, confiance, tranche, proba de déficit) et estimation_financiere_exercices (autres exercices), des ESTIMATIONS jamais déposées ; sans lui, estimation_disponible seul. Plan gratuit : 403. dividende_estime est aussi une estimation (dividendes_verses = déposé). Rendu : _layout décrit par section l'ordre PCG des lignes, leur libellé (line.label), leur indentation (level) et leur nature (kind) ; exercices[annee][line.key] porte la valeur, null = poste absent. not_applicable_pcg signale un bilan de banque ou d'assurance. Montants en euros.
get_newsread-onlyVeille quotidienne de l'utilisateur : le fil d'actualité de ses sociétés surveillées, tel qu'il apparaît sur la page /news de l'app Insourcia. Utiliser cet outil pour répondre à "quoi de neuf sur ma veille ?", "qu'est-ce qui a bougé sur mes sociétés ?", "résume-moi ma veille de la semaine", ou avant de rédiger un point hebdomadaire. Contenu : les alertes réellement délivrées (email/push) ET l'activité des sociétés des listes de veille (changements de dirigeants, annonces BODACC : procédures collectives, cessions, radiations..., articles de presse), fusionnées et dédupliquées, les plus récentes d'abord. Couvre toutes les listes de l'utilisateur, tous espaces confondus (source.espace indique lequel). Chaque ligne est HYBRIDE : "label" donne la phrase française prête à lire (identique à l'app) et "type"/"before"/"after"/"siren"/"date" donnent les champs structurés pour filtrer ou raisonner. "date" est le jour de DÉTECTION (axe de fraîcheur) ; "effective_date", quand présent, est la date d'effet juridique. unread_only=true ne renvoie que ce que l'utilisateur n'a pas encore lu. "read_key" identifie chaque ligne : la passer à mark_news_read pour la marquer lue. truncated=true signale plus de signaux que la limite demandée ; since_days et event_types permettent de resserrer (pas de pagination sur ce fil). Si counts_are_partial=true, "total" et "unread_count" sont des PLANCHERS et non des totaux : le fil est composé sur une fenêtre bornée (les 100 dernières notifications et les 100 derniers événements), et cette fenêtre était pleine. hidden_by_plan, quand présent, compte les signaux non retournés parce que le plan actuel ne donne accès qu'aux 10 signaux les plus récents, exactement comme la page /news. Un fil ainsi tronqué n'est pas complet, et hidden_by_plan dit de combien. Réponse : { news: [...], total, unread_count, last_seen_at, since_days, truncated, url (page /news) }. news vide = aucun signal sur la période, ce n'est pas une erreur.
list_saved_searchesread-onlyListe des recherches sauvegardées de l'utilisateur (page /news - Veille de l'app Insourcia). Utiliser cet outil : - AVANT create_saved_search, pour vérifier qu'une veille équivalente n'existe pas déjà et éviter les doublons de nom. - Pour répondre à "quelles veilles ai-je ?" / "quelles sont mes recherches sauvegardées ?". Réponse : { saved_searches: [{ id, name, filters (filtres normalisés stockés), result_count (nombre de sociétés matchant, null si indisponible), alert_enabled (alerte quotidienne nouvelles sociétés active ou non), url (page /news), created_at }], total }. Les recherches sont triées de la plus récente à la plus ancienne. Liste vide = aucune veille configurée.
list_watched_companiesread-onlyListe des sociétés surveillées par l'utilisateur dans ses listes de veille (page /lists de l'app Insourcia). Utiliser cet outil : - AVANT watch_company, pour vérifier si une société est déjà surveillée et connaître les listes existantes (leur nom exact). - Pour répondre à "quelles sociétés je surveille ?" / "qu'y a-t-il dans ma liste X ?". list_name (optionnel) restreint à une liste précise (nom exact). Sans list_name, toutes les listes de l'utilisateur sont retournées. Un list_name qui ne matche aucune liste renvoie companies: [] et total: 0 (ce n'est pas une erreur : simplement aucune société surveillée sous ce nom). Réponse : { companies: [{ siren, company_name, naf_code, region, list_id, list_name, added_at }] (aplaties toutes listes confondues, plus récentes d'abord), lists: [{ id, name, company_count, alert_enabled }], total, url (page /lists) }.
mark_news_readMarque comme lus des signaux précis de la veille de l'utilisateur (page /news de l'app Insourcia). Utiliser cet outil quand l'utilisateur indique avoir traité des signaux ("ok j'ai vu", "marque-les comme lus"). Fonctionnement : - Prend les "read_key" renvoyées par get_news, telles quelles ; leur format varie selon le type de signal et n'est pas reconstructible. - Idempotent : une clé déjà lue est ignorée (comptée 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" à "lu". - Ne modifie pas la date de dernière visite de l'utilisateur sur /news. Réponse : { marked_read, already_read, unread_remaining, url (page /news) }.
resolve_companiesread-onlyRapprochement EN LOT de fiches mal identifiées (CRM, tableur, export CSV) vers leur SIREN. À utiliser pour une LISTE de sociétés à identifier ("retrouve les SIREN de ces 200 clients"). Pour UNE société cherchée par son nom, search_companies, qui rend des résultats classés ; celui-ci rend une décision, et refuse de trancher quand il n'est pas sûr. Chaque fiche revient avec un status : - resolved : SIREN certain. - review : plusieurs candidats plausibles ou nom trop générique ; les candidats sont retournés et le choix revient à l'utilisateur. - no_match : aucune correspondance. reason explique un review : ambiguous_candidates, weak_name_overlap, shared_domain (site partagé par un réseau ; domain_company_count dit combien de sociétés, fournir un nom ou un code postal), missing_name, invalid_domain, domain_no_match, lookup_failed (panne à rejouer, PAS une absence de correspondance). Conseils : domain (domaine ou URL) résout seul quand il désigne une seule société. Le code postal double quasiment le taux de rapprochement. Un mot en trop dans le nom ("Carrefour Massy") nuit plus qu'un nom tronqué. Un siren, siret ou numéro de TVA français est résolu sans recherche. COÛT : 1 appel de quota par fiche soumise, quelle que soit sa forme. Retourne results[] (ordre d'entrée, avec l'id fourni) et summary{total, resolved, review, no_match}.
reveal_director_emailRévèle l'email PROFESSIONNEL d'un dirigeant identifié (après get_directors). Exige un compte FullEnrich, Dropcontact, Apollo, Lusha ou Kaspr connecté dans les paramètres Insourcia (sinon no_payment_source) ; provider dit lequel a servi. COÛT : 1 crédit de ce compte par email trouvé, catch-all compris. Gratuit si rien n'est trouvé (sauf Lusha et Apollo : un crédit peut être débité dès que la personne est trouvée, même sans email), ou si ce dirigeant a déjà été révélé (3 mois chez FullEnrich, 15 minutes chez Apollo, Lusha et Kaspr). Kaspr exige un profil LinkedIn (sinon linkedin_profile_required, rien consommé). Offre gratuite : 5 révélations facturées par mois (connected_account_monthly_limit). Autres erreurs : connected_account_key_invalid (à reconnecter), connected_account_out_of_credits. OUTIL UNITAIRE, sans variante par lot : boucler sur une liste consomme des crédits et déclenche une limite horaire. deliverability_proven=false : domaine catch-all, boîte non prouvée. email=null (not_found, rejected_by_verification) : inutile de réessayer. Avec Dropcontact, ou sans profil LinkedIn connu, l'outil rend status="pending" et un retrieval_token ; le rappeler avec ce SEUL paramètre après retry_after_seconds, tant que pending (jeton valable 15 min, gratuit). Ni téléphone ni email personnel. L'appelant devient responsable de traitement : information de la personne au premier contact (mention dans _notice), respect de toute opposition. Reconstituer un fichier est interdit.
search_companiesread-onlyRecherche de sociétés françaises par nom, SIREN/SIRET, activite ou critères (géographie, secteur, effectif, financier, dirigeants). Pour une société citée par son nom : trouver le SIREN ici, puis get_company ou get_financials. Effectif et statut départagent les homonymes. - Le siren est dans chaque résultat : ne pas les repasser par resolve_companies (fiches sans identifiant). - Valeurs : un chiffre (ca, ebitda, resultat_net, effectif_moyen, signaux publics...) n'est retourné que s'il figure dans include_fields, même quand il sert de filtre. 3 champs par recherche (free), 10 (pro). Un nom inconnu est liste dans include_fields_unknown : le corriger plutôt que d'appeler get_company ligne par ligne. get_financials sert l'historique multi-années. - Filtres simples au premier niveau, les deux bornes côte à côte (effectif_min et effectif_max ; idem ca, resultat_net, tresorerie, cagr_ca, date_creation, age_dirigeant). Critères avancés (ratios, CAGR, bilan, délais, signaux publics, fonds, CAC, comptes) dans advanced_filters ; une clé inconnue est rejetée (400). - Dirigeant : dirigeant_nom + dirigeant_prenom (+ dirigeant_naissance). Inclut les dirigeants remontés via une personne morale ; mandats directs d'une personne : search_director_companies. - Tri : sort_by (relevance, chiffre_affaires, resultat_net, effectif_moyen, date_creation, capital) et sort_order. - Cessions : include_fields=nb_cessions,derniere_cession_date signale les sociétés à lire dans get_events. 20 résultats par défaut, max 20 (free) ou 100 (pro) ; pagination par cursor sur Pro. COÛT : 1 appel de quota par tranche de 20 lignes servies ; la réponse donne _user_plan et le quota restant. Pour suivre la recherche dans le temps : create_saved_search. Retourne l'identité de base de chaque société (siren, denomination, NAF, localisation, effectif, statut) + include_fields.
search_director_companiesread-onlyMandats directs d'un dirigeant : toutes les sociétés où il exerce un mandat direct, le dirigeant étant identifie de façon non ambiguë par nom + prénom + date de naissance exacte. C'est le pivot "personne -> sociétés", complément de search_directors (trouver la personne) et get_directors (dirigeants d'une société). Cas d'usage M&A : tracer le périmètre de sociétés d'un fondateur/dirigeant (holdings, SCI, filiales) sans confondre les homonymes. Paramètres 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 préalable via search_directors ou get_directors (champ date_naissance). Réponse : dirigeant { nom, prenom, date_naissance, annee_naissance } + data[] = entreprises { siren, denomination, role, ville, departement, code_ape, forme_juridique } + pagination { total, returned, limit }. Résultat vide = aucun mandat direct trouvé pour cette identité exacte (vérifier la date_naissance). Note : ne couvre que les mandats DIRECTS de la personne physique (exclut les dirigeants remontés depuis une PM représentée, resolved_from_pm). C'est la différence de périmètre avec search_companies(dirigeant_nom/prenom/naissance), qui filtre plus large (inclut ces remontées, granularité mois) et retourne des sociétés, pas les mandats directs d'un dirigeant. Pour la structure de détention capitalistique d'une société, voir get_company_graph.
search_directorsread-onlyRecherche de personnes (dirigeants) à travers toutes les sociétés françaises, par nom de famille. À la différence de search_companies (qui retourne des ENTREPRISES et accepte dirigeant_nom/dirigeant_prenom comme filtres), search_directors retourne directement des PERSONNES avec leur société de rattachement. Cas d'usage : "toutes les sociétés où siège un dirigeant nommé DUPONT", cartographie d'un réseau de mandats. Paramètres : nom (REQUIS, nom de famille), prenom (optionnel, désambiguïse), role (optionnel, ex "Président", "Gérant", "Administrateur"). Par défaut seuls les mandats actifs ; include_inactive=true pour inclure les anciens mandats. Réponse : data[] = personnes { nom, prenom, civilite, role, role_description, date_naissance, annee_naissance, lieu_naissance, type_personne, linkedin_url, entreprise { siren, denomination, ville, departement, code_ape } }. linkedin_url n'est présent que si un profil a été apparié avec certitude (plan pro) ; son absence est le cas courant, pas une anomalie. pagination { total (nb sociétés matchées), limit, returned }. Homonymes : un même nom+prénom recouvre souvent plusieurs personnes distinctes. date_naissance est le champ qui les distingue : deux dates différentes = deux personnes ; date absente = identité non confirmée ; même date = même personne. La date est diffusée au MOIS (jour normalisé à 01), conformément au régime de diffusion du registre : deux personnes nées le même mois restent indistinguables. Pour lister TOUTES les sociétés d'une personne donnée une fois sa date de naissance connue, enchaîner avec search_director_companies (nom + prénom + date_naissance). Pour la fiche complète d'un dirigeant d'une société donnée, utiliser get_directors avec le SIREN.
search_eventsread-onlyRecherche unifiée d'événements de société (multi-SIREN), basée sur notre index ES. Renvoie des ÉVÉNEMENTS individuels (pas des sociétés) : { date, type, siren, denomination, data }. Couvre 8 types : cession (cessions de fonds), procedure (procédures collectives), depot_comptes, augmentation_capital, marche_public, subvention, radiation, creation. Ce n'est PAS le fil de veille : pour les signaux récents des sociétés suivies (nouveau bilan, score crédit, dissolution...), utiliser get_news. Couvre les événements BODACC (cessions, procédures collectives, radiations, créations) ainsi que les dépôts de comptes, augmentations de capital, marchés publics et subventions dérivés des scalaires silver. RÈGLE : préciser au moins un filtre region / departement / ville / code_naf, OU un filtre d'événement (date_min, date_max, cedant_siren, cessionnaire_siren, prix_min/max, tribunal, procedure_type) — sinon 400. IMPORTANT : passer UN SEUL type quand la question porte sur un type précis. Les filtres de cadrage (existence de l'événement, fenêtre de dates) ne sont poussés dans la requête que dans ce cas ; avec plusieurs types ils s'excluraient mutuellement, et la recherche se rabat sur un tri général dont on ne lit que les premières pages — une question pointue y paraît vide. Cas d'usage : - "Cessions de fonds > 1M en Île-de-France depuis 2024" → type="cession", region="Île-de-France", date_min="2024-01-01", prix_min=1000000 - "Procédures collectives à Lyon" → type="procedure", ville="Lyon" - "Liquidations prononcées à Marseille en juillet 2026" → type="procedure", procedure_type="liquidation", ville="Marseille", date_min="2026-07-01", date_max="2026-07-31" - "Marchés publics récents dans le BTP" → type="marche_public", code_naf="4120A"
unlock_premium_dataDébloque pour 12 mois, en crédits, des données premium d'une société, partagées dans l'organisation : linkedin (director_id de get_directors ; sans director_id, page de la société), presse, conseils. dry_run=true : devis sans débit. Sinon débite le solde dans la limite du budget mensuel de l'agent et de max_credits ; une même idempotency_key ne débite qu'une fois.
unwatch_companydestructiveRetrait d'une société de la surveillance : l'enlève 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 ARRÊTER de suivre une société ("je ne suis plus intéressé par X", "enlève X de ma veille", "nettoie ma liste"). Fonctionnement : - Sans list_name, la société est retirée de TOUTES les listes de l'utilisateur - c'est le sens naturel de "arrête de surveiller X". Avec list_name, seule cette liste est nettoyée. - Idempotent : si la société n'est dans aucune liste (ou si la liste nommée n'existe pas), l'appel renvoie removed=false sans erreur. - La liste elle-même n'est jamais supprimée, même si elle devient vide. Une alerte active sur la liste reste active pour les autres sociétés. - Le retrait fonctionne même pour une société absente de l'index (radiée, disparue) : ce qui a pu être ajouté peut toujours être enlevé. list_watched_companies donne le nom exact des listes et les sociétés qu'elles contiennent. Réponse : { siren, company_name (null si non renseignée), removed, removed_from: [{ list_id, list_name }], url (page /lists) }.
watch_companyMise sous surveillance d'une société : l'ajoute à une liste de veille de l'utilisateur, visible dans l'app Insourcia (page /lists). Utiliser cet outil quand l'utilisateur veut SUIVRE une société dans le temps (cible d'acquisition, concurrent, client, fournisseur à risque) - pas pour une simple consultation (utiliser get_company). Fonctionnement : - list_name désigne la liste cible ; la liste "Surveillance" est utilisée par défaut et créée automatiquement si besoin (idem pour toute liste nommée qui n'existe pas encore). - Idempotent : si la société est déjà dans la liste, l'appel renvoie already_watched=true sans créer de doublon. - Alerte quotidienne ACTIVE PAR DÉFAUT quand la liste est créée par cet appel (enable_alert=false pour s'en passer ; sur une liste existante, enable_alert=true l'active) : l'utilisateur est notifié des événements FUTURS touchant les sociétés de la liste (annonces BODACC : procédures collectives, cessions... et changements de dirigeants). Pas de replay de l'historique. Réponse : { siren, company_name (null si non renseignée), list_id, list_name, url (page /lists), already_watched, alert_enabled }.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.insourcia/insourcia",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.insourcia.io/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.0",
  "websiteUrl": "https://insourcia.io/docs/guides/mcp",
  "description": "Search French companies: financials, directors, ownership, M&A and insolvency events."
}