MCP Toolbox for Databases 集成指南:以 ArcadeDB 多模型数据库作为数据源(Source)接入 MCP
2026/9/14 8:33:43 网站建设 项目流程

MCP Toolbox for Databases 集成指南:以 ArcadeDB 多模型数据库作为数据源(Source)接入 MCP

【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox

本篇技术指南聚焦于开源项目 MCP Toolbox for Databases 中的 ArcadeDB 数据源(Source)集成:从 ArcadeDB 多模型数据库与 Bolt 协议的基本概念、前置的用户与连接要求,到完整的sourceYAML 配置示例、全部配置参数参考,再到源码级的双协议通道(Bolt/Cypher 与 HTTP/SQL)实现原理。读完本文,你将能够在自己的 MCP Toolbox 配置中正确声明一个 ArcadeDB 数据源,并通过arcadedb-execute-cypherarcadedb-execute-sql两个工具让 LLM 以人机协作的方式查询图数据与文档数据。

1. ArcadeDB 数据源是什么

ArcadeDB 是一款多模型数据库,在同一个引擎中同时支持图(Cypher)、文档(SQL)、键值(Key-Value)与时间序列(Time-Series)等多种数据模型,并对外暴露一个与 Neo4j 驱动兼容的 Bolt 协议端点。这意味着既有的 Neo4j 生态工具与客户端连接方式,可以被直接复用到 ArcadeDB 上。

