MCP Server
Connect Claude, Cursor, or any Model Context Protocol client directly to our METRC bulletin archive and state resource data. Your assistant can then search and cite bulletins on its own, without you copying anything into the chat.
What you get
overviewThe Model Context Protocol (MCP) is an open standard that lets an AI assistant call external tools. Our server exposes the same bulletin and state resource data that sits behind the REST API, as tools your assistant can invoke while you talk to it.
Everything is read-only. There is no tool that can write, edit, or delete anything, so connecting is safe to experiment with.
The most useful tool is search_metrc_bulletin_content, which runs a semantic search over the text of every bulletin and returns only the relevant passages. That keeps large PDFs from flooding your assistant's context window, so questions like “what changed for California transporters this quarter?” work well.
01Get an API key
same keys as the REST APIThe MCP server uses the same keys as the REST API. If you already have one, it works here with no extra steps.
- Sign in and open your API Keys page.
- Choose Create New API Key, give it a name that says where it will live (for example Laptop — Claude), and optionally set an expiry date.
- Copy the key immediately. It is shown once. Afterwards the page displays only the first 8 characters, which is enough to identify a key but not to use it.
02Connect your client
streamable http · statelessThe server speaks the Streamable HTTP transport and is stateless, so there is no session id to manage. Point your client at this URL:
https://mcp.sebastiantidwell.com/mcpNote the /mcp on the end. The bare hostname is not the endpoint and will return 404.
Send your key as either header — the server accepts both:
X-API-Key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEYIf your client lets you choose, prefer X-API-Key. Some tools split header arguments on whitespace, which corrupts the Bearer <key> form.
One command, from your terminal:
claude mcp add --transport http metrc https://mcp.sebastiantidwell.com/mcp \
--header "X-API-Key: YOUR_API_KEY"Clients that support remote MCP servers natively take a block like this in their MCP settings:
{
"mcpServers": {
"metrc": {
"type": "http",
"url": "https://mcp.sebastiantidwell.com/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}Older clients can only launch a local process. The community mcp-remote bridge closes that gap. Pass --transport http-only so it does not waste a round trip probing for an SSE endpoint that does not exist here:
{
"mcpServers": {
"metrc": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.sebastiantidwell.com/mcp",
"--transport", "http-only",
"--header", "X-API-Key:YOUR_API_KEY"
]
}
}
}The colon in X-API-Key:YOUR_API_KEY has no space after it on purpose.
03Check it works
work up from the bottomIf your client will not connect, work up from the bottom. This should return {"status":"ok"}, and confirms you can reach the server at all:
curl -i https://mcp.sebastiantidwell.com/healthThen confirm your key is accepted, and see the tools you have access to:
curl -s -X POST https://mcp.sebastiantidwell.com/mcp \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}'Responses come back in Server-Sent Events framing, which is normal for this transport — you will see a data: prefix on the JSON.
Available tools
7 tools · read-onlyYour assistant picks these up automatically once connected, and decides which to call. You do not need to memorise them.
list_metrc_bulletinsList bulletins with optional state, distribution date range, limit and offset. Returns metadata only.search_metrc_bulletin_contentSemantic search across bulletin text. Returns the most relevant excerpts rather than whole documents — use this for questions and summaries.get_metrc_bulletinFetch a single bulletin by id. Optionally include the extracted text, or the PDF as base64.get_metrc_bulletin_pdfFetch the PDF for one bulletin by id, base64 encoded.get_state_resourcesRegulatory resources for a single state, by two-letter code.list_all_state_resourcesResources for every state, grouped by state. Accepts an optional list of state codes to narrow the result.get_api_documentationThe REST API reference — base URL, endpoints, query parameters, examples, auth and rate limits.Troubleshooting
common errorsStill stuck? Get in touch and include the exact error your client shows.