Skip to main content
Glama

K-AIR MCP

Es el servidor MCP oficial que se abre para que los agentes solo realicen consultas al datahub. Hay una única puerta de entrada y, en el origen del catálogo, el engine distingue internamente entre Postgres (mart de análisis) y Tibero (recopilación). No recibe cadenas SQL.

Su rol es similar al de T2SQL·query_execute de robo-meta-api, pero el servidor no genera SQL; ensambla el SELECT a partir de los argumentos de la herramienta. No replica el mock del portal POST /mcp como versión canónica.

Historial de actualizaciones: change_log.md

Qué hace este servicio

  • Proporciona al agente herramientas de listado de tablas, detalle de columnas, valores únicos, SELECT limitado y agregación.

  • Tablas permitidas = POST /meta/catalog ∩ tablas y columnas que realmente existen en el origen de ese motor.

  • HTTP usa Streamable HTTP (/mcp) + X-Api-Key. stdio es para IDE en el mismo PC.

  • La IA solo conoce la URL del MCP y la API Key. La contraseña de la BD y la dirección de robo no aparecen en los resultados de las herramientas.

Lo que no hace: SQL libre, DML/DDL, volcado/envío, Tibero de operación, consulta de datos de t2s·argus_catalog, ni dividir el MCP por motor.

Related MCP server: governed-mcp

Herramientas

Herramienta

Función

list_tables

Lista de tablas permitidas. schema_name opcional. La respuesta incluye engine

describe_table

Tipo de columna, PK y comentario. Las descripciones en coreano ausentes quedan en blanco

get_distinct_values

DISTINCT de columnas permitidas. Máximo 200

query_table

SELECT ensamblado. columns, filters {column,op,value}, order_by {column,dir}

aggregate_table

count/sum/avg/max/min. El total de filas se obtiene con func=count y sin columna

Límite de filas 200. Solo lectura (default_transaction_read_only), statement_timeout 15 segundos. filters.op: eq, ne, gt, gte, lt, lte, like, in, is_null, is_not_null.

Distinción de motores

El sources[].engine de /meta/catalog es la fuente canónica. El agente no elige el motor.

engine del catálogo

Origen

postgresql / postgres / postgis

Mart de análisis (en local, kair-postgis-16)

tibero / oracle

Tibero de recopilación. En OA a veces se registra como oracle

Si el motor no existe o es un valor desconocido, se excluye de la lista. Aunque una tabla de Tibero tenga el mismo nombre que una tabla real de Postgres, no se mezclan.

En local solo hay Postgres. Si no hay conexión ni JDBC a Tibero, las fuentes Tibero del catálogo no aparecen en la lista. Los JAR de JDBC no se incluyen en la imagen.

Configuración

app/                 FastMCP 서버 (stdio / Streamable HTTP)
tests/               단위·계약 테스트
docker-compose.yml   네트워크용 http :8110
mcp.cursor.example.json       같은 PC stdio
mcp.cursor.http.example.json  다른 PC HTTP

Premisa: red de robo-meta-api y kair-metadata-platform_control-plane. El lado de datos es el kair-postgis-16 local (host 5434). El portal, OASIS y el Tibero de operación están fuera del alcance de este repositorio.

Ejecución

copy .env.example .env
# MCP_API_KEYS · MCP_PG_* 실제 값만 채움. 따옴표 넣지 않음
docker compose up -d --build
curl.exe -fsS http://127.0.0.1:8110/health

Salud: {"status":"ok","server":"kair-mcp-query","transport":"streamable-http","engines":["postgres"]}

CLI en el mismo PC (stdio, por defecto):

python -m app.main

HTTP en contenedor:

python -m app.main --transport http

Registro en MCP

Mismo PC (se recomienda stdio). El contenedor debe estar levantado. No se incluyen URL, clave ni .env.

{
  "mcpServers": {
    "kair-query": {
      "command": "docker",
      "args": ["exec", "-i", "kair-mcp-query", "python", "-m", "app.main", "--transport", "stdio"]
    }
  }
}

Otro PC (Streamable HTTP). No se incluye la contraseña de la BD.

{
  "mcpServers": {
    "kair-query": {
      "url": "http://<MCP띄운PC의IP>:8110/mcp",
      "headers": {
        "X-Api-Key": "<MCP_API_KEYS 값만>"
      }
    }
  }
}

mcp.json es JSON, así que las claves van entre "…". Los valores que recibe el servidor son claves sin comillas.

Ajustes

Copie .env.example a .env, que está excluido de Git. Las contraseñas y API Keys no se guardan en el código ni en documentos rastreados por Git.

Variable

Función

MCP_API_KEYS

X-Api-Key de HTTP. Clave de humo local. No es dh_·tm_po_api_key del portal

MCP_PG_HOST / PORT / DB / USER / PASSWORD

Cuenta SELECT del mart. Host por defecto host.docker.internal, puerto 5434

ROBO_META_URL

POST /meta/catalog. Por defecto http://robo-meta-api:8100

MCP_ROW_LIMIT

Límite de filas. El servidor lo recorta a 200

MCP_TB_*

Tibero de recopilación. Solo si hay conexión

La conexión canónica es SourceDbConn en OA. En local es env/CLI.

Pruebas

python -m pytest tests -q

Problemas y limitaciones conocidos

Elemento

Descripción

Estado

Ejecución Tibero

Hay ramas de dialecto (FETCH FIRST) y de motor. Sin conexión JDBC

Se retoma cuando lleguen SID y JAR de recopilación

Clave y auditoría del portal

tm_po_api_key / th_po_api_call / nivel y solicitud de uso

No implementado. La clave local está pendiente de retirar

SQL libre

execute_read_only_sql de los comentarios de Gemini

No se incluye

Límite de filas 1000

Comentarios de Gemini

No aplicado. Se mantiene 200

Relacionado

  • robo-meta-api — POST /meta/catalog

  • K-AIR-metadata-platform — Serving t2s_*

  • K-AIR-Portal — Futura puerta canónica POST /api/v1/mcp, registro de claves

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to inspect schemas, walk Delta table history, run read-only DuckDB queries, and check data-quality and job-run status safely.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to query a read-only data surface through typed tools, enforcing caller-specific row access, field masking, and withheld-row disclosure so they can retrieve entitled information without writes or silent data leakage.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to safely query SQL databases through read-only tools for describing entities, reading records, and aggregating records, with view-based access and fail-closed per-user row-level security.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to query Postgres, BigQuery and DuckDB read-only through policy-checked SQL, with AST-based guards that refuse writes and dangerous functions, column masking on the way out, and an audit log of every query. Also exposes schema browsing and query-planning tools so agents can see allowed tables, columns and costs before running anything.
    MIT