KI-Integration

MCP — Model Context Protocol

Tendero stellt einen JSON-RPC MCP-Server für KI-Agenten bereit. Statt REST-Endpunkte aufzurufen und Responses zu parsen, erhalten Agenten High-Level-Tools (tenders_search, leads_create_filter, …) mit typisierten Parametern.

Was ist MCP

Model Context Protocol ist ein offener Standard von Anthropic für die Verbindung von LLM-Anwendungen mit externen Datenquellen und Tools. Ein KI-Client (Claude Desktop, eigene App) liest die Liste verfügbarer Tools vom MCP-Server und entscheidet selbst, welches er aufruft, basierend auf der Konversation mit dem Benutzer.

Tendero MCP-Server läuft als HTTP-Transport — keine lokalen Prozesse, nur ein POST-Endpunkt, der JSON-RPC-Requests akzeptiert.

Endpunkt und Authentifizierung

POST/api/mcp

Verwende einen Management-API-Key (mrw_…) im Authorization-Header. Der Header X-MRW-Client: mcp signalisiert, dass der Call von einem MCP-Client kommt (intern für Audience-Tracking und Entitlement-Check).

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

Den Key findest du im Dashboard nach dem Onboarding. Der gleiche Key funktioniert für REST und MCP — kein separates Setup.

JSON-RPC-Envelope

Jeder Request und Response folgt der JSON-RPC 2.0-Spec. tools/list für Discovery, tools/call für Tool-Aufruf.

Request

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

Response

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

Bei Fehler enthält Response ein error-Objekt statt result:

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

Discovery (tools/list)

Client liest die Liste verfügbarer Tools — Server gibt MCP-Standard-Tool-Definitionen inkl. JSON-Schema für Parameter zurück.

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

Response enthält tools[]-Array mit { name, description, inputSchema }-Objekten. KI-Client nutzt inputSchema zur Validierung der Arguments.

Tool-Katalog

Aktuell 9 Tools in 4 Kategorien: tenders (search/detail/filters), leads (filters), accounts, subscriptions, meta.

tenders_search

Live-Suche nach Tendern über alle Portale. Gibt Top-N-Tender mit Details (Titel, Wert, Frist, Auftraggeber, …) zurück.

ParameterTypBeschreibung
qTextstringSuchtext (Volltext in title + description).
industryTagsstring[]Industry-Tag-IDs (con_buildings, it_development).
cpvPrefixesstring[]CPV-Prefixes (45, 452).
regionsstring[]NUTS-Leaf-Codes (CZ010, CZ020, …).
minValuenumberMin Schätzwert.
maxValuenumberMax Schätzwert.
deadlineFromstring (YYYY-MM-DD)Abgabefrist >= YYYY-MM-DD.
deadlineTostring (YYYY-MM-DD)Abgabefrist <= YYYY-MM-DD.
sort"newest"|"deadline"|"value"Sortierung.
limitnumberErgebnisanzahl (max. 1000). Für vollständigen Datensatz-Export nextCursor oder /matches/export (CSV/XLSX, bis 5000 Zeilen) verwenden.
cursorstringPagination-Cursor.

tenders_get_detail

Detail eines Tenders inkl. Documents + Preference Flags.

ParameterTypBeschreibung
tenderId*numberNumerische Tender-ID.

tenders_list_industries

Gibt Liste der Industry-Tags zurück (con_buildings, it_development, …) zum Filtern — Agent kann LLM ein user-friendly Menü statt IDs zeigen.

ParameterTypBeschreibung
locale"cs"|"en"|"de"Label-Locale (cs default).

tenders_list_regions

Gibt Liste der NUTS-Regionen für das angegebene Land zurück (CZ default).

ParameterTypBeschreibung
country"CZ"|"SK"|"FR"|"DE"Land (CZ default).

leads_list_filters

Liste der gespeicherten LEADS-Filter des Users.

Filter, die via MCP / REST erstellt werden, werden auch in E-Mails, Push-Notifications und Webhooks verwendet — Agent kann einrichten, User erhält über Standard-Kanäle.

leads_create_filter

Erstellt neuen LEADS-Filter. Neue Matches triggern Webhook + Email-Digest.

ParameterTypBeschreibung
name*stringDisplay-Name des Filters.
regionsstring[]NUTS-Leaf-Codes (CZ010, CZ020, …).
industryTagsstring[]Industry-Tag-IDs (con_buildings, it_development).
categoriesstring[]CPV-Codes/Prefixes (legacy).
keywordsstring[]Keywords (OR Match).
minValuenumberMin Schätzwert.
maxValuenumberMax Schätzwert.
emailDigestbooleanTägliches Email-Digest senden.

account_create_webhook

Registriert einen HTTPS-Webhook-Endpoint zum Empfang von Events (leads.match.created etc.). Gibt Endpoint-ID + Secret für HMAC-Verifikation zurück. Secret wird NUR EINMAL angezeigt — in deine ENV speichern.

ParameterTypBeschreibung
url*stringÖffentlich erreichbare HTTPS-URL, an die Tendero POSTs sendet.
enabledEvents*string[]Array von Event-Types (z. B. ['leads.match.created']).
descriptionstringOptionales menschenlesbares Label.

Max 5 Endpoints pro Konto. Für Secret-Rotation /api/v2/account/webhooks/:id/rotate-secret verwenden.

subscriptions_list_plans

Öffentlicher Katalog der Services und Preise (LEADS, PRICING, PROCUREMENT). Ohne Auth.

meta_list_services

Status aller Tendero-Services (Uptime, Deprecation-Flags).

curl-Beispiel

Top 5 Bau-Tender über 1M CZK in Prag finden:

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
      }
    }
  }'

Setup in Claude Desktop

Hinzufügen zu ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) oder Äquivalent:

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

Nach Neustart von Claude Desktop siehst du das Icon des verbundenen MCP-Servers im UI. Öffne eine Konversation und frage z.B.: 'Welche Bau-Tender gibt es aktuell in Prag über einer Million?' — Claude ruft tenders_search selbst auf.

Andere MCP-Clients

Der MCP-Server läuft über HTTP-Transport — kompatibel mit jedem Client, der JSON-RPC 2.0 über HTTP spricht. Beispiele unten für die häufigsten.

Cursor / Continue / Cline / Zed

Cursor IDE hat eingebauten MCP-Support. Bearbeite ~/.cursor/mcp.json:

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

Continue.dev

Open-Source VS Code Extension. Füge zu config.json hinzu:

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

Generic HTTP MCP-Client / ChatGPT-Plugin / eigenes LLM

Wenn dein Client keinen nativen MCP-Support hat, sprich direkt über JSON-RPC 2.0 mit der API. Authorization- und X-MRW-Client-Header identifizieren dein Konto. Discovery (tools/list) ist der erste Call.

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" }

Rate Limits

MCP-Calls fallen unter die gleichen Mgmt-API-Limits (60/min read, 10/min write, 5000/Tag). Bei Überschreitung wird HTTP 429 zurückgegeben (JSON-RPC error code -32000).