Agent access (MCP)

Intoru exposes your own account over MCP, so Claude, Codex or a tool you write can read your leads, draft replies and run campaign setup. The agent works through the same owner-aware services the app uses, under scopes and an approval mode you choose.

Agent access is available on Solo and above. Intoru never receives your Reddit credential, and no reply is ever posted without you.

1. Create a token

Open Account → Agent access and create a personal access token. Two things matter:

  • Resource. Pick MCP for MCP clients such as Claude Code, or Public API for the Intoru CLI and direct HTTP calls. A token is bound to one of them and will not work with the other.
  • Scopes. Grant only what the agent needs. Reading leads needs opportunities:read; drafting and recording replies needs the outreach:* scopes.

The full token is shown once, immediately after creation. Intoru keeps only its hash, so if you lose it, create a new one and revoke the old.

2. Configure your client

Claude Code

claude mcp add --transport http --scope user intoru \
  https://api.intoru.ai/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Restart Claude Code afterwards: MCP servers are loaded at startup, so a running session will not pick up a new one.

Codex

Codex reads the credential from an environment variable rather than an inline header:

export INTORU_MCP_TOKEN='YOUR_TOKEN'
codex mcp add intoru --url https://api.intoru.ai/mcp \
  --bearer-token-env-var INTORU_MCP_TOKEN

Check it with codex mcp get intoru, which should report transport: streamable_http.

Cursor, VS Code and other editors

{
  "mcpServers": {
    "intoru": {
      "type": "http",
      "url": "https://api.intoru.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Intoru CLI

export INTORU_TOKEN='YOUR_TOKEN'
intoru campaigns list

The CLI talks to the Public API, so use a token created for that resource. It can also sign in with OAuth instead, storing the refresh token in your operating-system credential store.

3. Verify

Run claude mcp list (or codex mcp list). Intoru should read ✔ Connected. Then ask your agent to list your campaigns; it should come back with real names.

What an agent can do

ToolPurpose
campaigns_listList your campaigns.
campaign_updateSet the Reddit username used for replies on one campaign.
opportunities_listPage through leads, with limit and an opaque cursor.
opportunity_outreach_briefThe post, subreddit rules, match reasoning, risk notes and handoff data for one lead.
opportunity_updateSave, dismiss, accept or mark converted.
outreach_captureRecord a reply as sent, cancelled or blocked.
campaign_setup_start, campaign_refinement_start, skill_run_input, skill_run_getDrive campaign setup and refinement as durable Skill Runs.

Intoru does not write or send the reply itself over MCP. It returns the brief, and your agent drafts with you in the loop.

Approval modes

Each connection carries a policy that is enforced server-side, so a misbehaving agent cannot exceed it:

  • Ask for approval. Every change waits for you.
  • Approve for me. Private, reversible changes proceed; activation and high-impact actions still ask.
  • Full access. Anything the token scopes allow.
  • Custom. A policy per action.

A write may return an approval URL. You open it while signed in to Intoru; the connection cannot approve its own action.

Troubleshooting

The client says it failed to connect

Nine times out of ten the header is malformed. There must be exactly one space after Bearer. Writing Bearer$TOKEN in a shell, or letting an unset variable expand to nothing, produces a value the server cannot parse, and the only symptom is a client that lists no tools.

401 Unauthorized

  • The token was revoked, or is past its expiry.
  • The plan dropped below Solo. Agent access is a Solo-and-up entitlement, so an otherwise valid token stops resolving.
  • The token is bound to the other resource: an MCP token cannot call the Public API, and vice versa.

Tools call but writes are refused

Check the scopes on the token and the approval mode on the connection. Insufficient scope is reported as insufficient_scope.

Revoking access

Delete the token in Account → Agent access. It stops working immediately, and deleting your account removes every connection and token with it.