关于 anumana
在查询执行前,依据数据库 Schema 检查 SQL 和 pgvector 搜索计划的 MCP 服务。它面向编写数据库查询的编码 Agent,只报告扫描行为和风险,不运行查询。
主要功能
- 01预检 SQL 查询成本和风险
- 02检查向量搜索的扫描隐患
- 03改写查询并比较成本
- 04说明逻辑与物理执行计划
- 05无需连接即可分析粘贴的 DDL
适用场景
- 01在提交 PR 前检查 Agent 编写的查询
- 02检查 pgvector 搜索是否触发暴力扫描
- 03比较查询改写前后的计划成本
- 04尚无数据库凭据时检查查询
MCP 相关
提供查询预检、向量搜索分析、查询改写、计划说明和仅基于 Schema 的分析等 MCP 工具。它使用 EXPLAIN,不执行查询。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx anumana-mcpANUMANA_DSN密钥Read-only connection string for the primary target database (e.g. postgresql://readonly@host:5432/db). Optional if ANUMANA_TARGETS is used.ANUMANA_TARGETS密钥JSON array of named targets for a multi-database setup, each with name, engine, and connection string.ANUMANA_POLICIESJSON array of operator enforcement policies (block/warn/allow rules by risk tier or flag). Optional; open by default.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
Anumana
运行查询之前,就知道它会花费多少。 为 AI 编写的每条查询提供推理级预判。
Anumana 是一个 MCP 服务,可在 AI 编码 Agent 刚写出昂贵查询时、在它执行查询或将其提交到 PR 之前将其拦截。它运行在 Claude、Cursor、Windsurf、Codex、Kiro 或任何兼容 MCP 的 Agent 中,通过 EXPLAIN 读取你的真实架构(绝不使用 EXPLAIN ANALYZE),并用通俗易懂的语言告诉你查询的运行方式,以及它是否会造成影响。
它专注于AI Agent 实际生成的查询:目前是文本转 SQL,同时也支持 RAG / 向量搜索(pgvector)——因为编写相似度搜索的 Agent 根本不知道自己刚刚触发了对所有嵌入向量的暴力扫描。Anumana 为 Agent 补上了缺失的反馈环。
它不是另一个 NL→SQL 工具,也不是数据库健康状况仪表板。它只做一件事:防止 AI 编写的数据库代码悄无声息地损害生产环境。
它能做什么(功能)
| 工具 | 它能回答什么 |
|---|---|
preflight_query | “这条 SQL 查询会很昂贵吗?”——风险等级(便宜/中等/昂贵/危险)、扫描行数与返回行数、扫描策略以及开销标记。无需执行查询。 |
preflight_vector_search | “这次 RAG 相似度搜索会很昂贵吗?”——捕捉普通 SQL 检查会漏掉的向量陷阱:没有 HNSW/IVFFlat 索引的暴力扫描、top_k 过大、搜索范围无界、元数据筛选导致 ANN 召回率下降。 |
rewrite_query | “让它更便宜。”——提供经过验证的等效改写,并展示改写前后的规划器成本,以及以选择性为门槛的索引建议(筛选条件匹配表中大多数行时,不会建议你为该列建索引)。engine="pgvector" 会建议创建 HNSW 索引。 |
explain_query_working | “它是怎么运行的?”——分为两层:逻辑收集顺序(FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT),以及针对你的架构生成的实际物理计划,并逐步说明。 |
preflight_schema_only | “我还没提供数据库凭据。”——针对粘贴的 CREATE TABLE DDL 进行静态分析,无需连接数据库。离线、零信任的入口。 |
引擎(12 个,涵盖 7 种范式): Postgres 和 SQLite 已通过实时测试; MySQL、pgvector、MongoDB、DynamoDB、FalkorDB、Cassandra、Redshift、BigQuery、 Snowflake 和 ClickHouse 则以已通过离线验证、未经测试的适配器形式提供, 后续会逐个进行实时推广。完整矩阵和成本信号见 SUPPORTED_ENGINES.md。适配器接口见 DESIGN.md。
唯一诚实的规则
Postgres 规划器成本是无单位的,并非毫秒(文档)。
Anumana 绝不会捏造 ~3.2s 这样的数字。它会报告扫描行数、扫描策略、
风险等级、开销标记以及改写的成本差值——所有内容都有依据,绝不凭空编造。
每项估算都会附带准确度等级(实时模式为 UPPER_BOUND,仅架构模式为
HEURISTIC)。
安装
pip install anumana-mcp # once published to PyPI
# or from source:
pip install -e .
然后将你的 Agent 指向它。由用户安装;Agent 会在连接时通过 MCP tools/list 握手自动发现工具——无需发布到任何商店。
Claude Desktop / Cursor / Windsurf / Kiro — mcpServers 配置块
{
"mcpServers": {
"anumana": {
"command": "uvx",
"args": ["anumana-mcp"],
"env": { "ANUMANA_DSN": "postgres://readonly@localhost:5432/mydb" }
}
}
}
请使用只读 Postgres 角色。Anumana 只会执行 EXPLAIN,但只读权限是
纵深防御的一环。省略 ANUMANA_DSN 即可在仅架构模式下运行(输入 DDL,无需数据库)。
无数据库试用(30 秒)
python3 src/demo.py # runs the engine on a canned plan, zero deps
使用真实 Postgres 测试
# a throwaway table, then:
ANUMANA_DSN=postgres://localhost/mydb anumana-mcp
参见 src/live_test.py,其中提供了一个由 psql 支持的测试框架,可用实时数据验证真实的成本差值和选择性门槛。
刻意不包含的功能
没有 run_query(我们绝不执行你的 SQL),没有 NL→SQL(Agent 已经会做),没有数据库健康状况报告,也没有美元计费。保持专注就是我们的策略。
许可证
MIT——参见 LICENSE。
社区与联系
欢迎贡献 — 请参阅 CONTRIBUTING.md 和 行为准则。添加数据库引擎是最有价值的贡献;适配器约定很精简(SUPPORTED_ENGINES.md)。
- **错误 / 想法:**请提交 GitHub issue。
- **安全问题:**请参阅 SECURITY.md — 私下报告。
- **维护者:**[email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。