AgentDank: dank-mcp
dank-mcp is a Model Context Protocol (MCP) server for querying cannabis datasets. It is brought to you by AgentDank for educational and legal purposes.
[!NOTE] Status: under refactor.
dank-mcpis being reworked toward a generic, declarative dataset-binding architecture (see Notes on Design). You can bootstrap a dataset via--fetch <id>, which downloads a prebuilt snapshot fromdank-data. Today the only dataset isus/ct.
- Installation
- Using with LLMs
- Loading Data
- Command Line Usage
- Building
- Notes on Design
- Contribution and Conduct
- Credits and License
Snapshots of cannabis datasets are curated at the AgentDank dank-data repository; you can point dank-mcp at any DuckDB file via --db.
Installation
While we'd like to have pre-built binaries and Homebrew packages, we're having an issue with that right now. So the preferred way to install is using go install or building from source:
$ go install github.com/AgentDank/dank-mcp@latest
It will be installed in your $GOPATH/bin directory, which is often ~/go/bin.
Using with LLMs
To use this dank-mcp MCP server, you must configure your host program to use it. We will illustrate with Claude Desktop. We must find the dank-mcp program on our system; the example below shows where dank-mcp is installed with my go install.
The following configuration JSON (also in the repo as mcp-config.json) sets this up:
{
"mcpServers": {
"dank": {
"command": "~/go/bin/dank-mcp",
"args": [
"--root", "~"
]
}
}
}
Claude Desktop
Using Claude Desktop, you can follow their configuration tutorial but substitute the configuration above. With that in place, you can ask Claude questions and it will use the dank-mcp server.
Ollama and mcphost
I'm currently having issues with this working well, but leaving instructions for those interested.
For local inferencing, there are MCP hosts that support Ollama. You can use any Ollama LLM that supports "Tools". We experimented with mcphost, authored by the developer of the mcp-go library that performed the heavy lifting for us.
Here's how to install and run it with the configuration above, stored in 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...
Loading Data
dank-mcp can download a prebuilt DuckDB snapshot from the AgentDank dank-data repo:
$ 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
Downloads are cached at .dank/cache/<id>/dank-data.duckdb under --root (or the current directory). The cache is re-used for 7 days before a new download happens; use --force to override.
The snapshot's SHA-256 is verified against the catalog before install, and the local file is atomically replaced via rename — there's no window where a torn file is visible.
Command Line Usage
Here is the command-line help:
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
The server currently registers a single MCP tool, query, which takes a sql string argument and returns CSV. The DuckDB is opened read-only and further locked down via SET enable_external_access=false, so only pure SQL over local data is permitted.
Building
Building is performed with task:
$ task
task: [build] go build -o bin/dank-mcp
Notes on Design
dank-mcp is being reworked around a small set of ideas:
- Locked-down read-only DuckDB — the server opens DuckDB with
access_mode=read_onlyand appliesSET enable_external_access=falseso exposing a generic SQL tool is safe. - Generic
queryMCP tool — rather than hand-rolling per-dataset tools,dank-mcpexposes onequery(sql)tool that runs against whatever DuckDB you point it at. - Declarative dataset bindings (in progress) —
pkg/dankdefines aRegistrarinterface and JSON-taggableBinding/ResourceQuery/ToolQuerystructs. The intent is that new datasets can be added as config-driven bindings rather than bespoke Go code.
The previous surface bundled a Connecticut cannabis brands dataset directly into the binary. That code has been removed; datasets will be re-introduced via the binding mechanism above.
If all you want is SQL access to a DuckDB file, MotherDuck's mcp-server-motherduck is a more general-purpose alternative. The goal of dank-mcp is to bundle cannabis-specific prompts, resources, and tools on top of that.
Contribution and Conduct
Pull requests and issues are welcome. Or fork it. You do you.
Either way, obey our Code of Conduct. Be shady, but don't be a jerk.
Credits and License
Copyright (c) 2025 Neomantra Corp. Authored by Evan Wies for AgentDank.
Released under the MIT License, see LICENSE.txt.
Made with :herb: and :fire: by the team behind AgentDank.
Recommend MCP Servers 💡
mcp-simple-openai-assistant
MCP server that gives Claude ability to use OpenAI's GPTs assistants
bocha-search-mcp
博查是一个给AI用的搜索引擎,让你的AI应用从近百亿网页和生态内容源中获取高质量的世界知识,涵盖天气、新闻、百科、医疗、火车票、图片等多种领域。
@mcp-for-dev/mcp-google-search
Provides web search and webpage content extraction using Google Custom Search API.
@slow-groovin/unstorage-mcp
Key-Value storage MCP server based on unjs/unstorage, support drivers: redis, mongodb, filesystem. http
ghost-mcp
An MCP server that integrates Ghost CMS with Claude AI to create blog posts.
puppeteer-vision-mcp-server
This MCP server provides an AI-driven tool for scraping webpages, handling interactive elements like cookies and captchas, and converting the content to markdown format.