Intégration pour l'IA

MCP — Model Context Protocol

Veritra expose un serveur MCP JSON-RPC pour les agents IA. Plutôt que l'agent doive appeler des endpoints REST et analyser les réponses, il reçoit des outils de haut niveau (tenders_search, leads_create_filter, …) avec des paramètres typés.

Qu'est-ce que le MCP

Le Model Context Protocol est un standard ouvert d'Anthropic permettant de connecter des applications LLM à des sources de données et des outils externes. Le client IA (Claude Desktop, application personnalisée) lit la liste des outils disponibles depuis le serveur MCP et décide lui-même lequel appeler en fonction de la conversation avec l'utilisateur.

Le serveur MCP Veritra fonctionne en transport HTTP — aucun processus local, un seul endpoint POST qui accepte des requêtes JSON-RPC.

Endpoint et authentification

POST/api/mcp

Utilisez la clé API de gestion (mrw_…) dans l'en-tête Authorization. L'en-tête X-MRW-Client: mcp indique que l'appel provient d'un client MCP (utilisé en interne pour le suivi d'audience et la vérification des droits d'accès).

Authorization: Bearer mrw_7fa7785c3d6e…
X-MRW-Client: mcp
Content-Type: application/json

La clé est disponible dans le tableau de bord après l'intégration. La même clé fonctionne pour REST et MCP — aucune configuration séparée n'est nécessaire.

Enveloppe JSON-RPC

Chaque requête et réponse suit la spécification JSON-RPC 2.0. tools/list pour la découverte, tools/call pour l'appel d'un outil.

Requête

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tenders_search",
    "arguments": { "qText": "rekonstrukce mostu", "limit": 10 }
  }
}

Réponse

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [{ "type": "text", "text": "{ … JSON payload … }" }]
  }
}

En cas d'erreur, la réponse contient un objet error à la place de result :

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": { "code": -32602, "message": "Invalid params: qText is required" }
}

Découverte (tools/list)

Le client lit la liste des outils disponibles — le serveur retourne les définitions d'outils conformes au standard MCP, y compris le schéma JSON des paramètres.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

La réponse contient un tableau tools[] d'objets { name, description, inputSchema }. Le client IA utilise inputSchema pour valider les arguments.

Catalogue des outils

Actuellement 9 outils répartis en 4 catégories : tenders (search/detail/filters), leads (filters), accounts, subscriptions, meta.

tenders_search

Recherche en temps réel d'appels d'offres sur l'ensemble des portails. Retourne les N premiers appels d'offres avec leurs détails (titre, valeur, échéance, pouvoir adjudicateur, …).

