AI-integratie

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

POST/api/mcp

Gebruik 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, …).

ParameterTypeBeschrijving
qTextstringZoektekst (volledige tekst in titel + beschrijving).
industryTagsstring[]Branchetag-ID's (con_buildings, it_development).
cpvPrefixesstring[]CPV-voorvoegsels (45, 452).
regionsstring[]NUTS-bladcodes (CZ010, CZ020, …).
minValuenumberMinimale geschatte waarde.
maxValuenumberMaximale geschatte waarde.
deadlineFromstring (YYYY-MM-DD)Inschrijvingsdeadline >= YYYY-MM-DD.
deadlineTostring (YYYY-MM-DD)Inschrijvingsdeadline <= YYYY-MM-DD.
sort"newest"|"deadline"|"value"Sortering.
limitnumberAantal resultaten (max. 1000). Voor een volledige dataset-export gebruikt u nextCursor of /matches/export (CSV/XLSX, tot 5000 rijen).
cursorstringPaginatiecursor.

tenders_get_detail

Detail van één aanbesteding inclusief documenten en voorkeursvlaggen.

ParameterTypeBeschrijving
tenderId*numberNumeriek 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.

ParameterTypeBeschrijving
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).

ParameterTypeBeschrijving
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.

ParameterTypeBeschrijving
name*stringWeergavenaam van filter.
regionsstring[]NUTS-bladcodes (CZ010, CZ020, …).
industryTagsstring[]Branchetag-ID's (con_buildings, it_development).
categoriesstring[]CPV-codes/voorvoegsels (verouderd).
keywordsstring[]Trefwoorden (OR-overeenkomst).
minValuenumberMinimale geschatte waarde.
maxValuenumberMaximale geschatte waarde.
emailDigestbooleanDagelijkse 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.

ParameterTypeBeschrijving
url*stringOpenbaar toegankelijke HTTPS-URL waarop Veritra events POST.
enabledEvents*string[]Array van eventtypen (bijv. ['leads.match.created']).
descriptionstringOptioneel 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).