dock0

Guide for deploying and monetizing MCP servers on Dock0. Use when the user wants to deploy an MCP server, monetize an existing MCP server, set up per-call pricing, manage API keys, configure Claude Desktop or Cursor to use a Dock0 endpoint, manage wallet balance, view earnings, or use the dock0 CLI. Also use when the user mentions Dock0, dock0, or MCP server deployment/monetization.

Dock0 - Deploy & Monetize MCP Servers

Dock0 turns any MCP server into a paid, managed endpoint with built-in API keys, rate limiting, wallet billing, and author payouts.

Dashboard: https://app.dock0.dev MCP proxy: https://mcp.dock0.dev

Quick Start: Two Paths

Path 1 - Connect an existing server (fastest, no build)

Already running an MCP server? Paste the URL and get a paid proxy endpoint in seconds.

dock0 login
dock0 link --name my-tool --url https://your-server.com/mcp --price 0.01

This creates a proxy endpoint at https://<username>.mcp.dock0.dev/<slug>/mcp that wraps your server with auth, rate limiting, and per-call billing. No container build needed - the deployment is live immediately.

Or use the dashboard: https://app.dock0.dev/dashboard/new?mode=connect

Path 2 - Deploy from GitHub (full hosting)

Host your MCP server on Dock0's infrastructure (Fly.io). Supports TypeScript and Python runtimes.

dock0 login
dock0 github connect          # Install the GitHub App on your repo
dock0 github repos            # List connected repos
dock0 mcp add --repo owner/repo --project .

Or use the dashboard: https://app.dock0.dev/dashboard/new?mode=deploy

Hosted runtime shape:

  • dock0 mcp add expects a stdio MCP runtime. Dock0's bridge handles HTTP and launches your process with command/args.
  • Build hosted MCPs as processes that read MCP messages from stdin and write responses to stdout. Do not expose your own Express/Fastify HTTP endpoint for the hosted path.
  • If you already have an HTTP MCP server, keep it HTTP and use dock0 link --url ... instead of converting it for hosted deployment.

Runtime detection:

  • TypeScript: package.json must have @modelcontextprotocol/sdk as dependency
  • Python: requirements.txt or pyproject.toml must contain mcp

Setting a Price

Every deployment can charge per MCP call. Set via CLI or dashboard.

# During creation (connect mode)
dock0 link --name my-tool --url https://server.com/mcp --price 0.005

# After creation (any mode)
# Use the dashboard Settings tab: /dashboard/<slug>/settings
# Or PATCH the API:
curl -X PATCH https://app.dock0.dev/api/v1/deployments/<slug> \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"pricingEnabled": true, "pricePerCall": 0.005}'

Price is in USD per MCP call. Set to 0 or disable pricing for free endpoints.

API Keys

Every deployment is protected by API keys. Create keys for your users:

dock0 keys create <slug> --name "Production key"
# Output: mcp_live_abc123... (shown once - copy it)

dock0 keys list <slug>
dock0 keys disable <slug> <keyId>
dock0 keys enable <slug> <keyId>

For public deployments (visible in the directory), consumers create their own keys:

dock0 keys create-public <username>/<slug> --name "My key"

Configuring MCP Clients

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "<tool-name>": {
      "url": "https://<username>.mcp.dock0.dev/<slug>/mcp",
      "headers": {
        "Authorization": "Bearer mcp_live_<your-key>"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "<tool-name>": {
      "url": "https://<username>.mcp.dock0.dev/<slug>/mcp",
      "headers": {
        "Authorization": "Bearer mcp_live_<your-key>"
      }
    }
  }
}

Claude Code

Add to .mcp.json in your project root or ~/.claude.json globally:

{
  "mcpServers": {
    "<tool-name>": {
      "type": "url",
      "url": "https://<username>.mcp.dock0.dev/<slug>/mcp",
      "headers": {
        "Authorization": "Bearer mcp_live_<your-key>"
      }
    }
  }
}

Wallet & Billing (Consumer Side)

Consumers pre-fund a wallet. Each paid MCP call deducts from the wallet balance. No per-call Stripe fees.

dock0 wallet balance
dock0 wallet topup --amount 10    # Opens Stripe Checkout to add $10
dock0 wallet transactions         # View spending history

If wallet balance is insufficient, the proxy returns HTTP 402.

Earnings & Payouts (Creator Side)

Creators earn 95% of each paid call (5% platform fee). Payouts via Stripe Connect.

dock0 earnings                    # View gross/net earnings
dock0 connect status              # Check Stripe Connect status
dock0 connect onboard             # Set up Stripe Connect for payouts
dock0 connect dashboard           # Open Stripe Express dashboard

Environment Variables

For hosted deployments, manage runtime env vars:

dock0 env list <slug>
dock0 env set <slug> API_KEY sk-secret-value
dock0 env remove <slug> API_KEY

Setting an env var triggers automatic redeployment.

Deployment Lifecycle

dock0 status                      # List all deployments
dock0 redeploy <slug>             # Rebuild and redeploy
dock0 start <slug>                # Start a stopped deployment
dock0 stop <slug>                 # Stop a running deployment
dock0 delete <slug> --yes         # Delete permanently
dock0 logs <slug>                 # View runtime logs
dock0 logs <slug> --build         # View build logs

CLI Authentication

dock0 login                       # Browser-based device-code auth
dock0 logout                      # Revoke session
dock0 whoami                      # Show current user

Config stored at ~/.dock0/config.json.

Subscription Plans

dock0 subscribe --plan pro        # Upgrade to Pro ($29/mo)
dock0 subscribe --plan team       # Upgrade to Team ($99/mo)
dock0 portal                      # Manage subscription in Stripe

Common Workflows

Monetize an existing MCP server in 60 seconds

dock0 login
dock0 link --name weather-api --url https://my-server.com/mcp --price 0.01
dock0 keys create weather-api --name "Demo key"
# Share the endpoint + key with your users

Deploy from source and set up pricing

dock0 login
dock0 github connect
dock0 mcp add --repo myorg/my-mcp-server --project .
# Wait for build to complete
dock0 keys create my-mcp-server --name "Production"
# Enable pricing via dashboard Settings tab

Make a deployment public (appear in directory)

Use the dashboard Settings tab for the deployment and toggle "Public" on. Or:

curl -X PATCH https://app.dock0.dev/api/v1/deployments/<slug> \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"isPublic": true}'

Public deployments appear at https://app.dock0.dev/directory and allow consumers to create their own API keys.