Skip to main content
Glama

K-AIR MCP

Это официальный MCP-сервер, открытый для того, чтобы агент выполнял только чтение из DataHub. Окно одно, а внутри сервер сам различает Postgres (аналитический март) и Tibero (сбор) как источник каталога engine. SQL-строки не принимаются.

По роли он похож на T2SQL·query_execute из robo-meta-api, но сервер не строит SQL — SELECT собирается из аргументов инструмента. Мокап портала POST /mcp как эталон не копируется.

История обновлений: change_log.md

Что делает этот сервис

  • Предоставляет агенту инструменты: список таблиц, детали колонок, уникальные значения, ограниченный SELECT, агрегаты.

  • Разрешённые таблицы = POST /meta/catalog ∩ таблицы·колонки, реально существующие в исходной системе соответствующего движка.

  • HTTP — Streamable HTTP (/mcp) + X-Api-Key. stdio — для IDE на том же ПК.

  • ИИ знает только URL MCP и API-ключ. Паролей БД и адреса robo в результатах инструментов нет.

Чего сервис не делает: свободный SQL, DML/DDL, дамп/отправка, операционный Tibero, чтение данных t2s·argus_catalog, разделение MCP по движкам.

Related MCP server: governed-mcp

Инструменты

Инструмент

Роль

list_tables

Список разрешённых таблиц. Необязательный schema_name. В ответе engine

describe_table

Типы колонок·PK·комментарии. Отсутствующие корейские описания — пустые ячейки

get_distinct_values

DISTINCT по разрешённой колонке. Максимум 200

query_table

Собранный SELECT. columns, filters {column,op,value}, order_by {column,dir}

aggregate_table

count/sum/avg/max/min. Общее число строк — func=count без column

Верхний предел строк 200. Только чтение (default_transaction_read_only), statement_timeout 15 секунд. filters.op: eq, ne, gt, gte, lt, lte, like, in, is_null, is_not_null.

Разделение движков

engine из sources[].engine в /meta/catalog — эталон. Агент движок не выбирает.

engine каталога

Источник

postgresql / postgres / postgis

Аналитический март (локально — kair-postgis-16)

tibero / oracle

Сбор Tibero. В OA иногда записывается как oracle

Если движок отсутствует или значение неизвестно — исключается из списка. Таблицы Tibero не смешиваются с реально существующими таблицами Postgres, даже если имена совпадают.

Локально есть только Postgres. Если нет подключения к Tibero или JDBC — источники Tibero из каталога в списке не появляются. JDBC JAR в образ не включается.

Конфигурация

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

Предпосылки: сеть robo-meta-api и kair-metadata-platform_control-plane. Слой данных — локальный kair-postgis-16 (хост 5434). Портал·OASIS·операционный Tibero вне рамок этого репозитория.

Запуск

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

Здоровье: {"status":"ok","server":"kair-mcp-query","transport":"streamable-http","engines":["postgres"]}

CLI на том же ПК (stdio, по умолчанию):

python -m app.main

Контейнер HTTP:

python -m app.main --transport http

Регистрация MCP

Тот же ПК (рекомендуется stdio). Контейнер должен быть запущен. URL·ключ·.env не вставляются.

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

Другой ПК (Streamable HTTP). Пароль БД не вставляется.

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

mcp.json — это JSON, поэтому ключи оборачиваются в "…". Значения, которые получает сервер, — ключи без кавычек.

Настройки

Скопируйте .env.example в .env, исключённый из Git. Пароли и API-ключи не хранятся в коде и в документах, отслеживаемых Git.

Переменная

Роль

MCP_API_KEYS

HTTP X-Api-Key. Локальный смоук-ключ. Не dh_·tm_po_api_key портала

MCP_PG_HOST / PORT / DB / USER / PASSWORD

Учётная запись SELECT для марта. Хост по умолчанию host.docker.internal, порт 5434

ROBO_META_URL

POST /meta/catalog. По умолчанию http://robo-meta-api:8100

MCP_ROW_LIMIT

Верхний предел строк. Сервер обрезает до 200

MCP_TB_*

Сбор Tibero. Только при наличии подключения

Эталон подключения — SourceDbConn в OA. Локально — env/CLI.

Тесты

python -m pytest tests -q

Известные проблемы и ограничения

Пункт

Описание

Статус

Запуск Tibero

Ветки диалекта (FETCH FIRST) и движка есть. Подключения JDBC нет

Дополню, когда появятся SID·JAR сбора

Ключ портала·аудит

tm_po_api_key / th_po_api_call / уровень·заявка на использование

Не реализовано. Локальный ключ подлежит удалению

Свободный SQL

execute_read_only_sql из фидбека Gemini

Не добавляется

Верхний предел строк 1000

Фидбек Gemini

Не применяется. Остаётся 200

Связанное

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

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

  • K-AIR-Portal — далее эталонное окно POST /api/v1/mcp, реестр ключей

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
    B
    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