Serveur MCP

Le serveur MCP relie directement les annonces d’insolvabilité allemandes aux agents IA. Claude, Cursor ou votre propre agent peut contrôler un fournisseur, lire une procédure ou surveiller un client au fil d’une conversation, sans que personne n’écrive de client d’API.

Dernière mise à jour: 2026-09-29

Demander un accès

Les clés sont attribuées à la main. Décrivez-nous brièvement ce que vous souhaitez construire et le volume attendu : l’accès est en général actif sous un jour ouvré.

Demander un accès

Introduction

Le Model Context Protocol est un standard ouvert qui définit comment un agent IA accède à des outils et données externes. Au lieu de programmer une interface, vous ajoutez une fois le serveur à la configuration de l’agent. Le modèle sait dès lors quels outils existent et les appelle lui-même quand la conversation l’exige.

Notre serveur expose les mêmes données que l’API REST : annonces, fiches d’entreprise, chiffres de bilan, statistiques et liste de suivi. La différence tient à la présentation. Les descriptions des outils sont rédigées pour qu’un modèle comprenne quand un contrôle d’insolvabilité a du sens, quelles précisions il doit demander et où se situent les limites des données.

L’adresse est https://germanyinsolvencies.com/api/mcp. Le serveur utilise les mêmes clés que l’API REST. Si vous exploitez les deux en parallèle, vous verrez la même liste de suivi dans les deux mondes.

Questions typiques auxquelles un agent répond ainsi : « Notre fournisseur est-il insolvable ? », « Lesquelles de nos 40 factures ouvertes sont touchées par une procédure ? », « Combien d’entreprises du bâtiment ont fait faillite en Bavière ce trimestre ? »

Accès

La démarche est la même que pour l’API REST : les clés sont attribuées à la main. Utilisez le formulaire de contact ou écrivez à [email protected] en précisant brièvement quel agent vous voulez connecter et ce qu’il doit faire.

Si vous avez déjà une clé d’API, vous n’en avez pas besoin d’une seconde : la même clé ouvre le serveur MCP. Les équipes qui veulent donner accès au serveur à plusieurs personnes peuvent, sur demande, recevoir plusieurs clés sur un même compte, afin que l’on puisse retracer qui a contrôlé quoi.

Connexion et transport

Le serveur parle MCP via Streamable HTTP, le transport que les clients actuels utilisent par défaut. Aucun processus local n’est nécessaire, il n’y a rien à installer.

L’authentification utilise le même en-tête que l’API REST : X-API-Key, ou bien Authorization: Bearer. Les clients qui ne parlent que stdio atteignent le serveur via mcp-remote comme passerelle, voir la configuration de Claude Desktop ci-dessous.

Client et serveur négocient la version du protocole à la connexion. Nous prenons en charge la révision actuelle et la précédente, de sorte qu’une mise à jour du client n’entraîne jamais de rupture brutale.

bash Vérifier l’accessibilité
curl https://germanyinsolvencies.com/api/mcp/health

Installation

Dans Claude Code, une seule commande suffit. La clé doit provenir d’une variable d’environnement, pas du presse-papiers.

bash Claude Code
claude mcp add --transport http insolvency \
  https://germanyinsolvencies.com/api/mcp \
  --header "X-API-Key: $INSOLVENCY_API_KEY"

Claude Desktop

Claude Desktop lit sa liste de serveurs dans claude_desktop_config.json. L’entrée fait le pont vers le transport HTTP via mcp-remote.

json claude_desktop_config.json
{
  "mcpServers": {
    "insolvency": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://germanyinsolvencies.com/api/mcp",
        "--header", "X-API-Key:${INSOLVENCY_API_KEY}"
      ],
      "env": { "INSOLVENCY_API_KEY": "YOUR_API_KEY" }
    }
  }
}

Cursor et autres clients

Cursor, Windsurf, Zed et la plupart des autres clients prennent directement l’URL du serveur et acceptent leurs propres en-têtes, aucune passerelle n’est donc nécessaire.

json .cursor/mcp.json
{
  "mcpServers": {
    "insolvency": {
      "url": "https://germanyinsolvencies.com/api/mcp",
      "headers": { "X-API-Key": "${env:INSOLVENCY_API_KEY}" }
    }
  }
}

