关于 AgentDank:
AgentDank 的 dank-mcp 是用于查询大麻数据集的 MCP 服务,适合通过 LLM 查询本地 DuckDB 数据的场景。项目正在重构,目前提供 `us/ct` 数据集,并以只读 SQL 查询为核心。
主要功能
- 01通过 `query` 执行 SQL 查询
- 02使用 DuckDB 数据文件
- 03下载并缓存数据集快照
- 04以只读模式访问数据
- 05限制外部访问
适用场景
- 01查询 `us/ct` 大麻数据集
- 02对自有 DuckDB 文件运行 SQL
- 03通过 LLM 检索本地数据
MCP 相关
该 MCP 服务注册 `query` 工具,接受 SQL 并以 CSV 返回结果。它向 MCP 客户端提供只读 DuckDB 查询,并禁用外部访问。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
AgentDank: dank-mcp
dank-mcp 是一个用于查询大麻数据集的模型上下文协议(MCP)服务,由 AgentDank 为教育和合法用途提供。
说明
状态:正在重构。
dank-mcp正在改造为通用的声明式数据集绑定架构(参见设计说明)。你可以通过--fetch <id>引导数据集,该命令会从dank-data下载预构建快照。目前唯一的数据集是us/ct。
大麻数据集快照由 AgentDank dank-data 仓库整理;你可以通过 --db 将 dank-mcp 指向任意 DuckDB 文件。
安装
我们希望提供预构建二进制文件和 Homebrew 软件包,但目前遇到了一些问题。因此,推荐使用 go install 或从源代码构建的方式安装:
$ go install github.com/AgentDank/dank-mcp@latest
它会安装到你的 $GOPATH/bin 目录,该目录通常是 ~/go/bin。
与大模型搭配使用
要使用这个 dank-mcp MCP 服务,你必须配置宿主程序来使用它。下面以 Claude Desktop 为例。我们需要在系统中找到 dank-mcp 程序;下方示例展示了我通过 go install 安装的 dank-mcp 所在位置。
以下配置 JSON(仓库中也有 mcp-config.json)可以完成设置:
{
"mcpServers": {
"dank": {
"command": "~/go/bin/dank-mcp",
"args": [
"--root", "~"
]
}
}
}
Claude Desktop
使用 Claude Desktop 时,你可以按照其配置教程操作,但使用上面的配置。设置完成后,你就可以向 Claude 提问,它会使用 dank-mcp 服务。
Ollama 和 mcphost
目前我在让它正常运行方面遇到了一些问题,但仍在此留下说明,供感兴趣的人参考。
对于本地推理,有些 MCP 宿主支持 Ollama。你可以使用任何支持“工具”的 Ollama 大模型。我们尝试了 mcphost,它由 mcp-go 库的开发者编写;该库为我们承担了繁重的工作。
下面介绍如何使用上面的配置安装并运行它,配置保存在 mcp-config.json 中:
$ go install github.com/mark3labs/mcphost@latest
$ ollama pull llama3.3
$ mcphost -m ollama:llama3.3 --config mcp-config.json
...chat away...
加载数据
dank-mcp 可以从 AgentDank dank-data 仓库下载预构建的 DuckDB 快照:
$ dank-mcp --list # show available datasets
$ dank-mcp --fetch us/ct # download and serve
$ dank-mcp --fetch us/ct --fetch-only # download and exit
$ dank-mcp --fetch us/ct --force # force re-download
下载内容会缓存在 --root 下的 .dank/cache/<id>/dank-data.duckdb 中(如果未指定,则使用当前目录)。缓存会重复使用 7 天,之后才会重新下载;使用 --force 可强制覆盖。
安装前会根据目录验证快照的 SHA-256,并通过重命名原子替换本地文件,因此不会出现损坏文件可见的情况。
命令行用法
以下是命令行帮助信息:
usage: ./bin/dank-mcp [opts]
--db string DuckDB data file to use, use ':memory:' for in-memory. Default is '.dank/dank-mcp.duckdb' under --root
--fetch string Dataset id to download from dank-data (e.g., us/ct)
--fetch-only Download only; do not start the MCP server
--force Force re-download even if cache is fresh (requires --fetch)
-h, --help Show help
--list List datasets from the dank-data catalog and exit
-l, --log-file string Log file destination (or MCP_LOG_FILE envvar). Default is stderr
-j, --log-json Log in JSON (default is plaintext)
--root string Set root location of '.dank' dir (Default: current dir)
--sse Use SSE Transport (default is STDIO transport)
--sse-host string host:port to listen to SSE connections
-v, --verbose Verbose logging
目前该服务只注册了一个 MCP 工具 query,它接收一个 sql 字符串参数并返回 CSV。DuckDB 以只读模式打开,并通过 SET enable_external_access=false 进一步限制,因此只允许对本地数据执行纯 SQL。
构建
使用 task 进行构建:
$ task
task: [build] go build -o bin/dank-mcp
设计说明
dank-mcp 正围绕一组简明理念进行重构:
- 锁定为只读的 DuckDB — 服务以
access_mode=read_only打开 DuckDB,并应用SET enable_external_access=false,因此公开通用 SQL 工具是安全的。 - 通用
queryMCP 工具 —dank-mcp不再为每个数据集单独手动编写工具,而是提供一个query(sql)工具,对指定的 DuckDB 执行查询。 - 声明式数据集绑定(进行中)—
pkg/dank定义了一个Registrar接口,以及可用 JSON 标记的Binding/ResourceQuery/ToolQuery结构体。目标是通过配置驱动的绑定添加新数据集,而不是编写专门的 Go 代码。
之前的版本将康涅狄格州大麻品牌数据集直接打包进二进制文件。相关代码已移除;数据集将通过上述绑定机制重新引入。
如果你只需要访问 DuckDB 文件中的 SQL,MotherDuck 的 mcp-server-motherduck 是一个用途更广泛的替代方案。dank-mcp 的目标是在此基础上打包大麻行业专用的提示词、资源和工具。
贡献与行为准则
欢迎提交拉取请求和问题,也可以自行 Fork。随你。
无论如何,请遵守我们的行为准则。可以行事低调,但别做讨人厌的人。
致谢与许可证
版权所有 (c) 2025 Neomantra Corp. 由 Evan Wies 撰写,所属项目为 AgentDank。
根据 MIT 许可证发布,详见 LICENSE.txt。
由 AgentDank 团队用 :herb: 和 :fire: 打造。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。