BorkerBorker Docs
Agent API & MCP

Borker MCP

Connect any MCP client — Claude Code, Claude Desktop, and more — to your workspace with one URL and an agent key.

The Borker MCP is a hosted Model Context Protocol endpoint. Point any MCP client at it with an agent key and your AI assistant immediately knows how to drive your workspace — no SDK, no glue code, nothing to install.

https://borker.xyz/api/v1/mcp

Connect from Claude Code

claude mcp add --transport http borker https://borker.xyz/api/v1/mcp \
  --header "Authorization: Bearer <your agent key>"

Then just ask: "List my Borker channels and draft a post about our launch for X."

Connect from Claude Cowork or Claude Desktop

These two share one MCP configuration, so the setup is identical.

Do not use the Add custom connector dialog for Borker yet. It only accepts OAuth credentials, with no field for an agent key, and it fails in a way that looks like success: the connector reports healthy and lists all eleven tools, because catalog discovery is unauthenticated, and then every action fails. Use the config file below instead. A one-click OAuth connection is on the way.

First, confirm your key works:

curl -s https://borker.xyz/api/v1/channels \
  -H "Authorization: Bearer <your agent key>"

You should get your channel list back. If you get a key error instead, issue a new key in Settings → Agent Keys before going further, because a bad key surfaces as a confusing client error rather than a clear message.

Then add Borker to the config file:

{
  "mcpServers": {
    "borker": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://borker.xyz/api/v1/mcp",
        "--header", "Authorization:${AUTH_HEADER}"
      ],
      "env": { "AUTH_HEADER": "Bearer <your agent key>" }
    }
  }
}
PlatformConfig file
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json

Restart the app and Borker's tools appear.

The missing space after Authorization: is deliberate. Claude Desktop mangles spaces inside args, so the space lives in the environment variable instead. mcp-remote substitutes ${AUTH_HEADER} itself, so this works whether or not the client expands variables.

Connect from another client

Any client that speaks MCP over streamable HTTP and lets you set a request header works directly:

  • URL: https://borker.xyz/api/v1/mcp
  • Header: Authorization: Bearer <your agent key>

If the client cannot set a header, use the mcp-remote bridge shown above.

What your agent gets

Eleven tools mirroring the REST API:

ToolWhat it doesCredits
list_channelsConnected channels + ids to target
get_brandBrand voice profile for in-character writing
get_scheduleScheduling config + weekly slots
get_statsChannel balance, pipeline depth, quota usage
list_content / get_contentBrowse the pipeline
create_content_draftAdd a draft the agent wrote itself (pass title for Paragraph)Free
generate_contentBorker generates in your brand voice1 credit per channel
update_contentApprove, un-approve, reject, edit
schedule_contentSchedule or publish-now
delete_contentRemove non-published items

The agent's power is exactly the key's power: a Read-scope key makes the write tools fail with scope_required, and every action is confined to the key's workspace. Key management is deliberately not exposed as MCP tools.

Everything an agent does lands in your normal review pipeline with the API badge — sensitivity holds, AI-ism detection, and your approval mode all still apply. Connecting an agent doesn't bypass your safety net.

Scoping the agent down

Issue a dedicated key per agent (e.g. "Claude Code — laptop", "Research agent — read only") so you can see per-key usage and revoke one integration without touching the others. Read-scope keys are great for agents that should analyze but never post.

How failures arrive

Two different things can go wrong, and they arrive differently on purpose.

A tool ran and failed — bad arguments, quota exhausted, item not found. That is a normal MCP tool error: HTTP 200, result.isError: true, and the v1 error envelope as the result text. Your agent should read the code, act on it, and carry on.

Your credentials are the problem — no key, an invalid or revoked key, or a key without the scope the tool needs. Those carry a real HTTP status, because a 200 gives your client nothing to react to and hides auth-failure spikes from anything sitting in front of the endpoint:

SituationStatuserror.data.code
No Authorization header401missing_authorization
Unknown, malformed or revoked key401invalid_api_key
Key lacks the required scope403scope_required
Key owner's role is too low403forbidden
Too many requests429rate_limited_key / rate_limited_ip

The message stays readable in every case — the status is added, nothing is taken away. No WWW-Authenticate header is sent: Borker uses static bearer keys, so there is no authorization server for a client to discover.

initialize, tools/list and ping stay reachable without a key, so a client can show the catalogue before you paste one in.

On a 429, error.data.retryAfterSeconds says how long to wait, and rate_limited_key vs rate_limited_ip says whether it was your key or the address you're calling from. create_content_draft and generate_content are limited more tightly than the read tools — see Rate limits.

On this page