Après l’ajout, le client doit afficher onze outils. Si la liste reste vide, la cause est presque toujours l’en-tête : une clé expirée ou mal saisie produit une liste d’outils vide plutôt qu’une erreur visible.

Outils

Le serveur fournit onze outils. Les outils en écriture sont signalés comme tels, afin que les clients puissent demander une confirmation là où ils le souhaitent.

OutilNatureDescription
search_filingsreadRecherche des annonces par période, type, Land, tribunal ou nom. Renvoie un court résumé par résultat, le texte intégral via get_filing.
get_filingreadRenvoie une annonce avec texte intégral, tribunal, numéro de dossier et type.
check_counterpartyreadContrôle une entreprise et renvoie statut, dernière annonce et qualité de la correspondance. L’outil le plus important, voir ci-dessous.
search_companiesreadTrouve des fiches d’entreprise par nom, ville, numéro de registre ou statut.
get_companyreadRenvoie une fiche d’entreprise avec toutes les annonces rattachées, par ordre chronologique.
get_financialsreadRenvoie les chiffres de bilan publiés des derniers exercices.
get_statsreadCompte les annonces par jour, mois, Land, tribunal, type ou forme juridique.
list_filing_typesreadNomme les neuf types d’annonces avec code, alias et signification. Les agents devraient l’appeler une fois plutôt que de deviner des codes.
list_watchlistreadListe les entreprises suivies avec la date du dernier résultat.
watch_companywriteAjoute une entreprise à la liste de suivi.
unwatch_companywriteRetire une entreprise de la liste de suivi.

Tous les outils de lecture sont idempotents et peuvent être appelés sans demander. watch_company et unwatch_company modifient votre compte et se signalent au client comme outils en écriture.

check_counterparty en détail

L’outil qui compte est check_counterparty. Son schéma est volontairement étroit : un nom ou un numéro de registre, éventuellement la ville et une date de début. Moins un modèle a de décisions à prendre, moins il invente de valeurs.

json Schéma de l’outil
{
  "name": "check_counterparty",
  "description": "Check whether a German company appears in official insolvency announcements. Use before extending credit, signing a supplier or chasing an overdue invoice. Prefer register number over name when you have it. Never guess a register number.",
  "annotations": { "readOnlyHint": true },
  "inputSchema": {
    "type": "object",
    "properties": {
      "name":           { "type": "string", "description": "Company name as written on the invoice or contract." },
      "city":           { "type": "string", "description": "Registered seat, narrows ambiguous names." },
      "register":       { "type": "string", "description": "e.g. HRB 123456 B" },
      "register_court": { "type": "string", "description": "e.g. Charlottenburg (Berlin)" },
      "since":          { "type": "string", "format": "date", "description": "Only filings on or after this date. Default: 3 years ago." }
    },
    "anyOf": [ { "required": ["name"] }, { "required": ["register"] } ]
  }
}

La description indique explicitement au modèle de privilégier le numéro de registre et de ne jamais en deviner un. Un numéro de registre erroné mène à un « aucune annonce » assuré pour la mauvaise entreprise, ce qui est pire qu’une réponse ambiguë.

Si un nom n’est pas unique, l’outil n’en choisit pas un mais renvoie un texte d’erreur avec les candidats. Le modèle demande alors à l’utilisateur la ville ou le numéro de registre. Ce comportement est voulu et traité dans la section gestion des erreurs.

Sans since, l’outil remonte trois ans en arrière. Les procédures plus anciennes sont en général closes et sans intérêt pour les décisions actuelles ; si elles en ont, passez une date plus ancienne.

Format de réponse

Les outils répondent sur deux voies : un bloc de texte pour le modèle et structuredContent pour le client. Le bloc de texte est formulé pour que le modèle puisse le transmettre à l’utilisateur sans avoir à l’interpréter : entreprise, numéro de registre, stade, tribunal, numéro de dossier, date.