在 MCP Toolbox for Databases 中,数据源(Source)是连接目标数据库的连接器抽象。通过 source.md 定义的arcadedb类型 Source,MCP Toolbox 将:

  • 通过Bolt 协议(默认bolt://localhost:7687)执行 Cypher 图查询;
  • 通过ArcadeDB HTTP API(默认http://host:2480)执行 SQL 文档/多模型查询;
  • 将上述能力包装成 MCP 工具,供 LLM Agent 在开发辅助(human-in-the-loop)场景下调用。

从源码结构看,该集成由两部分组成:数据源实现 internal/sources/arcadedb/arcadedb.go 与两个工具实现 arcadedbexecutecypher、arcadedbexecutesql。

2. 支持的 Tools 概览

关联文档通过{{< list-tools >}}占位符自动列举该 Source 关联的工具。当前仓库中,ArcadeDB Source 配套两个工具,其说明文档分别位于:

工具类型用途文档
arcadedb-execute-cypher通过 Bolt 协议执行任意 Cypher 查询,支持readOnly拒绝写语句、dry_run只校验不执行arcadedb-execute-cypher.md
arcadedb-execute-sql通过 HTTP API 执行 ArcadeDB SQL 语句,支持文档与图数据的混合查询arcadedb-execute-sql.md

两个工具的官方文档均注明:这些工具面向**开发者助手 + 人机协作(human-in-the-loop)**的工作流设计,不应直接用于生产环境的无人值守 Agent。

3. 前置条件:数据库用户

该 Source 使用标准认证(standard authentication)。

在使用前,需要在 ArcadeDB 中创建一个能够通过 Bolt 协议连接的用户,或者直接使用root用户。该用户凭据将被填入 Source 配置的userpassword字段,并在两类通道中复用:

  • 建立 Bolt 驱动时使用neo4j.BasicAuth(user, password, "")(见 arcadedb.go);
  • 调用 HTTP API 时通过 HTTP Basic Auth 携带同样的用户与密码(见 arcadedb.go)。

也就是说,user/password同时是 Bolt 与 HTTP API 两个通道的认证凭据,请确保该用户在 ArcadeDB 中具备相应的读写权限。

4. 完整配置示例

关联文档给出了一个最小可用示例。在仓库根目录下的 MCP Toolbox 配置文件中(例如 server.json 引用的 YAML 配置),声明如下 Source:

kind: source name: my-arcadedb-source type: arcadedb uri: bolt://localhost:7687 user: root password: ${PASSWORD} database: "mydb"

4.1 使用环境变量替换敏感信息

官方文档特别提示:请使用${ENV_NAME}格式的环境变量替换,而不是把密钥硬编码进配置文件。上面的password: ${PASSWORD}即会在运行时从环境变量PASSWORD中读取真实密码,避免密钥泄露到版本库中。同一模式也适用于user等其它敏感字段。

4.2 带 HTTP 覆盖项的完整示例

当 ArcadeDB HTTP API 与 Bolt 端点不在同一主机/端口,或需要强制使用 HTTPS 时,可补充三个可选字段。该示例同样得到单元测试的覆盖(见 arcadedb_test.go):

kind: source name: my-arcadedb-source type: arcadedb uri: bolt://my-host:7687 database: my_db user: my_user password: ${PASSWORD} httpUri: https://my-http-host:2481 httpScheme: https httpPort: 2481

5. 参数参考表(含源码佐证)

关联文档的 Reference 表如下,字段与 arcadedb.go 中Config结构体的 YAML 标签一一对应:

fieldtyperequireddescription
typestringtrue必须为"arcadedb"
uristringtrueBolt URI(例如"bolt://localhost:7687")。
userstringtrueArcadeDB 用户(例如"root")。
passwordstringtrueArcadeDB 用户的密码。
databasestringtrue要连接的数据库名称。
httpUristringfalse可选,覆盖 ArcadeDB HTTP API 的基础 URL(例如"http://localhost:2480")。
httpSchemestringfalse可选,覆盖 ArcadeDB HTTP API 的 scheme,默认"http"
httpPortintegerfalse可选,覆盖 ArcadeDB HTTP API 的端口,默认2480

5.1 必填字段的校验行为

源码中,五个必填字段(uriuserpassworddatabasetype)均带有validate:"required"标签。由单元测试 arcadedb_test.go 可以确认两类解析失败场景:

  • 缺失必填字段:例如缺少passworddatabase时,解析器返回类似Key: 'Config.Password' Error:Field validation for 'Password' failed on the 'required' tag的错误;
  • 未知字段:配置中出现未定义字段(如foo: bar)时,解析器直接报错unknown field "foo",保证配置的严谨性。

5.2 可选字段的默认值与作用

httpUrihttpSchemehttpPort三个可选字段共同决定了 SQL 通道所访问的 HTTP API 地址。它们的解析逻辑集中在 arcadeHTTPEndpointURL:

  1. 若显式配置了httpUri,则直接以它为 HTTP 基础 URL;
  2. 否则从uri(Bolt URI)中提取主机名(hostname);
  3. httpScheme为空时默认http
  4. httpPort为 0 时默认2480
  5. 最终拼出{scheme}://{host}:{port}

因此,当你的 Bolt 与 HTTP 服务部署在同一主机时,只需写uri: bolt://my-host:7687,SQL 通道会自动推导为http://my-host:2480;当二者分离或需要 HTTPS 时,再用可选字段覆盖。

6. 源码级原理:双协议通道设计

这是 ArcadeDB Source 最有特色的设计:Cypher 走 Bolt,SQL 走 HTTP,二者共享同一份 Source 配置与认证凭据。

6.1 Cypher 通道(Bolt + Neo4j 驱动)

RunCypher 的实现要点:

  1. 使用Neo4j Go 驱动 v6github.com/neo4j/neo4j-go-driver/v6)创建驱动,因为 ArcadeDB 的 Bolt 端点兼容 Neo4j 驱动协议;
  2. 通过EXPLAIN前缀实现 dry-run:dryRun为 true 时把语句改写为EXPLAIN <cypher>,执行后从summary.Plan()递归构建执行计划树(buildPlanNode),返回包含queryTypestatementTypeoperatorargumentsidentifiers等字段的执行计划;
  3. 结果集通过helpers.ConvertValue(复用自 Neo4j 工具链的 helpers 包)转换为纯 map 结构返回。

6.2 SQL 通道(HTTP API)

RunSQL 直接调用 ArcadeDB 的 REST API:

  • 只读路由readOnly为 true 时请求query端点(ArcadeDB 会阻止写语句),否则请求command端点;
  • 请求路径为{base}/api/v1/{query|command}/{database},请求体为{"language": "sql", "command": <sql>, "params": {...}},携带 Basic Auth;
  • EXPLAIN 支持:若 SQL 以EXPLAIN开头,响应中的explainPlan/explain字段会被提取为executionPlan/executionPlanAsString返回;
  • 非 2xx 响应会连同状态码与响应体一起包装为错误返回。

6.3 连接建立与校验

Initialize 完成驱动的创建与连通性校验:

  1. 创建驱动(initArcadeDBDriver),设置BasicAuth与从上下文提取的 UserAgent;
  2. 调用driver.VerifyConnectivity(ctx)验证能否成功连接;
  3. 连接失败时关闭驱动并返回unable to connect successfully错误。

从 IsReadOnly 返回false可以看出,Source 本身是可读写的;readOnly约束是按工具配置的(见下文第 7 节),由各工具决定是否拒绝写操作。

6.4 查询分类器

Cypher 通道在执行前会调用classifier.NewQueryClassifier()(该分类器位于 internal/tools/neo4j/neo4jexecutecypher/classifier,由 arcadedb.go 引用)。分类器会把语句识别为读查询或写查询:

  • 当工具配置了readOnly: true且语句被识别为写查询时,直接返回this tool is read-only and cannot execute write queries错误(arcadedb.go);
  • 分类结果同时会体现在 dry-run 返回的queryType字段中。

7. 配套工具的配置与调用

声明好 Source 后,即可配置工具。以下示例来自官方工具文档,并补充了源码中的参数说明。

7.1 arcadedb-execute-cypher

kind: tool name: query_arcadedb type: arcadedb-execute-cypher source: my-arcadedb-source readOnly: true description: | Execute Cypher against ArcadeDB in read-only mode. Example: {{ "cypher": "MATCH (n) RETURN count(n)" }}

字段参考(与 arcadedbexecutecypher.go 的Config对应):

fieldtyperequireddescription
typestringtrue必须为"arcadedb-execute-cypher"
sourcestringtrue要执行 Cypher 的 ArcadeDB Source 名称。
descriptionstringtrue传给 LLM 的工具描述。源码要求该字段非空,否则初始化报错description is required
readOnlybooleanfalsetrue时拒绝 Cypher 中的写操作。默认false

调用参数(在 Agent 调用时提供):

参数类型说明
cypherstring要执行的 Cypher 语句,必须为非空字符串(源码校验见 arcadedbexecutecypher.go)。
paramsmap可选的 Cypher 参数,默认为空 map。
dry_runbooleantrue时仅校验并返回执行计划信息而不真正执行。默认false

7.2 arcadedb-execute-sql

kind: tool name: query_arcadedb_sql type: arcadedb-execute-sql source: my-arcadedb-source description: | Execute SQL against ArcadeDB. Example: {{ "sql": "SELECT FROM Person WHERE name = :name LIMIT 5", "params": { "name": "Ada" }, "dry_run": false }}

字段参考(与 arcadedbexecutesql.go 对应):

fieldtyperequireddescription
typestringtrue必须为"arcadedb-execute-sql"
sourcestringtrue要执行 SQL 的 ArcadeDB Source 名称。
descriptionstringtrue传给 LLM 的工具描述。
readOnlybooleanfalsetrue时语句被路由到只读端点,ArcadeDB 会阻止写语句。默认false

调用参数sql(必填,非空 SQL 语句)、params(可选 map 参数)、dry_run(可选,默认false)。注意,SQL 工具在dry_run时通过给语句加EXPLAIN前缀实现校验(arcadedbexecutesql.go),这与 Cypher 通道的实现方式一致。

7.3 工具的 Source 兼容性校验

两个工具都通过compatibleSource接口约束其可绑定的 Source(分别要求RunCypherRunSQL方法),并在 ValidateSource 中校验:若绑定的 Source 不兼容,返回invalid source ... not a compatible type错误。这意味着这两个工具只会出现在 ArcadeDB(以及同样实现了这些接口的兼容 Source)上。

8. 集成测试与运行前提

仓库在 tests/arcadedb/arcadedb_integration_test.go 中提供了完整的集成测试,覆盖 YAML 解析、SQL 通道的数据播种/清理以及 Cypher/SQL 工具的真实执行。测试通过以下环境变量定位目标 ArcadeDB 实例:

环境变量说明
ARCADEDB_DATABASE目标数据库名(必填)
ARCADEDB_URIBolt URI,如bolt://host:7687(必填)
ARCADEDB_USER用户名(必填)
ARCADEDB_PASS密码(必填)
ARCADEDB_HTTP_URL可选;不设置时测试会从 Bolt URI 推导 HTTP 地址(Bolt 端口替换为默认 HTTP 端口 2480)

从测试代码看,集成测试默认通过 Testcontainers 拉起 ArcadeDB 容器,并借助 HTTP API 完成测试数据的播种与清理,从而独立验证被测工具本身。该行为也从侧面印证了第 5.2 节描述的 HTTP 地址推导规则。

9. 总结

将 ArcadeDB 接入 MCP Toolbox for Databases 只需三步:

  1. 在 ArcadeDB 中准备好可经 Bolt 连接的用户(如root);
  2. 在配置文件中声明type: arcadedb的 Source,填好uriuserpassworddatabase,并用${ENV_NAME}保护密钥;
  3. 按需配置arcadedb-execute-cypher(图查询)与arcadedb-execute-sql(文档/多模型查询)两个工具,通过readOnlydry_run控制安全边界。

双协议通道的设计让图查询(Bolt/Cypher)与文档查询(HTTP/SQL)各用其长:前者复用成熟的 Neo4j 驱动生态,后者直连 ArcadeDB 原生 SQL 能力。若需继续深入,可参阅配套工具文档 arcadedb-execute-cypher.md 与 arcadedb-execute-sql.md,以及集成索引 arcadedb/_index.md。

【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询