让您的AI代理安全访问每个数据库。PostgreSQL、MySQL、SQLite、ClickHouse、SQL Server和 50+更多 通过单个MCP服务器。适用于Claude Code、OpenCode、GitHub Copilot、Cursor和任何兼容MCP的客户端。
- 一台服务器,每个数据库。 并排连接Postgres、MySQL、ClickHouse和SQL Server。你的经纪人选对了。
- 默认情况下是安全的。 只读权限、查询分类、凭证隔离。特工们得到的是护栏,而不是脚枪。
- 可共享配置。 一个YAML文件定义了连接、权限和自定义工具。提交它,你的整个团队都会获得相同的代理能力。
开始使用
1.添加到克劳德代码:
claude mcp add omnibase -- npx -y omnibase-mcp@latestOpenCode, GitHub Copilot, Cursor, and other MCP clients
添加到MCP配置(.mcp.json):
{
"mcpServers": {
"omnibase": {
"command": "npx",
"args": ["-y", "omnibase-mcp"]
}
}
}2.创建配置文件:
npx omnibase-mcp init编辑 omnibase.config.yaml 使用您的数据库连接(完整配置指南):
connections:
app:
dsn: pg://localhost:5432/myapp # or $DATABASE_URL from env
permission: read-write
analytics:
dsn: clickhouse://localhost:9000/analytics
permission: read-write
warehouse:
dsn: mysql://user:pass@localhost:3306/warehouse
permission: read-only就是这样。您的代理现在可以访问14个数据库工具,以及任何 定制工具 你定义。
Install from source (contributors)
git clone https://github.com/itsJeremyMax/omnibase.git
cd omnibase
pnpm install
pnpm build然后将您的MCP客户端指向 node dist/src/index.js 随着 cwd 设置到您的项目目录。
你的代理人能做什么
在几秒钟内了解任何代码库的数据模型
You: "I just joined this project. Walk me through the data model."您的代理连接到 app, analytics,以及 warehouse,发现所有三个中的表,跟踪外键关系,并返回完整的摘要:表名、列类型、行数以及所有内容的连接方式。过去读取迁移文件需要几个小时,而现在只需要几秒钟。
*使用的工具:list_connections、list_tables、get_schema、get_relations*
What you'd do manually
-- Connect to each database separately, then run:
-- app (Postgres)
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = '...';
SELECT tc.table_name, kcu.column_name, ccu.table_name AS foreign_table
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage ccu ON tc.constraint_name = ccu.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY';
SELECT schemaname, relname, n_live_tup FROM pg_stat_user_tables;
-- analytics (ClickHouse — different syntax)
SELECT name FROM system.tables WHERE database = currentDatabase();
SELECT name, type, is_in_primary_key FROM system.columns WHERE table = '...';
-- ClickHouse doesn't have foreign keys, so no FK query available
-- warehouse (MySQL — yet another syntax)
SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE();
SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = '...';
SELECT table_name, column_name, referenced_table_name, referenced_column_name
FROM information_schema.key_column_usage WHERE referenced_table_name IS NOT NULL;
-- Then manually stitch the results together across all three跨数据库查询
You: "Compare our product inventory in warehouse with what customers
actually ordered last quarter in app. What's sitting on shelves?"您的代理查询 warehouse (MySQL)根据当前库存水平,从 app (Postgres),并按SKU连接结果。它识别出34种库存超过500件但订单少于10件的产品。您无法为此编写单个查询,因为数据存在于两个不同的数据库引擎中。
*使用的工具:list_connections、get_schema、execute_sql(跨应用程序和仓库)*
What you'd do manually
-- Terminal 1: warehouse (MySQL)
SELECT sku, product_name, quantity_on_hand
FROM inventory
WHERE quantity_on_hand > 0;
-- Copy results to a spreadsheet or temp file
-- Terminal 2: app (Postgres)
SELECT p.sku, SUM(oi.quantity) AS units_ordered
FROM order_items oi
JOIN products p ON oi.product_id = p.id
JOIN orders o ON oi.order_id = o.id
WHERE o.ordered_at >= NOW() - INTERVAL '3 months'
GROUP BY p.sku;
-- Copy results to the same spreadsheet
-- Manually match SKUs across both result sets
-- Filter to high-stock, low-order items
-- Reformat into something useful使用实时数据进行调试
You: "The /api/orders endpoint is returning wrong totals. Figure out why."您的代理读取路由处理程序,查询订单表 app,然后检查 analytics 并发现预先计算的总数不同步。它将不匹配追溯到缺失的类别,更新分析表,再次点击端点,并确认响应现在是正确的。
*使用的工具:get_schema、execute_sql(跨应用程序和分析)*
安全调查生产问题
You: "Failed payments spiked 3x in the last hour. What's going on?"您的代理在上探索付款模式 warehouse (只读),对交易的最后一小时进行分析,并确定所有故障共享一个支付提供商和错误代码。没有一行被修改。连接是只读的,因此即使代理尝试写入,也无法写入。
*使用的工具:get_schema、execute_sql(仓库只读)、get_distinct_values*
内置工具
您的代理可以开箱即用地获得14个工具,涵盖模式探索、参数化查询和执行计划分析。
All 14 tools
发现
| 工具 | 它做什么 |
|---|---|
list_connections | 查看所有已配置的数据库及其状态 |
test_connection | Ping特定数据库。失败时返回延迟和驱动程序错误 |
list_tables | 行数快速概览 |
get_schema | 摘要或详细列/索引/FK信息 |
search_schema | 按关键字查找表和列 |
get_relationships | 在整个数据库中映射外键 |
get_indexes | 列出具有列和唯一性的索引 |
查询
| 工具 | 它做什么 |
|---|---|
execute_sql | 使用权限强制和参数化输入运行查询 |
explain_query | 查看查询计划而不执行 |
get_sample | 预览任何表中的行(注射安全) |
分析
| 工具 | 它做什么 |
|---|---|
get_table_stats | 列基数、空率、最小/最大值(采样) |
get_distinct_values | 任何列都有不同的计数值 |
验证
| 工具 | 它做什么 |
|---|---|
validate_query | 执行前检查语法、架构引用、权限并估计受影响的行 |
历史
| 工具 | 它做什么 |
|---|---|
query_history | 查看最近的查询执行历史,按连接、状态和分页进行筛选 |
自定义工具
将SQL模板定义为整个团队都可以使用的MCP工具。将它们添加到您的配置中并提交。项目中的每个代理都有相同的功能,不需要代码。
tools:
get_active_users:
connection: app
description: "Get all active users"
sql: "SELECT * FROM users WHERE active = true"链条工具与 compose 构建多步骤管道:
tools:
active_user_orders:
connection: app
description: "Get orders for all active users"
compose:
- tool: get_active_users
as: users
- sql: "SELECT * FROM orders WHERE user_id IN ({users.id})"
as: orders自定义工具已上线 omnibase.config.yaml 除了你的关系。将其提交到您的仓库,您的团队将共享相同的工具、权限和数据库访问权限。
配置
| 数据库 | DSN |
|---|---|
| PostgreSQL | pg://user:pass@host:5432/dbname |
| MySQL | mysql://user:pass@host:3306/dbname |
| ClickHouse | clickhouse://host:9000/dbname |
| SQLite | sqlite:./path/to/db.db |
| SQL Server | mssql://user:pass@host/dbname |
安全
每个查询在到达数据库之前都会被解析和分类。您的代理永远看不到凭据,无法运行危险的功能,并尊重您设置的权限级别。
- 凭证永远不会到达代理人手中。DSN解析服务器端
- 默认情况下为只读。明确选择写入
- 所有发动机的危险功能都被阻断
- 多语句查询被拒绝
- 根据架构缓存验证表名
命令行界面
npx omnibase-mcp status # health dashboard
npx omnibase-mcp tools list # list custom tools
npx omnibase-mcp upgrade # upgrade to latest发展
看 贡献.md 用于设置、测试和约定。
pnpm test # unit tests
pnpm test:integration # cross-database tests (needs Docker)
cd sidecar && go test ./... -v # Go sidecar tests许可证
Apache 2.0。看 许可证
免责声明
本软件按“原样”提供,不提供任何形式的保修。作者和贡献者对使用此工具造成的任何损害、数据丢失或问题不承担责任。Omnibase对真实数据库执行SQL查询。始终检查代理生成的查询,尽可能使用只读权限,并在生产环境中使用前进行彻底测试。使用此软件即表示您对其使用承担全部责任。
