mcpField
A
analyticbase

analyticbase

本地服务
github.com/CloudCorpRecords数据库02 周前更新

关于 analyticbase

analyticbase 为 Agent 和命令行用户提供只读的 ClickHouse 查询接口。它通过 ClickHouse HTTP 接口列出数据库和表,并执行受限的 SELECT 查询,无需捆绑客户端库。

主要功能

  1. 01列出数据库和表的元数据
  2. 02按 LIKE 模式筛选表
  3. 03执行受限的只读 SELECT 查询
  4. 04使用命令行或 stdio MCP 服务
  5. 05通过 ClickHouse HTTP 发送查询

适用场景

  1. 01查看 ClickHouse 服务中的数据库
  2. 02查找名称符合模式的表
  3. 03通过只读 SQL 查询获取数据行

MCP 相关

stdio MCP 服务提供列出数据库、列出表和执行受限只读 SELECT 查询的工具。数据库错误和安全检查拒绝会作为工具错误返回。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-analyticbase": {
"command": "npx",
"args": [
"-y",
"@reneturcios/analyticbase"
]
}
}
}
启动命令npx -y @reneturcios/analyticbase

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/analyticbase0.1.0
ocighcr.io/cloudcorprecords/analyticbase:0.1.0

工具

3

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

analyticbase

analyticbase 可让 Agent(或在终端操作的你)查看 ClickHouse 数据库并向其提问,同时完全无法修改数据库。它会列出服务器上的数据库,列出某个数据库中的表及每个表的引擎、注释、行数和列数,并运行单条只读 SELECT 查询。所有通信都通过 ClickHouse 的普通 HTTP 接口进行,因此无需捆绑客户端库,也无需建立原生端口隧道。

如果 ClickHouse 不可用,analyticbase 会如实说明。即使没有后端服务器,MCP 服务也会启动并列出其工具;只有实际执行操作时才会发出请求。如果连接被拒绝或服务器返回错误,结果会是包含服务器原文的错误,而不会是凭空编造的行。

安装

npx @reneturcios/analyticbase list-databases

或者运行容器映像:

docker run -i ghcr.io/cloudcorprecords/analyticbase

容器默认启动 MCP 服务(见下文)。传入 CLI 参数即可将其用作 CLI。

CLI

# Which databases does this server hold?
analyticbase list-databases

# What tables live in one database? (name filters are LIKE patterns)
analyticbase list-tables analytics
analyticbase list-tables analytics --like "events_%" --not-like "%_tmp"

# Run one read-only query; rows print as JSON
analyticbase query "SELECT count() AS n FROM analytics.events"

# Start the MCP server
analyticbase mcp

analyticbase --version

退出码:成功时为 0;查询、保护机制或连接失败时为 1(错误信息会说明具体原因);用法错误时为 2。

通过环境变量配置端点:

变量含义默认值
CLICKHOUSE_URLHTTP 接口的完整基础 URL;优先于主机和端口设置—
CLICKHOUSE_HOST主机名,或完整的 http(s):// URLlocalhost
CLICKHOUSE_PORTHTTP 接口端口8123
CLICKHOUSE_USER用户名default
CLICKHOUSE_PASSWORD密码(空)

查询的工作方式

每项操作都会将 SQL 作为请求正文,通过 POST 发送到 HTTP 接口,并将凭据作为 URL 参数传递——这是该接口自身的约定。列表操作会追加 FORMAT JSONEachRow,并逐行解析 JSON 对象;list_tables 会读取 system.tables,并通过对 system.columns 的子查询统计每个表的列数,同时将 like / not_like 筛选条件作为 LIKE / NOT LIKE 子句应用,并安全转义字面值。Select 查询会追加 FORMAT JSON,并返回响应中的 data 数组。

只读保护机制

run_select_query(以及 CLI 的 query 命令)只有在满足以下所有条件时才会接受查询:

  • 去除开头的空白和注释后,第一个关键字是 SELECT 或 WITH。
  • 查询只能包含一条语句:分号后如果有任何非空白内容,查询就会被拒绝。
  • 字符串字面值之外不能出现 INSERT、UPDATE、DELETE、DROP、ALTER、CREATE、TRUNCATE、GRANT、REVOKE、OPTIMIZE、RENAME、DETACH 或 ATTACH 这些完整单词。扫描前会将单引号字面值清空,因此 SELECT 'drop table t' 是合法查询;但名称恰好为 update 的列则不行——对于奇怪的名称,保护机制宁愿拒绝,也不会被绕过。

列表操作会使用经过验证和转义的片段在内部构建 SQL,因此无需保护机制。

MCP 服务

同一个可执行文件提供这两种用法。mcp 子命令会启动 stdio MCP 服务:

npx -y @reneturcios/analyticbase mcp

MCP 客户端配置:

{
  "mcpServers": {
    "analyticbase": {
      "command": "npx",
      "args": ["-y", "@reneturcios/analyticbase", "mcp"],
      "env": { "CLICKHOUSE_HOST": "localhost", "CLICKHOUSE_PORT": "8123" }
    }
  }
}
工具
工具输入返回内容
list_databases(无)来自 system.databases 的数据库对象,每个数据库一个。
list_tablesdatabase(字符串,必填),like / not_like(字符串,可选)该数据库中每个表对应的一个对象,包含其架构(数据库)、名称、引擎、注释、行数和列数。
run_select_queryquery(字符串,必填)——一条只读 SQL 语句结果行,以 JSON 对象数组形式返回,键为列名。违反保护规则、服务器缺失和数据库错误都会作为工具错误返回,不会返回编造的行。

开发

npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, no network, no live ClickHouse
npm run dev     # run the CLI from source via tsx

所有 HTTP 请求都通过可注入的 fetch 函数发送,测试套件会调用该函数:配置解析、保护机制、SQL 构建、两种响应格式解析器以及全部三项操作,都会通过模拟 fetch 进行测试。

许可证

MIT——详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。