How-to guide
Connect an AI client over MCP
Queuey's MCP server, https://api.queuey.ai/mcp, lets an AI client operate Queuey with you: read workspaces, queues, events and issues, troubleshoot a delivery, and change a queue's setup. It is for operating from the cloud, in clients such as claude.ai and ChatGPT that cannot run a command line. A coding agent working in a repository uses the queuey CLI instead — see Set up with your AI.
Two ways in
- Sign in from Claude Code, Claude, ChatGPT or Codex. You approve the client in the Queuey console, and there is no key to copy. These four are the clients Queuey accepts a sign-in from.
- An API key (
qak_…) inX-Api-Key, or asAuthorization: Bearer qak_…, from any MCP client that can send a header.
Either way, the client acts in one license, with what the sign-in or the key allows.
Claude Code
claude mcp add --transport http queuey https://api.queuey.ai/mcp
claude mcp login queuey # or, in Claude Code: /mcp → queuey → AuthenticateWith a key, which works today:
claude mcp add --transport http queuey https://api.queuey.ai/mcp \
--header 'X-Api-Key: ${QUEUEY_API_KEY}'Keep the single quotes. With them, Claude Code reads QUEUEY_API_KEY each time it connects. In double quotes the shell expands it once, when you add the server, and a variable that is not set stores an empty key (api_key_empty). Add --scope user to have Queuey in every project.
Claude (claude.ai, Desktop, mobile)
- In claude.ai, open Customize → Connectors → Add custom connector.
- Name it Queuey, and enter
https://api.queuey.ai/mcpas the remote MCP server URL. - Choose to sign in, and for the OAuth client Use Claude's published identity.
- Connect, and approve Queuey in the console (below).
The connector follows your account to Claude Desktop and the mobile apps. On a Team or Enterprise plan an Owner adds it, under Organization settings → Connectors → Add → Custom → Web, and each member connects under Customize → Connectors. Without sign-in, the connector can carry a key under Request headers (X-Api-Key). Claude keeps it on its servers, so give it a key with only the access the connector needs.
ChatGPT
Add Queuey as a custom MCP server: on chatgpt.com/plugins, choose + and Add custom MCP server, enter https://api.queuey.ai/mcp, choose OAuth, and sign in. ChatGPT has called these connectors and apps, and the place to add one has moved with the name; your workspace's admin may have to allow custom servers first.
Codex CLI
codex mcp add queuey --url https://api.queuey.ai/mcp
codex mcp login queueyWith a key, which works today:
# ~/.codex/config.toml — Codex reads the key from QUEUEY_API_KEY when it connects
[mcp_servers.queuey]
url = "https://api.queuey.ai/mcp"
env_http_headers = { "X-Api-Key" = "QUEUEY_API_KEY" }What happens when you sign in
- The client opens your browser on the Queuey console. The page names the app, its site (claude.ai or chatgpt.com) and where it sends you back. For Claude Code and Codex that is this machine: allow it only if you just started the sign-in there.
- You choose the license, and what the client may do: Set up and operate (
operate, chosen first) or Read only (read). - Allow, and the browser goes back to the client, which is connected.
The connection acts as you, within your role in that license. It is listed under Connected apps in the console's account menu, with the client, the license and the access; disconnecting it there ends it at once.
What a connection can do
- Read only: 19 tools — workspaces, queues, events, deliveries and issues. It changes nothing.
- Set up and operate: 46 tools — the read tools, the
prepare_*changes and the operations that run, follow, cancel and undo them, the issue tools, a test event through a queue's flow, and a request for a person to paste a secret. - Never: delete a queue or a workspace, or create a key. Deleting is done in the console, and no tool on
/mcpmints keys. - In production a change that needs a person is not made: the answer carries a link to your approval inbox, where a person approves it.
The counts are for an Owner or Admin. A narrower role gives a shorter list. A key gets the tools its permissions reach.
whoami
Ask the client to call whoami. It says who the caller is (a key, or a connection as «person via client»), the license it acts in, its access and permissions, how many tools it has, each tool it does not have and why, and how to get more: connect again with operate, or get a role from an Owner. Call it when a tool you expected is missing, or an id answers not found. It never shows a secret or an e-mail address.
Other clients, and API keys
Any MCP client that speaks streamable HTTP and can send a header connects with a key. A person mints the key in the console (the license's Home page → API keys), and it acts in its license with its permissions. A license-wide key is the person's own: give a client a key with only the access it needs. Keep the key in an environment variable, and let the client read it when it connects:
{
"mcpServers": {
"queuey": {
"type": "http",
"url": "https://api.queuey.ai/mcp",
"headers": { "X-Api-Key": "${QUEUEY_API_KEY}" }
}
}
}Troubleshooting
| Answer | What it means |
|---|---|
| 401 authentication_required | The request sent neither a sign-in nor a key. Sign in from the client, or add the key header. |
| 401 api_key_empty | X-Api-Key or Authorization: Bearer was sent, but empty. Almost always a shell that expanded a variable that was not set when the server was added. Write the header in single quotes, 'X-Api-Key: ${QUEUEY_API_KEY}', so the client reads the variable each time it connects, or sign in. |
| 401 api_key_required | A key was sent that does not work on /mcp: revoked, mistyped, or not a qak_ key. |
| 401 invalid_token | The client's token is expired, revoked (disconnected under Connected apps) or not one for /mcp — a token from queuey login works on the REST API only. The client refreshes it; if that fails, sign in again. |
| queue_not_found, workspace_not_found | The id is not one you can read in the license the answer names. An id in another license is not found from here: call whoami to see your license, and connect again choosing the other one. |
| invalid_request at sign-in | The description names the parameter Queuey did not accept, such as resource or code_challenge. The client is not one of the four above, or a version that does not send it: update the client, or connect with a key. |
| invalid_argument | A tool call left out an argument or gave one the tool cannot use. The message names the argument. |