ParamètreTypeDescription
qTextstringTexte recherché (plein texte dans title + description).
industryTagsstring[]IDs de tags sectoriels (con_buildings, it_development).
cpvPrefixesstring[]Préfixes CPV (45, 452).
regionsstring[]Codes feuilles NUTS (CZ010, CZ020, …).
minValuenumberValeur estimée minimale.
maxValuenumberValeur estimée maximale.
deadlineFromstring (YYYY-MM-DD)Date limite de soumission >= YYYY-MM-DD.
deadlineTostring (YYYY-MM-DD)Date limite de soumission <= YYYY-MM-DD.
sort"newest"|"deadline"|"value"Tri.
limitnumberNombre de résultats (max 1000). Pour un export complet du jeu de données, utilisez nextCursor ou /matches/export (CSV/XLSX, jusqu'à 5000 lignes).
cursorstringCurseur de pagination.

tenders_get_detail

Détail d'un appel d'offres, incluant les documents et les indicateurs de préférence.

ParamètreTypeDescription
tenderId*numberID numérique de l'appel d'offres.

tenders_list_industries

Retourne la liste des tags sectoriels (con_buildings, it_development, …) pour le filtrage — l'agent peut afficher à l'LLM un menu convivial plutôt que de saisir manuellement les IDs.

ParamètreTypeDescription
locale"cs"|"en"|"de"|"sk"|"fr"Localisation des libellés (cs par défaut).

tenders_list_regions

Retourne la liste des régions NUTS pour un pays donné (CZ par défaut).

ParamètreTypeDescription
country"CZ"|"SK"|"FR"|"DE"Pays (CZ par défaut).

leads_list_filters

Liste des filtres LEADS enregistrés par l'utilisateur.

Les filtres créés via MCP / REST sont également utilisés dans les e-mails, les notifications push et les webhooks — l'agent peut les configurer et l'utilisateur les reçoit via les canaux habituels.

leads_create_filter

Crée un nouveau filtre LEADS. Chaque nouvelle correspondance sur des marchés déclenche un webhook et un récapitulatif par e-mail.

ParamètreTypeDescription
name*stringNom d'affichage du filtre.
regionsstring[]Codes feuilles NUTS (CZ010, CZ020, …).
industryTagsstring[]IDs de tags sectoriels (con_buildings, it_development).
categoriesstring[]Codes/préfixes CPV (legacy).
keywordsstring[]Mots-clés (correspondance OR).
minValuenumberValeur estimée minimale.
maxValuenumberValeur estimée maximale.
emailDigestbooleanEnvoyer un digest e-mail quotidien.

account_create_webhook

Enregistre un endpoint webhook HTTPS pour la réception d'événements (leads.match.created, etc.). Retourne l'id de l'endpoint + le secret pour la vérification HMAC. Le secret s'affiche UNE SEULE FOIS — sauvegardez-le dans votre ENV.

ParamètreTypeDescription
url*stringURL HTTPS publique vers laquelle Veritra enverra un POST.
enabledEvents*string[]Tableau de types d'événements (ex. ['leads.match.created']).
descriptionstringDescription facultative pour votre référence.

Maximum 5 endpoints par compte. Pour la rotation du secret, utilisez /api/v2/account/webhooks/:id/rotate-secret.

subscriptions_list_plans

Catalogue public des services et tarifs (LEADS, PRICING, PROCUREMENT). Sans authentification.

meta_list_services

État de l'ensemble des services Tendera (disponibilité, indicateurs de dépréciation).

exemple curl

Recherche des 5 meilleures marchés de construction au-dessus d'1M CZK à Prague :

curl -X POST https://veritra.io/api/mcp \
  -H "Authorization: Bearer mrw_…" \
  -H "X-MRW-Client: mcp" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "tenders_search",
      "arguments": {
        "industryTags": ["con_buildings"],
        "regions": ["CZ010"],
        "minValue": 1000000,
        "limit": 5
      }
    }
  }'

Configuration dans Claude Desktop

Ajoutez dans ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou l'équivalent :

{
  "mcpServers": {
    "veritra": {
      "url": "https://veritra.io/api/mcp",
      "transport": "http",
      "headers": {
        "Authorization": "Bearer mrw_…",
        "X-MRW-Client": "mcp"
      }
    }
  }
}

Après le redémarrage de Claude Desktop, vous verrez dans l'interface l'icône du serveur MCP connecté. Ouvrez une conversation et posez une question du type « Quels sont les appels d'offres de construction actuels à Prague au-dessus d'un million ? » — Claude appellera automatiquement tenders_search.

Autres clients MCP

Le serveur MCP fonctionne en transport HTTP — compatible avec tout client prenant en charge JSON-RPC 2.0 via HTTP. Exemples pour les plus courants ci-dessous.

Cursor / Continue / Cline / Zed

Cursor IDE dispose d'un support MCP intégré. Éditez ~/.cursor/mcp.json :

// ~/.cursor/mcp.json
{
  "mcpServers": {
    "veritra": {
      "url": "https://veritra.io/api/mcp",
      "headers": {
        "Authorization": "Bearer mrw_mgmt_…",
        "X-MRW-Client": "mcp"
      }
    }
  }
}

Continue.dev

Extension VS Code open-source. Ajoutez dans config.json :

// ~/.continue/config.json (snippet)
"mcpServers": [
  {
    "name": "veritra",
    "transport": { "type": "http", "url": "https://veritra.io/api/mcp" },
    "requestOptions": {
      "headers": {
        "Authorization": "Bearer mrw_mgmt_…",
        "X-MRW-Client": "mcp"
      }
    }
  }
]

Client HTTP MCP générique / plugin ChatGPT / LLM personnalisé

Si votre client ne dispose pas d'un support MCP natif, communiquez directement avec l'API via JSON-RPC 2.0. Les en-têtes Authorization + X-MRW-Client identifient votre compte. La découverte (tools/list) est le premier appel à effectuer.

POST https://veritra.io/api/mcp HTTP/1.1
Authorization: Bearer mrw_mgmt_<your_key>
X-MRW-Client: mcp
Content-Type: application/json

{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }

Limites de débit

Les appels MCP sont soumis aux mêmes limites de l'API de gestion (60/min en lecture, 10/min en écriture, 5000/jour). En cas de dépassement, retourne HTTP 429 (code d'erreur JSON-RPC -32000).

Des questions ? michal@veritra.io