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
/api/mcpUtilisez 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ètre | Type | Description |
|---|---|---|
| qText | string | Texte recherché (plein texte dans title + description). |
| industryTags | string[] | IDs de tags sectoriels (con_buildings, it_development). |
| cpvPrefixes | string[] | Préfixes CPV (45, 452). |
| regions | string[] | Codes feuilles NUTS (CZ010, CZ020, …). |
| minValue | number | Valeur estimée minimale. |
| maxValue | number | Valeur estimée maximale. |
| deadlineFrom | string (YYYY-MM-DD) | Date limite de soumission >= YYYY-MM-DD. |
| deadlineTo | string (YYYY-MM-DD) | Date limite de soumission <= YYYY-MM-DD. |
| sort | "newest"|"deadline"|"value" | Tri. |
| limit | number | Nombre de résultats (max 1000). Pour un export complet du jeu de données, utilisez nextCursor ou /matches/export (CSV/XLSX, jusqu'à 5000 lignes). |
| cursor | string | Curseur de pagination. |
tenders_get_detail
Détail d'un appel d'offres, incluant les documents et les indicateurs de préférence.
| Paramètre | Type | Description |
|---|---|---|
| tenderId* | number | ID 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ètre | Type | Description |
|---|---|---|
| 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ètre | Type | Description |
|---|---|---|
| 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ètre | Type | Description |
|---|---|---|
| name* | string | Nom d'affichage du filtre. |
| regions | string[] | Codes feuilles NUTS (CZ010, CZ020, …). |
| industryTags | string[] | IDs de tags sectoriels (con_buildings, it_development). |
| categories | string[] | Codes/préfixes CPV (legacy). |
| keywords | string[] | Mots-clés (correspondance OR). |
| minValue | number | Valeur estimée minimale. |
| maxValue | number | Valeur estimée maximale. |
| emailDigest | boolean | Envoyer 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ètre | Type | Description |
|---|---|---|
| url* | string | URL HTTPS publique vers laquelle Veritra enverra un POST. |
| enabledEvents* | string[] | Tableau de types d'événements (ex. ['leads.match.created']). |
| description | string | Description 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