json Réponse de check_counterparty
{
  "content": [
    {
      "type": "text",
      "text": "Musterbau GmbH (HRB 123456 B, Berlin): insolvency proceedings OPENED on 2026-09-28 by Amtsgericht Charlottenburg, case 36a IN 4711/26. Earlier: protective measures on 2026-08-14. Source: official announcement."
    },
    {
      "type": "resource_link",
      "uri": "insolvency://filing/fil_8Kq2Zp4RwT",
      "name": "Announcement 36a IN 4711/26",
      "mimeType": "application/json"
    }
  ],
  "structuredContent": {
    "match": "exact",
    "company_id": "cmp_3n8Kd2ZpQv",
    "status": "opened",
    "filings": [
      { "id": "fil_8Kq2Zp4RwT", "date": "2026-09-28", "type_code": "2" },
      { "id": "fil_2Hd7Vb1Xe", "date": "2026-08-14", "type_code": "0" }
    ]
  },
  "isError": false
}

Les textes intégraux des annonces reviennent sous forme de liens de ressource, non intégrés. Un client qui veut afficher le texte résout le lien ; celui qui ne le veut pas garde sa fenêtre de contexte petite. Une seule annonce peut compter plusieurs milliers de caractères.

Ressources

Outre les outils, le serveur fournit des ressources sous le schéma insolvency://. Les clients qui prennent en charge les ressources peuvent les afficher ou les joindre au modèle sans appeler d’outil.

text URI de ressources
insolvency://filing/{id}             one announcement incl. full text
insolvency://company/{id}            company profile and status
insolvency://company/{id}/filings    all announcements of a company
insolvency://company/{id}/financials published balance sheet figures
insolvency://watchlist               your watched companies
insolvency://types                   filing types with codes and aliases

La ressource de liste de suivi change lorsqu’une nouvelle annonce concerne une entreprise suivie. Le serveur envoie alors une notification de changement, afin que les clients puissent actualiser leur affichage.

Prompts

Pour les tâches récurrentes, des prompts prêts à l’emploi existent. Ils recueillent ce dont la tâche a besoin, puis appellent les outils appropriés. Dans les clients qui prennent en charge les prompts, ils apparaissent comme des commandes rapides.

json Définition d’un prompt
{
  "name": "counterparty_check",
  "description": "Check a list of customers or suppliers for insolvency filings and summarise the risk.",
  "arguments": [
    { "name": "companies", "description": "One company per line: name, city or register number.", "required": true },
    { "name": "since",     "description": "Look-back start date, default 3 years.", "required": false }
  ]
}

Sont actuellement disponibles counterparty_check (contrôler une liste d’entreprises), weekly_briefing (nouvelles annonces de la semaine pour des Länder ou secteurs choisis) et proceeding_timeline (historique d’une procédure expliqué en langage clair). Si vous préférez votre propre déroulement, ignorez les prompts et appelez directement les outils.

Exemple de conversation

Voici à quoi cela ressemble en pratique. L’agent contrôle trois débiteurs, explique les résultats en termes simples, redemande là où le nom est ambigu, puis met en place la surveillance.

text Transcription
Utilisateur : Peux-tu vérifier nos trois plus grosses factures ouvertes ?
              Musterbau GmbH à Berlin, Nordlicht Handels GmbH et
              Beispiel Logistik à Hambourg.

Agent :       [check_counterparty name="Musterbau GmbH" city="Berlin"]
              [check_counterparty name="Nordlicht Handels GmbH"]
              [check_counterparty name="Beispiel Logistik" city="Hamburg"]

Agent :       Musterbau GmbH : la procédure a été ouverte le 28 septembre
              2026 (AG Charlottenburg, 36a IN 4711/26). Les créances doivent
              désormais être déclarées auprès de l’administrateur judiciaire,
              un paiement direct est improbable.
              Beispiel Logistik UG : mesures conservatoires depuis le
              22 septembre 2026, un administrateur provisoire est désigné.
              Nordlicht Handels GmbH : deux entreprises portent ce nom,
              aucune n’a d’annonce. Quelle est votre ville ?

Utilisateur : Hambourg. Et surveille les trois dès maintenant, s’il te plaît.

Agent :       [watch_company name="Nordlicht Handels GmbH" city="Hamburg"]
              [watch_company company_id="cmp_3n8Kd2ZpQv"]
              [watch_company company_id="cmp_7Yb3Rt5Mn"]
              C’est fait. Vous recevrez un webhook dès qu’une nouvelle
              annonce paraîtra.

