Skip to content
MCPBytes
DocsMCP

Guide

Connect over MCP

Add the MCPBytes server to your agent, pick a toolset, and let the agent upload files, run jobs and read results.

Endpoint

The MCP server is at https://api.mcpbytes.com/mcp (Streamable HTTP). Clients that support OAuth sign in with GitHub or an email link; others send an API key as a bearer token. Every tool is one MCP tool that starts a job, next to a few shared tools for uploads, jobs and results.

Add it to your agent

Pick your client. Each entry says where its settings live and what it cannot do, with a link to its own documentation.

Claude Code

The first form signs in through the browser when you run /mcp. In .mcp.json (project root), ${MCPBYTES_API_KEY} is read from the environment when Claude Code connects. Claude Code docs

claude mcp add --transport http mcpbytes \
  https://api.mcpbytes.com/mcp
Codex (CLI, IDE extension, ChatGPT desktop)

Codex reads the key from the environment variable each time it connects. The same table can go in ~/.codex/config.toml by hand; codex mcp add has no --header flag. Codex docs

codex mcp add mcpbytes --url https://api.mcpbytes.com/mcp \
  --bearer-token-env-var MCPBYTES_API_KEY
Cursor

~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Remote servers take no "type". Without the header, the client signs you in with GitHub or an email link (OAuth). Cursor docs

~/.cursor/mcp.json
{
  "mcpServers": {
    "mcpbytes": {
      "url": "https://api.mcpbytes.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:MCPBYTES_API_KEY}"
      }
    }
  }
}
VS Code (GitHub Copilot)

.vscode/mcp.json, or "MCP: Open User Configuration". The top-level key is "servers". VS Code asks for the key once and stores it securely. Without the header, the client signs you in with GitHub or an email link (OAuth). VS Code docs

.vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "mcpbytes-api-key",
      "description": "MCPBytes API key (mcpb_...)",
      "password": true
    }
  ],
  "servers": {
    "mcpbytes": {
      "type": "http",
      "url": "https://api.mcpbytes.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:mcpbytes-api-key}"
      }
    }
  }
}
Gemini CLI

~/.gemini/settings.json or .gemini/settings.json. The key is "httpUrl" ("url" means the older SSE transport). Without the header, the client signs you in with GitHub or an email link (OAuth). Then sign in with /mcp auth. Gemini CLI docs

~/.gemini/settings.json
{
  "mcpServers": {
    "mcpbytes": {
      "httpUrl": "https://api.mcpbytes.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MCPBYTES_API_KEY}"
      }
    }
  }
}
OpenCode

opencode.json or ~/.config/opencode/opencode.json. Variables are written {env:NAME}. "oauth": false makes a wrong key an error instead of a sign-in; remove it and the headers to sign in with OAuth. OpenCode docs

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mcpbytes": {
      "type": "remote",
      "url": "https://api.mcpbytes.com/mcp",
      "enabled": true,
      "oauth": false,
      "headers": {
        "Authorization": "Bearer {env:MCPBYTES_API_KEY}"
      }
    }
  }
}
oh-my-pi (omp)

.omp/mcp.json (project) or ~/.omp/agent/mcp.json (user). Without the header, the client signs you in with GitHub or an email link (OAuth). Then run /mcp reauth mcpbytes in a session. omp also picks up servers already set up for Claude Code, Cursor, VS Code, Gemini CLI and Codex. oh-my-pi docs

.omp/mcp.json
{
  "mcpServers": {
    "mcpbytes": {
      "type": "http",
      "url": "https://api.mcpbytes.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MCPBYTES_API_KEY}"
      }
    }
  }
}
pi

pi has no MCP support, by design: its author recommends command-line tools described by a skill. Install the MCPBytes skill (it drives the REST API with a small script), or add MCP with the pi-mcp-adapter extension. pi docs

mkdir -p ~/.pi/agent/skills/mcpbytes
curl -fsSL https://mcpbytes.com/skills/mcpbytes/mcpbytes.tar.gz \
  | tar -xz -C ~/.pi/agent/skills/mcpbytes
DeepSeek

DeepSeek's API does not run MCP servers itself: the agent you use DeepSeek models in does (Claude Code, OpenCode, oh-my-pi, Cline: use that agent's entry here). DeepSeek's own agent, DeepSeek Harness (dsh, a developer preview), takes this patch in ~/.dsh/cordis.patch.yml; it supports headers, not OAuth. DeepSeek docs

~/.dsh/cordis.patch.yml
- insert:
    - id: mcp-mcpbytes
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: mcpbytes
        transport: streamable-http
        url: https://api.mcpbytes.com/mcp
        headers:
          Authorization: !!js '`Bearer ${process.env.MCPBYTES_API_KEY}`'
Windsurf

~/.codeium/windsurf/mcp_config.json. Without the header, the client signs you in with GitHub or an email link (OAuth). Cascade allows 100 tools in total, so a single-family endpoint helps. Windsurf docs

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcpbytes": {
      "serverUrl": "https://api.mcpbytes.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:MCPBYTES_API_KEY}"
      }
    }
  }
}
Goose

