Skip to main content
Glama

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

工具

工具

模型使用时机

输入

search_schema

任何文本转 SQL 请求的首次调用

question, top_k?, tables?, database?

get_table_schema

需要已知表的每一列时

tables[], database?

list_tables

用于定位,或搜索无结果时

database?

每个响应都内嵌指令,告诉模型仅使用返回的表和列,因此它不会编造名称。

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(或 Cursor 的 MCP 设置):

{
  "mcpServers": {
    "askdb": {
      "command": "node",
      "args": ["D:\\working-directory\\AI\\askDB-mcp\\src\\server.js"]
    }
  }
}

凭据来自服务器旁边的 .env,因此客户端配置中不会出现任何密钥。

ChatGPT

ChatGPT 连接器无法生成本地进程——它们只支持 基于 HTTP 的远程 MCP。运行 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_AUTH_TOKEN,/mcp 就要求携带 Bearer 令牌。

HTTP 传输是无状态的——每个请求一个服务器实例——因此它可以在负载均衡器后面扩展,无需粘性会话。

托管

部署为两个 Netlify Functions——netlify.toml 包含构建设置,因此导入仓库并设置 PINECONE_API_KEY + MCP_AUTH_TOKEN 就是全部工作。逐步说明:DEPLOY.md。

这无需重写传输即可工作,因为 MCP SDK 的 WebStandardStreamableHTTPServerTransport 接收 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,路线 A)。

配置

除 API 密钥外都是可选的。参见 .env.example。

变量

默认值

说明

PINECONE_API_KEY

—

必填

PINECONE_INDEX

ask-db

PINECONE_NAMESPACE

(默认命名空间)

TOP_K

8

每次搜索的表结构块数量

EMBED_MODEL

multilingual-e5-large

必须与您上传时使用的模型一致

RERANK_MODEL

(关闭)

例如 bge-reranker-v2-m3;启用前先衡量效果

DEFAULT_DATABASE

(全部)

将所有查询限定在一个数据库中

SQL_DIALECT

ANSI SQL

作为提示传递给模型

TEXT_FIELDS / TABLE_FIELDS / DB_FIELDS

参见 .env.example

候选元数据键,按顺序尝试

LIST_SCAN_LIMIT

1000

list_tables 扫描的上限

服务器会自动检测你的记录使用了哪些元数据字段,以及索引是否集成了嵌入功能,因此默认值通常无需修改即可使用。

两件值得了解的事

嵌入模型必须匹配。 如果 EMBED_MODEL 不是上传表结构时所用的模型,所有分数都会骤降到接近零,结果也会变成噪声——这些向量彼此之间实际上是随机的。npm run doctor 会显示为不相关的表以约 0.01 的分数返回,而不是 0.8。此索引是使用 multilingual-e5-large 构建的。

如果你的索引包含多个环境,请设置 DEFAULT_DATABASE。 当同一套表结构同时以 *_live 和 *_test 存在时,不加作用域限定的搜索会返回每张表的两个副本,浪费一半 top_k 槽位在重复项上,并让模型在一次查询中混淆不同环境。

布局

文件

作用

src/mcp.js

工具定义——MCP 接口

src/pinecone.js

检索:搜索、精确获取、字段检测、重排

src/format.js

将命中结果渲染为模型读取的表结构块

src/server.js

stdio 入口点

src/http.js

流式 HTTP 入口点

src/config.js

环境变量加载和默认值

scripts/doctor.js

连接性和检索诊断

netlify/functions/

无服务器入口点——/mcp 和 /health

netlify.toml

Netlify 构建和路由配置

DEPLOY.md

托管指南

Available Tools

3 tools
get_table_schemaGet schema for specific tablesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tablesYesExact table names, e.g. ["tbl_account", "tbl_order"].
databaseNoRestrict to one database/schema — omit to search all of them.
namespaceNoPinecone namespace override.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 tablesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNoRestrict to one database/schema — omit to search all of them.
namespaceNoPinecone namespace override.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 schemaA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_kNoHow many schema chunks to retrieve (default 8).
tablesNoRestrict the search to these table names, when you already know them.
databaseNoRestrict to one database/schema — omit to search all of them.
questionYesThe natural-language data question, e.g. "top 10 accounts by transaction volume last month".
namespaceNoPinecone namespace override.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv1.0.0
    • First observedget_table_schema
    • First observedlist_tables
    • First observedsearch_schema

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP-Server from your Database optimized for LLMs and AI-Agents. Supports PostgreSQL, MySQL, ClickHouse, Snowflake, MSSQL, BigQuery, Oracle Database, SQLite, ElasticSearch, DuckDB
    547
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    An 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
    -
  • F
    license
    A
    quality
    D
    maintenance
    An 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
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that exposes relational databases (PostgreSQL/MySQL) to AI agents with natural language to SQL query support.
    19
    -