Skip to content

Wire it into an agent host

The Extrovert MCP server works with hosts that support the Model Context Protocol. This page covers the connection and tool flow; for host-specific config files see Client configuration.

TransportUse it forCommand
stdioLocal hosts that spawn the packaged process.npx -y @extrovert.dev/mcp@next
Hosted OAuthExisting human console accounts in OAuth-capable hosts.https://mcp.extrovert.dev/mcp
HTTP (Streamable)A deployment you operate: POST /mcp, default :8787.npx -y @extrovert.dev/mcp@next --http --port 8787
Terminal window
npx -y @extrovert.dev/mcp@next --help

Almost every MCP host uses the same mcpServers shape. For a local (stdio) host:

mcp config (stdio)
{
"mcpServers": {
"extrovert": {
"command": "npx",
"args": ["-y", "@extrovert.dev/mcp@next"]
}
}
}

For Extrovert’s hosted OAuth endpoint:

mcp config (hosted OAuth)
{
"mcpServers": {
"extrovert": {
"url": "https://mcp.extrovert.dev/mcp"
}
}
}

For a self-hosted runtime over HTTP, point at your deployment and pass the key as a bearer header:

mcp config (hosted HTTP)
{
"mcpServers": {
"extrovert": {
"url": "https://your-mcp-host.example/mcp",
"headers": { "Authorization": "Bearer pk_agent_…" }
}
}
}

Copy-paste configs for Claude Desktop, Claude Code, and Cursor are in Client configuration.

  1. Use hosted OAuth, supply a limited pk_agent_… key, or give the packaged stdio server a short-lived pk_enroll_… key to redeem. Do not provide an organization-wide administrative key.

    limited credentials only
  2. Local stdio reads its permission-restricted credential file. EXTROVERT_API_KEY is an explicit override; a self-hosted HTTP client uses an Authorization header.

  3. With an enrollment key, the host’s first tool call is redeem_enrollment, which creates or finds the agent and returns its project-bound key. The packaged stdio server stores that key automatically.

Once connected, the agent uses ordinary tool calls. A typical enrollment, inbox, and review flow is:

redeem_enrollment { enrollment_token,
agent_handle } → project-bound agent key
create_inbox { display_name } → agent7@extrovertmail.com
get_inbox { inbox } → … effective_review_policy: "require_review"
send_email { inbox, to, subject, text,
intent } → queued_for_review { review: { id: "rr_…" } }
wait_for_review_event { review_id } → reason: "sent" → the human released it
wait_for_email { inbox, from } → { message, otp_code, verification_link }
reply_email { inbox, message_id, text,
intent } → queued_for_review (same policy applies)

Outbound mail is queued for a human by default, so it carries an intent (one sentence of reviewer context; without it the call is rejected 422 intent_required) and it finishes on a terminal sent / send_failed review event rather than at the moment the tool returns. Read effective_review_policy once and branch on it; an allow_direct inbox sends straight away.

Tools are annotated (readOnlyHint, destructiveHint, and related hints) so a host can present read tools freely and gate delete_inbox / delete_webhook behind confirmation. The standout is wait_for_email: it blocks server-side and returns the OTP and verification link already extracted, so the agent can continue without its own polling loop.

VariableDefaultPurpose
EXTROVERT_API_BASE_URLhttps://api.extrovert.devBase URL of the Extrovert REST API.
EXTROVERT_API_KEY(empty)Limited agent key (pk_agent_…) or an enrollment key for local redemption (pk_enroll_…).
EXTROVERT_CONFIG_DIRplatform config directoryOverride the local credential directory.
EXTROVERT_MOCK(off)Set 1 to force offline fixtures: every tool works with no key, no network.
EXTROVERT_REQUEST_TIMEOUT_MS30000Per-request timeout for non-blocking calls.
EXTROVERT_MAX_WAIT_MS300000Upper bound the server allows wait_for_email to block.
PORT / HOST8787 / 0.0.0.0--http bind.