~/.config/goose/config.yaml (Windows: %APPDATA%\Block\goose\config\config.yaml), or "goose configure" > Add Extension > Remote Extension (Streamable HTTP). The key is "uri". Without the header, the client signs you in with GitHub or an email link (OAuth). Goose docs

~/.config/goose/config.yaml
extensions:
  mcpbytes:
    type: streamable_http
    name: mcpbytes
    enabled: true
    uri: "https://api.mcpbytes.com/mcp"
    headers:
      Authorization: "Bearer ${MCPBYTES_API_KEY}"
    env_keys:
      - MCPBYTES_API_KEY
    timeout: 300
Zed

settings.json, or Settings > AI > MCP Servers > Add Server > Add Remote Server. Zed's settings cannot read environment variables, so sign in instead of storing a key: with no Authorization header, Zed starts the OAuth sign-in. Zed docs

settings.json
{
  "context_servers": {
    "mcpbytes": {
      "url": "https://api.mcpbytes.com/mcp"
    }
  }
}
Claude (desktop and web) and ChatGPT

These add remote servers as connectors and sign in with OAuth; there is no field for an API key. Claude: Customize > Connectors > Add custom connector. ChatGPT: turn on Developer mode in Settings, then create an app. Enter this URL: Claude docs

Connector URL
https://api.mcpbytes.com/mcp
Any client that only starts local (stdio) servers

mcp-remote runs locally and forwards to the endpoint. The header is written without a space and takes its value from "env", because some clients on Windows break arguments that contain spaces. Use it for Cline too. Without the --header arguments and "env", mcp-remote signs you in with OAuth. Any client that only starts local docs

mcp-remote
{
  "mcpServers": {
    "mcpbytes": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.mcpbytes.com/mcp",
        "--transport",
        "http-only",
        "--header",
        "Authorization:${MCPBYTES_AUTH}"
      ],
      "env": {
        "MCPBYTES_AUTH": "Bearer <your key>"
      }
    }
  }
}

Toolsets

https://api.mcpbytes.com/mcp has every tool. To keep an agent's tool list short, connect it to one family instead: each endpoint has its tools plus the shared ones. Every tool's page shows the setup for its endpoint.

Create a secret is used through a local helper, a separate MCP server on your computer; its page has the setup.

How agents run a tool

  1. Input. For a public https URL, the agent passes url to the tool (with filename if the URL does not end in the file's extension). For a local file, it calls create_upload, PUTs the file to the returned URL, then passes the upload_id. Upload URLs work once and expire after an hour. Tools that take parameters instead of a file, such as a prompt, get them as arguments.
  2. Run. The tool starts the job and waits up to wait_seconds (at most 45) for the result. Options are flat arguments.
  3. Wait. If the job is still queued or running, the agent calls get_job with wait_seconds until the status is final. Starting the same job again would be charged again; to retry after a network error, it repeats the call with the same idempotency_key.
  4. Results. result.files lists every output with a download URL, valid up to 24 hours (get_job gives fresh ones). read_job_file reads text outputs (.txt .json .md .csv) in chunks: it returns next_offset to pass as the next offset, until eof. Some tools return the start of their main text file with the result.

A job's statuses, retention and cancellation work the same as over REST: Jobs & files.

Shared tools

Every endpoint has these next to its job tools. create_upload is offered only where a tool takes a file.

Shared MCP tools
create_upload
Returns a one-hour URL to PUT a local file to; then call the tool with the upload_id.
get_job
Status and results of a job; waits up to wait_seconds for it to finish.
cancel_job
Cancel a queued job or a workflow whose can_cancel is true; repeated calls never delete results.
list_jobs
Your most recent jobs, newest first.
read_job_file
Reads a text output (.txt .json .md .csv) of a succeeded job in chunks.

create_upload also takes the file's sha256 and bytes: a file uploaded recently is then reused (reused: true) and needs no PUT.

Errors

A request that fails comes back as a tool error with the same code and message as the REST API, for example insufficient_credits: …. A job that fails is returned as a job, with its error. Both are listed in Limits & errors and on each tool's page.

Agent skill

The MCPBytes skill teaches an agent the whole workflow: uploads, waiting for jobs, reading results in chunks, each tool's options and errors. With MCP connected it uses the MCP tools; without MCP (pi, for example) it drives the REST API through a small Python script and MCPBYTES_API_KEY. Most agents (Codex, Gemini CLI, Copilot, Cursor, OpenCode, pi and more) read it from ~/.agents/skills/; the skill page has every agent's folder, Claude Code's included.

mkdir -p ~/.agents/skills/mcpbytes
curl -fsSL https://mcpbytes.com/skills/mcpbytes/mcpbytes.tar.gz \
  | tar -xz -C ~/.agents/skills/mcpbytes