Connect your own agent

Any agent you run — a script, an agent harness, an app on the Claude or OpenAI APIs, Claude Code or Codex — can talk to Capital Company’s assistant through its MCP server. It acts as you, on the teams you belong to, with the permissions you have. For Claude and ChatGPT themselves, see Claude and ChatGPT.

The server

https://capitalcompany.ai/mcp

MCP over Streamable HTTP, stateless: every message is a JSON-RPC POST. tools/list describes each tool and its input.

Signing in

Pick whichever your agent can do.

  • A personal access token, for an agent that only sends requests. Create one in your Capital Company account settings, under Personal access tokens: name it after the agent and choose when it expires. It is shown once. Your agent sends it as Authorization: Bearer ccpat_…. Revoke it there whenever you like.
  • OAuth, done by your client. MCP clients that sign in themselves — Claude Code, codex mcp login — find the sign-in from the server and open it in your browser. Nothing to configure.
  • Device sign-in, for an agent with no browser that can show you a code. It registers once, asks for a code, and shows it to you; you enter it at https://capitalcompany.ai/oauth/device, signed in, and allow it. The agent then gets OAuth tokens, which it refreshes as any OAuth client does.
Device sign-in
# Register once; keep the client_id.
curl -X POST https://capitalcompany.ai/oauth/register -H 'Content-Type: application/json' \
  -d '{"client_name": "My agent", "grant_types": ["urn:ietf:params:oauth:grant-type:device_code"]}'

# Ask for a code; show the user user_code and verification_uri_complete.
curl -X POST https://capitalcompany.ai/oauth/device_authorization -d client_id=$CLIENT_ID

# Poll every interval seconds until the user answers.
curl -X POST https://capitalcompany.ai/oauth/token -d client_id=$CLIENT_ID -d device_code=$DEVICE_CODE \
  -d grant_type=urn:ietf:params:oauth:grant-type:device_code

Setting it up

Claude Code
claude mcp add --transport http capital-company https://capitalcompany.ai/mcp \
  --header "Authorization: Bearer $CAPITAL_COMPANY_TOKEN"
Codex (~/.codex/config.toml)
[mcp_servers.capital_company]
url = "https://capitalcompany.ai/mcp"
bearer_token_env_var = "CAPITAL_COMPANY_TOKEN"
Claude API (MCP connector)
curl https://api.anthropic.com/v1/messages \
  -H "X-API-Key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" \
  -H "anthropic-beta: mcp-client-2025-11-20" -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-5",
    "max_tokens": 4096,
    "messages": [{"role": "user", "content": "Set up Acme Fund IV, LP"}],
    "mcp_servers": [{"type": "url", "url": "https://capitalcompany.ai/mcp", "name": "capital-company",
                     "authorization_token": "'"$CAPITAL_COMPANY_TOKEN"'"}],
    "tools": [{"type": "mcp_toolset", "mcp_server_name": "capital-company"}]
  }'
OpenAI Responses API (tool entry)
{
  "type": "mcp",
  "server_label": "capital_company",
  "server_url": "https://capitalcompany.ai/mcp",
  "authorization": "<your token>",
  "require_approval": "always"
}
Any HTTP client
curl -X POST https://capitalcompany.ai/mcp -H "Authorization: Bearer $CAPITAL_COMPANY_TOKEN" \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

How a conversation goes

  1. Start with the tool for what you want — capital_company_create_fund, capital_company_invite_investors, capital_company_send_capital_calls and the rest — with the request in plain words. Send timeZone (such as America/New_York) unless your account already has one.
  2. Capital Company’s assistant answers with a question, or with a proposal to confirm. Answer a question with capital_company_reply.
  3. A proposal names a Confirmation: nothing is done until it is answered. Answer it with capital_company_confirm, or open the link it carries and answer it signed in.
  4. A reply that is still being worked on says so; capital_company_conversation waits for it and reads the conversation back.

What your agent can and cannot do

  • Your agent may confirm on your behalf. Give it that only for what you would confirm yourself: a confirmation from your agent is yours. Every answer is recorded with where it came from.
  • It never moves money, takes or changes bank details, marks payments, deletes funds or commitments, or changes who is on your team — whoever asks.
  • A token is limited to 300 calls an hour and 2,000 a day; past that the server answers 429 with when to try again.
  • Revoke a token, or disconnect an OAuth client, from your account settings: its next call is refused.

Support

Questions or problems: contact us.