L’étape importante est la troisième : face à un nom ambigu, l’agent pose la question au lieu de choisir. C’est exactement à cela que sert le texte d’erreur de l’outil.

Autorisations

Chaque clé porte des autorisations. Par défaut, elle peut lire les annonces, les entreprises et les statistiques ; l’écriture dans la liste de suivi doit être activée séparément.

ScopeSignification
filings:readRechercher et lire des annonces.
companies:readFiches d’entreprise, chiffres de bilan et contrôle de contreparties.
stats:readStatistiques agrégées.
watchlist:writeAjouter et retirer des entreprises de la liste de suivi.

Les outils pour lesquels la clé n’a pas d’autorisation n’apparaissent tout simplement pas dans la liste des outils. C’est plus agréable qu’une erreur en pleine conversation, car le modèle ne propose alors jamais ce qu’il ne peut de toute façon pas faire.

Gestion des erreurs

Les erreurs reviennent comme un résultat d’outil normal avec isError: true, pas comme une erreur de protocole. Le texte s’adresse au modèle et lui indique ce qu’il doit faire ensuite, afin que l’agent puisse réagir de façon sensée au cours de la conversation.

json Résultat d’erreur pour un nom ambigu
{
  "content": [
    {
      "type": "text",
      "text": "No unique match: 2 companies are called \"Nordlicht Handels GmbH\" (Hamburg, Kiel). Ask the user for the city or the register number and call check_counterparty again. Do not pick one yourself."
    }
  ],
  "isError": true
}

De véritables erreurs de protocole ne surviennent qu’avec une clé invalide, une autorisation manquante ou une requête mal formée. Tout ce qui peut mal se passer côté contenu, comme un nom ambigu, un ID inconnu ou une période trop longue, revient sous forme de texte.

Limites

Les mêmes limites que pour l’API REST s’appliquent : 120 appels d’outil par minute et par clé, 31 jours au plus par recherche d’annonces, 24 mois dans les statistiques. Pour des valeurs plus élevées, un e-mail suffit.

Le dépassement d’une limite ne produit pas d’erreur brutale mais un résultat texte indiquant quand la suite est possible. Les agents doivent alors patienter plutôt que de rappeler aussitôt.

Données et responsabilité

Le serveur renvoie des annonces publiques, mais elles contiennent des données personnelles. Les mêmes règles que pour l’API REST s’appliquent : délais de suppression de l’ordonnance allemande sur les publications d’insolvabilité, pas de publication d’annonces concernant des particuliers, pas de décisions automatisées sur des personnes physiques fondées uniquement sur ces données.

Un agent peut résumer une annonce, mais cela ne remplace pas un conseil juridique. Les textes des outils mentionnent donc toujours le tribunal et le numéro de dossier, afin que l’utilisateur puisse vérifier l’original. Nous recommandons que votre agent le rappelle aussi lorsqu’il en tire des recommandations d’action.

Ce que l’agent envoie au serveur (noms d’entreprises, vos références) sert uniquement à répondre à la requête et n’est pas transmis à des tiers. Si votre agent traite des données sur vos clients, un contrat de sous-traitance est disponible.

Exploitation

Le serveur tourne sur la même infrastructure que l’API REST. Les fenêtres de maintenance sont annoncées par e-mail à l’adresse enregistrée, et les modifications des schémas d’outils sont uniquement additives.

Lorsqu’un nouvel outil est ajouté, le serveur envoie une notification de changement. Les clients qui y réagissent voient l’outil sans redémarrer. Les outils existants gardent leur nom et leurs champs obligatoires.

Assistance

Questions, limites plus élevées, prompts ou outils propres à un workflow précis : [email protected] ou le formulaire de contact.

Si vous préférez travailler en HTTP simple, les mêmes données sont documentées comme interface REST dans la documentation de l’API. Les deux voies partagent clés, limites et contrat.

Demander un accès

Les clés sont attribuées à la main. Décrivez-nous brièvement ce que vous souhaitez construire et le volume attendu : l’accès est en général actif sous un jour ouvré.

Demander un accès