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 💡
rocketreach-mcp-server
A Model Context Protocol (MCP) server that integrates with the RocketReach API to provide email finding, phone number finding, and company enrichment capabilities.
strava
A Model Context Protocol (MCP) server with Strava OAuth integration, built on Cloudflare Workers. Enables secure authentication and tool access for MCP clients like Claude and Cursor through Strava login. Perfect for developers looking to integrate Strava authentication with AI tools.
@kocierik/consul-mcp-server
An MCP server that integrates with HashiCorp Consul, enabling large language models to manage services, health checks, key-value stores, and other Consul functionalities.
mcp_email_reader
MCP server to connect to an email server and read emails, exposing tools like search_emails, download_attachment, and list_folders
@llmindset/mcp-miro
A Model Context Protocol server to connect to the MIRO Whiteboard Application.
mcp-server-aoai-dalle3
An Azure OpenAI DALL-E 3 integration server implementing the Model Context Protocol (MCP). This server provides a bridge between Azure OpenAI's DALL-E 3 image generation capability and MCP clients.