Skip to content

MCP server

What it is

The Model Context Protocol (MCP) is an open standard that lets an AI assistant call tools in another service. Dotwick runs an MCP server so an assistant can list your codes, create and change them, tag them and read your scan numbers.

The server is a thin layer over this API. Each of its 11 tools calls one API route with that route's scope, under the same rate limits, so an assistant can do what its key could do by hand and nothing more. Nothing deletes: removing codes, folders and tags stays in the app and the REST API, so no prompt can break a printed code.

Before you start

MCP comes with API access (Pro, Business and Enterprise). In the app, open Settings → API and create a key with the scopes the assistant needs: the read scopes are enough for questions about your scans, and codes:write, folders:write or tags:write let it change things.

The assistant sees only the tools its key allows, so a read-only key never lists create_code. Every tool call counts as one API request against the key's rate limit and monthly total; listing the tools does not.

Connect it

The server speaks Streamable HTTP at https://api.dotwick.com/mcp. Send the key as a bearer token in the Authorization header.

exampleAdd the server
claude mcp add --transport http dotwick https://api.dotwick.com/mcp \  --header "Authorization: Bearer $DOTWICK_API_KEY"

Claude, ChatGPT and other clients

Claude Code adds the server with the command above. Clients that read an MCP configuration file, such as Cursor and VS Code, take the JSON block: keep the key in an environment variable and refer to it, never write it into the file.

ChatGPT and other apps that add a remote MCP server by its URL: enter the server URL, and send the key as a bearer token wherever the app asks for an API key or a header. An app that can only sign in with OAuth cannot connect yet. OAuth is planned; API keys are how the server is reached today.

Tools

Each tool maps to one API route and needs that route's scope. List tools return up to 50 items and a cursor for the next page.

list_codes
List the workspace's QR codes, newest first. Filter by folder, tags, type, status or a search over name and short link.codes:read · GET /v1/codes
get_code
One QR code with its destination, rules, tags and lifetime scans.codes:read · GET /v1/codes/{id}
create_code
Create a QR code that opens a web page. Dynamic by default (the destination can change after printing). Optional folder, tags and UTM parameters.codes:write · POST /v1/codes
update_code
Change a code's name, destination URL, folder, tags or expiry date, or pause and resume it.codes:write · PATCH /v1/codes/{id}
list_folders
The workspace's folders.folders:read · GET /v1/folders
create_folder
Create a folder, optionally inside another one.folders:write · POST /v1/folders
list_tags
The workspace's tags and how many codes carry each.tags:read · GET /v1/tags
create_tag
Create a tag with a name and a colour.tags:write · POST /v1/tags
tag_codes
Add or remove tags on up to 500 codes at once.codes:write · POST /v1/codes/tags
analytics_summary
Total and unique scans for a range: the workspace, one code, a folder or a tag.analytics:read · GET /v1/analytics/summary
analytics_breakdown
Top countries, cities, devices, browsers, codes or A/B variants for a range.analytics:read · GET /v1/analytics/breakdown

Limits and safety

  • The key keeps its folder restriction, IP ranges and rate limits: through MCP it sees only what it sees through the REST API.
  • Nothing can be deleted through MCP.
  • An assistant can be wrong. Ask it to say what it is about to change before it writes, and check the result in the app.