Saltar al contenido
Terrnova
Desarrolladores

Conecta tu agente o tu sistema

MCP por streamable HTTP para agentes, API REST para sistemas. La misma llave y el mismo contrato rt/1 en las dos.

Dos puertas, un contrato
agentesPOST /mcpMCP · streamable HTTP · perfiles por familia
sistemasPOST /v1/co/<familia>/<herramienta>REST · OpenAPI en /docs
las dosAuthorization: Bearer rt_live_…misma llave · respuesta rt/1

Inicio rápido

La forma más corta: dale esta instrucción a tu agente y se configura solo.

Conéctate al servidor MCP de Terrnova en https://terrnova.com/mcp/catalogo (transporte HTTP) con la cabecera «Authorization: Bearer» y mi llave, que está en la variable TERRNOVA_LLAVE. Úsalo para responder con datos oficiales de Colombia: predios, estadísticas, contratación pública, ambiente, justicia, empresas y normas. Cita la entidad y la licencia que vienen en «procedencia» y no confundas «no_encontrado» con un error de la fuente. Guía para agentes: https://terrnova.com/llms.txt

  1. Pide tu llave. El plan Gratis trae 1.500 créditos al mes. Guárdala como un secreto, nunca en el código.
  2. Haz la primera consulta. El código DIVIPOLA de un municipio por su nombre cuesta 1 crédito:
export TERRNOVA_LLAVE=rt_live_...
curl -s -X POST https://terrnova.com/v1/co/territorio/dane_divipola_buscar \
  -H "Authorization: Bearer $TERRNOVA_LLAVE" \
  -H "Content-Type: application/json" \
  -d '{"nombre":"Cali"}'

La respuesta trae "estado":"encontrado", los municipios que coinciden en datos.elementos y la fuente (DANE) con su licencia en procedencia. La búsqueda respeta las tildes: «Bogota» no encuentra «Bogotá».

  1. Mira tu saldo con GET /v1/uso.

MCP

La puerta habla MCP por streamable HTTP, con la llave en la cabecera Authorization.

Claude Code:

claude mcp add --transport http terrnova https://terrnova.com/mcp \
  --header "Authorization: Bearer $TERRNOVA_LLAVE"

Cursor y otros clientes que aceptan url y headers:

{
  "mcpServers": {
    "terrnova": {
      "url": "https://terrnova.com/mcp/territorio",
      "headers": { "Authorization": "Bearer rt_live_..." }
    }
  }
}

Claude Desktop y otros clientes que solo hablan por stdio, con el puente mcp-remote:

{
  "mcpServers": {
    "terrnova": {
      "command": "npx",
      "args": ["mcp-remote", "https://terrnova.com/mcp/ambiente",
               "--header", "Authorization:${TERRNOVA_AUTH}"],
      "env": { "TERRNOVA_AUTH": "Bearer rt_live_..." }
    }
  }
}

Perfiles

RutaQué exponePara
/mcpLas 205 herramientas, más ficha_lugar y fuente_describirClientes que buscan herramientas por su cuenta, como Claude
/mcp/<familia>Las de una sola familiaUn caso de uso de un solo tema: lo más preciso y lo más rápido
/mcp/catalogoPocas herramientas genéricas que buscan en el catálogoClientes con tope de herramientas, como los modelos de OpenAI (128)

Familias: ambiente, contratacion, empresas, estadisticas, justicia, normativa, territorio. Todos los perfiles traen las herramientas de nombre a código (1 crédito) y fuente_describir, que no gasta créditos.

API REST

Las herramientas siguen el patrón POST /v1/co/<familia>/<herramienta>, con la entrada en JSON. La ficha de un lugar está en POST /v1/fichas. El esquema completo, con la entrada de cada herramienta, está en /openapi.json y se navega en /docs.

ParaDónde
Lista de herramientas con su costoGET /v1/herramientas
Ficha técnica de una fuenteGET /v1/fuentes/{fuente_id}
Saldo del mesGET /v1/uso
Estado por fuenteGET /v1/estado

Las rutas de catálogo son públicas y no gastan créditos.

Contrato rt/1

Toda consulta que llega a la fuente devuelve el mismo sobre:

CampoContenido
estadoencontrado, no_encontrado, fuera_de_cobertura o parcial
datosEl resultado
huellasha256 de datos, para verificar que no cambió
procedenciaPor fuente: entidad, URL, norma (si la hay), licencia, atribución, servido_desde, consultado_en y completitud
avisosLo que debes saber: total desconocido, datos no recientes, copia vencida…
geo_resultLas geometrías, en EPSG:4326 (lon, lat)
creditosLo que costó esa consulta

«No encontrado» no es «no se pudo». Cuando la fuente no responde llega un error, nunca un sobre vacío. Terrnova nunca inventa un dato ni hace pasar uno viejo por actual: servido_desde: obsoleto siempre llega con aviso.

Errores

Por REST, en application/problem+json (RFC 9457), con un code estable y el solicitud_id que debes darnos si escribes a soporte.

HTTPcodeQué hacer
400parametro_invalidoCorregir la entrada; param dice cuál
401no_autenticadoFalta la llave o no es válida
402saldo_agotadoSe acabaron los créditos del mes; dice cuándo se renuevan
403sin_permiso, licencia_no_habilitadaLa llave no cubre esa familia o esa fuente
404no_existeLa herramienta o la fuente no existe; la ficha de fuente sugiere ids parecidos
429limite_tasaEspera lo que dice Retry-After
502fuente_no_disponible, fuente_respuesta_invalidaNo se pudo: la fuente oficial falló o respondió algo que no se puede leer; reintenta más tarde
504fuente_lentaNo se pudo: la fuente no respondió a tiempo
500error_internoFalla nuestra; escríbenos con el solicitud_id

Cada llave tiene una ráfaga de 20 consultas y repone 60 por minuto. Reintenta con espera creciente, nunca en bucle cerrado.

Recursos