MCP — Model Context Protocol
Veritra biedt een JSON-RPC MCP-server voor AI-agents. In plaats van REST-eindpunten aan te roepen en antwoorden te verwerken, beschikken agents over high-level tools (tenders_search, leads_create_filter, …) met getypeerde parameters.
Wat is MCP
Model Context Protocol is een open standaard van Anthropic voor het verbinden van LLM-applicaties met externe gegevensbronnen en tools. Een AI-client (Claude Desktop, aangepaste app) leest de lijst met beschikbare tools van de MCP-server en bepaalt welke te gebruiken op basis van het gesprek met de gebruiker.
De Veritra MCP-server werkt als HTTP-transport — geen lokale processen, slechts één POST-eindpunt dat JSON-RPC-verzoeken accepteert.
Eindpunt en authenticatie
/api/mcpGebruik een beheer-API-sleutel (mrw_…) in de Authorization-header. De header X-MRW-Client: mcp geeft aan dat het verzoek afkomstig is van een MCP-client (intern gebruikt voor doelgroepregistratie en rechtenbeheer).
Authorization: Bearer mrw_7fa7785c3d6e… X-MRW-Client: mcp Content-Type: application/json
U vindt de sleutel in het dashboard na het onboarden. Dezelfde sleutel werkt voor REST en MCP — geen afzonderlijke installatie vereist.
JSON-RPC-envelope
Elk verzoek en antwoord volgt de JSON-RPC 2.0-specificatie. tools/list voor discovery, tools/call om een tool aan te roepen.
Verzoek
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tenders_search",
"arguments": { "qText": "rekonstrukce mostu", "limit": 10 }
}
}Antwoord
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{ "type": "text", "text": "{ … JSON payload … }" }]
}
}Bij een fout bevat het antwoord een error-object in plaats van result:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32602, "message": "Invalid params: qText is required" }
}Discovery (tools/list)
De client leest de lijst met beschikbare tools — de server retourneert MCP-standaard tooldefinities inclusief JSON-schema voor parameters.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}Het antwoord bevat een tools[]-array met { name, description, inputSchema }-objecten. De AI-client gebruikt inputSchema om argumenten te valideren.
Toolcatalogus
Momenteel 9 tools in 4 categorieën: aanbestedingen (zoeken/detail/filters), leads (filters), accounts, abonnementen, meta.
tenders_search
Live zoeken naar aanbestedingen via alle portals. Geeft de top N aanbestedingen terug met details (titel, waarde, deadline, aanbestedende dienst, …).
| Parameter | Type | Beschrijving |
|---|---|---|
| qText | string | Zoektekst (volledige tekst in titel + beschrijving). |
| industryTags | string[] | Branchetag-ID's (con_buildings, it_development). |
| cpvPrefixes | string[] | CPV-voorvoegsels (45, 452). |
| regions | string[] | NUTS-bladcodes (CZ010, CZ020, …). |
| minValue | number | Minimale geschatte waarde. |
| maxValue | number | Maximale geschatte waarde. |
| deadlineFrom | string (YYYY-MM-DD) | Inschrijvingsdeadline >= YYYY-MM-DD. |
| deadlineTo | string (YYYY-MM-DD) | Inschrijvingsdeadline <= YYYY-MM-DD. |
| sort | "newest"|"deadline"|"value" | Sortering. |
| limit | number | Aantal resultaten (max. 1000). Voor een volledige dataset-export gebruikt u nextCursor of /matches/export (CSV/XLSX, tot 5000 rijen). |
| cursor | string | Paginatiecursor. |
tenders_get_detail
Detail van één aanbesteding inclusief documenten en voorkeursvlaggen.
| Parameter | Type | Beschrijving |
|---|---|---|
| tenderId* | number | Numeriek aanbestedings-ID. |
tenders_list_industries
Geeft een lijst met branchetags terug (con_buildings, it_development, …) voor filteren — de agent kan de LLM een gebruiksvriendelijk menu tonen in plaats van ID's te onthouden.
| Parameter | Type | Beschrijving |
|---|---|---|
| locale | "cs"|"en"|"de"|"sk"|"fr" | Labellocale (standaard: cs). |
tenders_list_regions
Geeft een lijst met NUTS-regio's terug voor het opgegeven land (standaard CZ).
| Parameter | Type | Beschrijving |
|---|---|---|
| country | "CZ"|"SK"|"FR"|"DE" | Land (standaard: CZ). |
leads_list_filters
Lijst met opgeslagen LEADS-filters van de gebruiker.
Filters aangemaakt via MCP / REST worden ook gebruikt in e-mails, pushmeldingen en webhooks — de agent kan ze instellen en de gebruiker ontvangt ze via de standaardkanalen.
leads_create_filter
Maakt een nieuw LEADS-filter aan. Nieuwe overeenkomsten activeren een webhook en een e-maildigest.
| Parameter | Type | Beschrijving |
|---|---|---|
| name* | string | Weergavenaam van filter. |
| regions | string[] | NUTS-bladcodes (CZ010, CZ020, …). |
| industryTags | string[] | Branchetag-ID's (con_buildings, it_development). |
| categories | string[] | CPV-codes/voorvoegsels (verouderd). |
| keywords | string[] | Trefwoorden (OR-overeenkomst). |
| minValue | number | Minimale geschatte waarde. |
| maxValue | number | Maximale geschatte waarde. |
| emailDigest | boolean | Dagelijkse e-mailsamenvatting versturen. |
account_create_webhook
Registreer een HTTPS-webhookendpoint om events te ontvangen (leads.match.created enz.). Geeft endpoint-id + geheim terug voor HMAC-verificatie. Het geheim wordt EENMALIG getoond — sla het op in uw omgevingsvariabelen.
| Parameter | Type | Beschrijving |
|---|---|---|
| url* | string | Openbaar toegankelijke HTTPS-URL waarop Veritra events POST. |
| enabledEvents* | string[] | Array van eventtypen (bijv. ['leads.match.created']). |
| description | string | Optioneel leesbaar label. |
Max. 5 endpoints per account. Voor geheimrotatie gebruikt u /api/v2/account/webhooks/:id/rotate-secret.
subscriptions_list_plans
Publieke catalogus van diensten en prijzen (LEADS, PRICING, PROCUREMENT). Geen authenticatie vereist.
meta_list_services
Status van alle Veritra-diensten (uptime, deprecatievlaggen).
curl-voorbeeld
Zoek de top 5 bouwgerelateerde aanbestedingen boven 1 miljoen CZK in Praag:
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
}
}
}'Instellen in Claude Desktop
Voeg toe aan ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) of equivalent:
{
"mcpServers": {
"veritra": {
"url": "https://veritra.io/api/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer mrw_…",
"X-MRW-Client": "mcp"
}
}
}
}Na het herstarten van Claude Desktop ziet u het pictogram van de verbonden MCP-server in de interface. Open een gesprek en vraag bijvoorbeeld: 'Wat zijn de huidige bouwgerelateerde aanbestedingen in Praag boven een miljoen?' — Claude roept tenders_search automatisch aan.
Andere MCP-clients
De MCP-server draait via HTTP-transport — compatibel met elke client die JSON-RPC 2.0 over HTTP ondersteunt. Hieronder voorbeelden voor de meest gebruikte clients.
Cursor / Continue / Cline / Zed
Cursor IDE heeft ingebouwde MCP-ondersteuning. Bewerk ~/.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
Open-source VS Code-extensie. Voeg toe aan 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"
}
}
}
]Generieke HTTP MCP-client / ChatGPT-plugin / aangepaste LLM
Als uw client geen native MCP-ondersteuning heeft, communiceert u rechtstreeks met de API via JSON-RPC 2.0. De headers Authorization + X-MRW-Client identificeren uw account. Discovery (tools/list) is de eerste aanroep.
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" }Limieten
MCP-aanroepen vallen onder dezelfde beheer-API-limieten (60/min lezen, 10/min schrijven, 5000/dag). Bij overschrijding wordt er geretourneerd HTTP 429 (JSON-RPC-foutcode -32000).
Vragen? michal@veritra.io