askDB
askDB MCP
MCP-сервер, который превращает вопросы о данных на естественном языке в контекст схемы, необходимый LLM для написания SQL. Он не подключается к вашей базе данных и сам не генерирует SQL — он извлекает нужные определения таблиц из вашего индекса Pinecone и передаёт их любой модели, которая задаёт вопрос (Claude Code, Claude Desktop, ChatGPT, Cursor).
user question
│
▼
Claude Code / ChatGPT ──calls──► askDB MCP ──semantic search──► Pinecone (ask-db)
│ │
│ relevant DDL + guardrails ◄─┘
▼
generated SQLИнструменты
Инструмент | Когда модель использует его | Входные данные |
| Первый вызов для любого запроса text-to-SQL |
|
| Нужны все столбцы известной таблицы |
|
| Ориентация, либо когда поиск не дал результатов |
|
Каждый ответ содержит инструкции, предписывающие модели использовать только возвращённые таблицы и столбцы, чтобы она не выдумывала имена.
Related MCP server: Vanna AI MCP Server
Настройка
npm install
npm run setup # creates .env from the template
# → then put your PINECONE_API_KEY in .env
npm run doctor # verify connection, field mapping and retrieval qualityДелитесь этим с кем-то ещё? Отправьте им SETUP.md — в нём описан как локальный запуск, так и подключение к размещённому экземпляру.
npm run doctor — важный шаг. Он выводит конфигурацию индекса, поля метаданных, которые реально используют ваши записи, и пример поиска — так вы можете убедиться, что сервер читает правильные поля, прежде чем подключать его к клиенту.
npm run doctor # connectivity + retrieval sanity check
npm run smoke # drive the stdio server with a real MCP client
npm run smoke:http # same over Streamable HTTP, with bearer authПодключение клиента
Claude Code
CLI, десктопное приложение и IDE-расширения используют одну конфигурацию, поэтому этот шаг регистрирует сервер сразу для всех трёх:
# from the repo root — records an absolute path, so it works in any folder
claude mcp add askdb --scope user -- node "$PWD\src\server.js"Проверьте с помощью claude mcp list (askdb: ... ✓ Connected), затем перезапустите десктопное приложение или окно IDE — MCP-серверы загружаются при запуске.
Пользовательская область выбрана намеренно: смысл в том, чтобы задавать вопросы о базе данных, работая в ваших других репозиториях. Проектный .mcp.json будет работать только при запуске Claude Code в корне этого репозитория, а определение askdb в обеих областях заставит Claude Code предупредить о дубликате.
Claude Desktop / Cursor
Добавьте в claude_desktop_config.json (или в MCP-настройки Cursor):
{
"mcpServers": {
"askdb": {
"command": "node",
"args": ["D:\\working-directory\\AI\\askDB-mcp\\src\\server.js"]
}
}
}Учётные данные берутся из .env рядом с сервером, поэтому в конфигурации клиента не появляются ключи.
ChatGPT
Коннекторы ChatGPT не могут запускать локальный процесс — они работают только через удалённый MCP по HTTP. Запустите HTTP-транспорт и откройте к нему доступ:
# set MCP_AUTH_TOKEN first: this endpoint serves your whole schema
MCP_AUTH_TOKEN=some-long-random-string npm run start:httpЗатем укажите коннектору https://<your-host>/mcp с заголовком Authorization: Bearer <token>. Для быстрой проверки используйте туннель (cloudflared tunnel --url http://localhost:3000); для долгосрочного использования разместите его как следует — DEPLOY.md описывает Netlify целиком. GET /health не требует аутентификации для проверок балансировщика нагрузки; /mcp требует bearer-токен всегда, когда задан MCP_AUTH_TOKEN.
HTTP-транспорт не сохраняет состояние — один экземпляр сервера на запрос, — поэтому он масштабируется за балансировщиком нагрузки без липких сессий.
Размещение
Разворачивается в виде двух функций Netlify — netlify.toml содержит настройки сборки, так что импорт репозитория и установка PINECONE_API_KEY + MCP_AUTH_TOKEN — это вся работа. Пошагово: DEPLOY.md.
Это работает без переписывания транспорта, потому что WebStandardStreamableHTTPServerTransport из MCP SDK принимает Request и возвращает Response — сигнатура Netlify Functions v2, — поэтому netlify/functions/mcp.mjs импортирует src/mcp.js без изменений. Тот же файл подходит для Cloudflare Workers, Deno или Bun; src/http.js покрывает контейнеры и виртуальные машины.
GET /health не требует токена и сообщает, попали ли требуемые переменные окружения (только наличие, никогда значения) — бессерверная замена чтения лога запуска. /mcp закрыт по умолчанию: без установленного MCP_AUTH_TOKEN он возвращает 503, а не отдаёт вашу схему в интернет.
Когда сервер развёрнут, коллегам не нужно ничего устанавливать — достаточно URL и токена (SETUP.md, Route A).
Конфигурация
Всё опционально, кроме API-ключа. Смотрите .env.example.
Переменная | По умолчанию | Примечания |
| — | Обязательно |
|
| |
| (пространство по умолчанию) | |
|
| Фрагментов схемы на один поиск |
|
| Должна совпадать с моделью, с которой вы делали upsert |
| (выкл.) | например, |
| (все) | Ограничивать каждый поиск одной базой данных |
|
| Передаётся модели в качестве подсказки |
| см. | Кандидаты ключей метаданных, перебираются по порядку |
|
| Предел сканирования для |
Сервер автоматически определяет, какие поля метаданных используют ваши записи и есть ли у индекса встроенные эмбеддинги, поэтому настройки по умолчанию обычно работают без изменений.
Два момента, которые стоит знать
Модель эмбеддингов должна совпадать. Если EMBED_MODEL — не та модель, которой была загружена схема, все оценки падают почти до нуля, а результаты превращаются в шум — векторы фактически случайны относительно друг друга. npm run doctor покажет это как несвязанные таблицы с оценками около 0.01 вместо 0.8. Этот индекс был построен с помощью multilingual-e5-large.
Задайте DEFAULT_DATABASE, если ваш индекс содержит несколько окружений. Когда одна и та же схема существует как *_live и *_test, поиск без ограничений возвращает обе копии каждой таблицы, расходуя половину слотов top_k на дубликатах и позволяя модели смешивать окружения в одном запросе.
Структура файлов
Файл | Роль |
Определения инструментов — поверхность MCP | |
Получение данных: поиск, точное извлечение, определение полей, реранкинг | |
Преобразует результаты в блок схемы, который читает модель | |
Точка входа для stdio | |
Точка входа для потокового HTTP | |
Загрузка окружения и значения по умолчанию | |
Диагностика подключения и поиска | |
Бессерверные точки входа — | |
Конфигурация сборки и маршрутизации Netlify | |
Руководство по размещению |
Available Tools
3 toolsget_table_schemaGet schema for specific tablesARead-only
Fetch the full stored DDL for one or more tables by exact name. Use after search_schema when you need every column of a table, or when the user named the table.
| Name | Required | Description | Default |
|---|---|---|---|
| tables | Yes | Exact table names, e.g. ["tbl_account", "tbl_order"]. | |
| database | No | Restrict to one database/schema — omit to search all of them. | |
| namespace | No | Pinecone namespace override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only and open-world, so the behavioral burden is lower. The description clarifies that DDL is returned for exact table names, but does not add details like pagination limits, error handling for missing tables, or performance traits beyond what annotations signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two short sentences that immediately convey purpose and usage context. There is no wasted wording, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, strong annotations, and complete schema, the description is largely complete. It could optionally mention that the output is raw DDL (though implicit), but lack of output schema does not diminish clarity given the straightforward fetch operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already thoroughly documents all three parameters. The description adds no extra semantics beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches 'full stored DDL for one or more tables by exact name', using specific verbs and resources. It also distinguishes itself from sibling tool 'search_schema' by indicating when to use this tool after that one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('after search_schema when you need every column') and references the user naming a table. However, it does not explicitly state when not to use it or mention any alternatives like 'list_tables'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesList available tablesARead-only
Inventory of every table in the schema index, grouped by database, plus the index configuration. Use it to orient yourself, or when search_schema comes back empty.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | Restrict to one database/schema — omit to search all of them. | |
| namespace | No | Pinecone namespace override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and scope. The description adds beyond annotations by stating that results are grouped by database and include index configuration. No behavioral traits (like performance impact or pagination) are discussed, but for a read-only inventory tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The first sentence defines the core functionality, and the second provides usage guidance. It is front-loaded and every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description gives a sufficient mental model: inventory, grouping by database, and inclusion of index configuration. Could be slightly more explicit about the return structure (e.g., whether it's flat or nested), but fine given the tool's simplicity and the presence of sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both optional parameters (database filter and namespace override). The description does not elaborate further on parameter semantics beyond what the schema provides, so it meets the baseline expected when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides an 'Inventory of every table in the schema index, grouped by database, plus the index configuration.' It uses specific verbs and nouns, and distinguishes itself from sibling tools like search_schema by indicating when to use it (when search_schema returns empty).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use it to orient yourself, or when search_schema comes back empty,' providing clear usage context. It does not mention when to avoid this tool or use get_table_schema, but the positive guidance is strong and helps an agent decide between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_schemaSearch database schemaARead-only
Semantic search over the database schema stored in Pinecone. Call this FIRST for any text-to-SQL request: pass the user question verbatim and you get back the relevant tables, columns, types and relationships to write the query against.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | How many schema chunks to retrieve (default 8). | |
| tables | No | Restrict the search to these table names, when you already know them. | |
| database | No | Restrict to one database/schema — omit to search all of them. | |
| question | Yes | The natural-language data question, e.g. "top 10 accounts by transaction volume last month". | |
| namespace | No | Pinecone namespace override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, so the description's disclosure burden is lower. The description adds context about the Pinecone vector store and the first-step pipeline role, which is valuable beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence defines the tool, the second provides usage instruction. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description indicates what is returned (relevant tables, columns, types, relationships). For a semantic search tool, this is sufficient. The tool is moderately complex (5 params, no nested objects) and the description covers its role adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 5 parameters are documented in the schema. The description reinforces the 'question' parameter by saying 'pass the user question verbatim' but does not add new semantics beyond what the schema provides for other parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs semantic search over the database schema stored in Pinecone, explicitly for text-to-SQL requests. It distinguishes from siblings by positioning itself as the first step and mentioning retrieval of tables, columns, types, and relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this FIRST for any text-to-SQL request', providing clear context for when to use. It doesn't explicitly exclude alternatives like get_table_schema or list_tables, but the 'first step' instruction implies the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.0- First observed
get_table_schema - First observed
list_tables - First observed
search_schema
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: search_schema for semantic discovery, get_table_schema for exact DDL retrieval, and list_tables for inventory. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern in snake_case (search_schema, get_table_schema, list_tables), making them predictable and easy to understand.
Three tools is minimal but appropriate for the focused domain of database schema exploration. Each tool earns its place and covers the essential operations without being overly sparse.
The tool set fully covers schema discovery: semantic search, exact schema lookup, and table listing. For the stated purpose of enabling text-to-SQL by providing schema info, there are no obvious gaps.
Maintenance
Related MCP Connectors
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Draxlr's remote MCP server connects AI assistants to your SQL databases and dashboards. Explore schemas, run read-only queries, manage saved queries and dashboards, and export results, all with row-level security so each user sees only their own data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP-Server from your Database optimized for LLMs and AI-Agents. Supports PostgreSQL, MySQL, ClickHouse, Snowflake, MSSQL, BigQuery, Oracle Database, SQLite, ElasticSearch, DuckDB547Apache 2.0
- FlicenseNot gradedqualityDmaintenanceAn MCP server that allows AI assistants to query databases using natural language by leveraging Vanna AI. It supports secure SSH tunneling, model training on database schemas, and persistent storage of SQL patterns via ChromaDB.2-
- FlicenseAqualityDmaintenanceAn MCP server that connects LLMs to SQL databases for development assistance, enabling query execution, schema exploration, and data manipulation while providing safety controls against destructive operations.5-
- FlicenseNot gradedqualityAmaintenanceAn MCP server that exposes relational databases (PostgreSQL/MySQL) to AI agents with natural language to SQL query support.19-