MCP — Model Context Protocol
Veritra expone un servidor MCP JSON-RPC para agentes de IA. En lugar de llamar a endpoints REST y analizar respuestas, los agentes disponen de herramientas de alto nivel (tenders_search, leads_create_filter, …) con parámetros tipados.
¿Qué es MCP?
Model Context Protocol es un estándar abierto de Anthropic para conectar aplicaciones LLM con fuentes de datos y herramientas externas. Un cliente de IA (Claude Desktop, aplicación personalizada) lee la lista de herramientas disponibles desde el servidor MCP y decide cuál invocar según la conversación con el usuario.
El servidor MCP de Veritra funciona como transporte HTTP — sin procesos locales, solo un endpoint POST que acepta solicitudes JSON-RPC.
Endpoint y autenticación
/api/mcpUtilice una clave de API de gestión (mrw_…) en el encabezado Authorization. El encabezado X-MRW-Client: mcp indica que la llamada proviene de un cliente MCP (utilizado internamente para seguimiento de audiencia y verificación de derechos).
Authorization: Bearer mrw_7fa7785c3d6e… X-MRW-Client: mcp Content-Type: application/json
Encontrará la clave en el panel de control tras el proceso de incorporación. La misma clave es válida para REST y MCP — no se requiere configuración adicional.
Estructura JSON-RPC
Cada solicitud y respuesta sigue la especificación JSON-RPC 2.0. tools/list para descubrimiento, tools/call para invocar una herramienta.
Solicitud
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tenders_search",
"arguments": { "qText": "rekonstrukce mostu", "limit": 10 }
}
}Respuesta
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{ "type": "text", "text": "{ … JSON payload … }" }]
}
}En caso de error, la respuesta contiene un objeto error en lugar de result:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32602, "message": "Invalid params: qText is required" }
}Descubrimiento (tools/list)
El cliente lee la lista de herramientas disponibles — el servidor devuelve definiciones de herramientas estándar MCP, incluyendo el esquema JSON de los parámetros.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}La respuesta contiene un array tools[] con objetos { name, description, inputSchema }. El cliente de IA utiliza inputSchema para validar los argumentos.
Catálogo de herramientas
Actualmente 9 herramientas en 4 categorías: licitaciones (búsqueda/detalle/filtros), leads (filtros), cuentas, suscripciones, meta.
tenders_search
Búsqueda en tiempo real de licitaciones en todos los portales. Devuelve las N principales licitaciones con detalle (título, valor, plazo, autoridad contratante, …).
| Parámetro | Tipo | Descripción |
|---|---|---|
| qText | string | Texto de búsqueda (texto completo en título + descripción). |
| industryTags | string[] | IDs de etiqueta de sector (con_buildings, it_development). |
| cpvPrefixes | string[] | Prefijos CPV (45, 452). |
| regions | string[] | Códigos NUTS hoja (CZ010, CZ020, …). |
| minValue | number | Valor estimado mínimo. |
| maxValue | number | Valor estimado máximo. |
| deadlineFrom | string (YYYY-MM-DD) | Plazo de presentación >= AAAA-MM-DD. |
| deadlineTo | string (YYYY-MM-DD) | Plazo de presentación <= AAAA-MM-DD. |
| sort | "newest"|"deadline"|"value" | Ordenar. |
| limit | number | Número de resultados (máx. 1000). Para exportar el conjunto completo de datos utilice nextCursor o /matches/export (CSV/XLSX, hasta 5000 filas). |
| cursor | string | Cursor de paginación. |
tenders_get_detail
Detalle de una licitación, incluyendo documentos y marcadores de preferencia.
| Parámetro | Tipo | Descripción |
|---|---|---|
| tenderId* | number | ID numérico de licitación. |
tenders_list_industries
Devuelve la lista de etiquetas de sector (con_buildings, it_development, …) para filtrado — el agente puede mostrar al LLM un menú comprensible en lugar de memorizar IDs.
| Parámetro | Tipo | Descripción |
|---|---|---|
| locale | "cs"|"en"|"de"|"sk"|"fr" | Idioma de etiqueta (cs por defecto). |
tenders_list_regions
Devuelve la lista de regiones NUTS para el país indicado (CZ por defecto).
| Parámetro | Tipo | Descripción |
|---|---|---|
| country | "CZ"|"SK"|"FR"|"DE" | País (CZ por defecto). |
leads_list_filters
Lista de filtros LEADS guardados por el usuario.
Los filtros creados mediante MCP / REST también se utilizan en correos electrónicos, notificaciones push y webhooks — el agente puede configurarlos y el usuario los recibe a través de los canales habituales.
leads_create_filter
Crea un nuevo filtro LEADS. Las nuevas coincidencias activan webhook y resumen por correo electrónico.
| Parámetro | Tipo | Descripción |
|---|---|---|
| name* | string | Nombre visible del filtro. |
| regions | string[] | Códigos NUTS hoja (CZ010, CZ020, …). |
| industryTags | string[] | IDs de etiqueta de sector (con_buildings, it_development). |
| categories | string[] | Códigos/prefijos CPV (heredado). |
| keywords | string[] | Palabras clave (coincidencia OR). |
| minValue | number | Valor estimado mínimo. |
| maxValue | number | Valor estimado máximo. |
| emailDigest | boolean | Enviar resumen diario por correo electrónico. |
account_create_webhook
Registre un endpoint webhook HTTPS para recibir eventos (leads.match.created, etc.). Devuelve el ID del endpoint y el secreto para verificación HMAC. El secreto se muestra UNA SOLA VEZ — guárdelo en su entorno.
| Parámetro | Tipo | Descripción |
|---|---|---|
| url* | string | URL HTTPS accesible públicamente donde Veritra enviará eventos por POST. |
| enabledEvents* | string[] | Array de tipos de evento (p. ej. ['leads.match.created']). |
| description | string | Etiqueta descriptiva opcional. |
Máx. 5 endpoints por cuenta. Para rotar el secreto use /api/v2/account/webhooks/:id/rotate-secret.
subscriptions_list_plans
Catálogo público de servicios y precios (LEADS, PRICING, PROCUREMENT). No requiere autenticación.
meta_list_services
Estado de todos los servicios de Veritra (disponibilidad, indicadores de obsolescencia).
Ejemplo con curl
Encontrar las 5 principales licitaciones de construcción por encima de 1M CZK en Praga:
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
}
}
}'Configuración en Claude Desktop
Añadir en ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o equivalente:
{
"mcpServers": {
"veritra": {
"url": "https://veritra.io/api/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer mrw_…",
"X-MRW-Client": "mcp"
}
}
}
}Tras reiniciar Claude Desktop, verá el icono del servidor MCP conectado en la interfaz. Abra una conversación y pregunte, por ejemplo, '¿Cuáles son las licitaciones de construcción actuales en Praga por encima de un millón?' — Claude llamará a tenders_search de forma automática.
Otros clientes MCP
El servidor MCP funciona sobre transporte HTTP — compatible con cualquier cliente que use JSON-RPC 2.0 sobre HTTP. A continuación se muestran ejemplos para los más habituales.
Cursor / Continue / Cline / Zed
Cursor IDE tiene soporte MCP integrado. Edite ~/.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
Extensión de VS Code de código abierto. Añada a 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"
}
}
}
]Cliente HTTP MCP genérico / plugin ChatGPT / LLM personalizado
Si su cliente no tiene soporte MCP nativo, comuníquese con la API directamente mediante JSON-RPC 2.0. Las cabeceras Authorization + X-MRW-Client identifican su cuenta. La primera llamada es de descubrimiento (tools/list).
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" }Límites de uso
Las llamadas MCP están sujetas a los mismos límites de la API de gestión (60/min lectura, 10/min escritura, 5000/día). Si se superan, se devuelve HTTP 429 (Código de error JSON-RPC -32000).
¿Preguntas? michal@veritra.io