BCP

Portability - running Ultron from any IDE

BCP is the discovery + identity layer. The MCP server it points at is the actual invocation surface. Once Ultron exposes its chat-v2 tool registry as an MCP server, every modern coding environment can connect to it. The user's workspace becomes portable across Cursor, Claude Code, VS Code, Windsurf, and a native CLI.

Updated today

Three portability layers

Pulling apart what 'run Ultron from everywhere' actually means.

LayerWhat it isWhat it unlocks
Layer 1 - Ultron as MCP serverUltron exposes its tool registry over MCP. IDEs connect via stdio or HTTP transport.Every Ultron capability is available inside Cursor / Claude Code / VS Code / Windsurf / CLI.
Layer 2 - Each customer as MCP discoverable entityEvery Ultron customer's BCP manifest points at a tenant-scoped MCP endpoint.Any AI agent on the open web can find and act on an Ultron customer's surface.
Layer 3 - Cross-org agent actionAn Ultron agent reads a third party's manifest and uses it to transact.Multi-company workflows ('book demos with these 5 vendors') run autonomously.
Tip
This page is about Layer 1: how a developer in any IDE reaches their own Ultron workspace. Layer 2 is documented on the publishing page, Layer 3 on consuming.

The Ultron MCP server

The piece that has to ship for any of this to work.

At a glance
URL (HTTP)
https://ultron.app/mcp
URL (stdio)
npx -y @ultron/mcp
Transport
HTTP with SSE for server-initiated messages; stdio for local dev.
Tools surfaced
The full chat-v2 tool registry, gated by workspace scope.
Auth
OAuth 2.0 + PKCE. Access token scoped to one workspace.
Resources
Brain notes and files exposed as MCP Resources (read-only).
Sampling
Disabled. The IDE's own model handles inference.

Why an HTTP transport

MCP supports stdio and HTTP. For Ultron, HTTP is the default because the tools (CRM lookup, web scrape, carousel render, etc.) run on a containerized cloud runtime and scheduled workers running alongside the app, not on the developer's laptop. The stdio variant is a thin proxy that authenticates against ultron.app and forwards every request - useful for IDEs that only support stdio (older Claude Code configurations, custom CLIs).

What is NOT in the MCP server

Some chat-v2 tools are workspace-internal and never surface over MCP: billing mutations, tenant settings, and any tool whose effect would be ambiguous outside the Ultron UI. The MCP server is the public read + public write surface, not full admin access.

Auth flow

OAuth 2.0 + PKCE. One token per workspace.

  1. 01
    IDE initiates
    The IDE opens https://ultron.app/oauth/authorize with the standard PKCE parameters and a workspace selector.
  2. 02
    User authenticates
    Standard Ultron login. If logged in already, single click to select workspace. If multiple workspaces, picker.
  3. 03
    Scope consent
    User sees the requested scopes mapped to chat-v2 tool categories (e.g., "CRM read + write", "Brain read", "Background Jobs"). Approve all or per-scope opt-in.
  4. 04
    Token issued
    Access token scoped to (user_id, workspace_id, scopes). 90-day expiry, refresh token rotation.
  5. 05
    IDE stores the token
    In the host's secure credential store. Mac: Keychain. Windows: Credential Manager. Linux: libsecret.
  6. 06
    Every MCP call
    Bearer token in the Authorization header. Server checks scope, workspace, user, rate limit.
Note
Workspace switching means re-auth. The token is scoped to exactly one workspace by design - agents in two workspaces have different memory, different agents, different billing. Mixing them via a single token would be confusing.

Workspace context

What the IDE sees and what it doesn't.

SurfaceAccessible from IDE?
The 85 chat-v2 tools (filtered by workspace scopes)Yes
Brain notes, files, knowledge graphYes (read-only by default; write requires scope)
Saved leads, deals, pipelineYes
Email sequencesYes
The 7 agents (Cortex, Specter, Striker, Pulse, Sentinel, Amplify, Counsel)Yes - kick off, monitor, cancel
Background Jobs queue (the JobsModal panel)Yes - observed via a job_subscribe MCP tool
Scheduled tasks calendarYes - create / list / cancel via MCP tools
The /company-demo profileRead-only
Skill libraryYes - run any skill
The carousel rendererYes - generate carousels and pull the resulting URL
Sandboxes (isolated per-conversation / code tasks)Yes - start a sandbox, run code, fetch output
Ultron billingNo
Tenant settings (members, roles, integrations)No

Cursor

MCP config at ~/.cursor/mcp.json or per-project at .cursor/mcp.json.

~/.cursor/mcp.jsonjson
1{
2 "mcpServers": {
3 "ultron": {
4 "url": "https://ultron.app/mcp",
5 "transport": "http",
6 "headers": {
7 "Authorization": "Bearer ${ULTRON_TOKEN}"
8 }
9 }
10 }
11}

After saving the config, Cursor's chat sidebar lists "Ultron" as an MCP server with its full tool catalogue available to Composer. Tools appear with their normal names (save_lead,generate_carousel,jobs_create_mission, etc.) and can be invoked directly or through natural-language prompts.

Tip
Run ultron login in your terminal to provision the token automatically. The CLI writes it to~/.config/ultron/token and exportsULTRON_TOKEN for the current shell.

Claude Code

MCP config in ~/.claude/settings.json or per-project .claude/settings.json.

~/.claude/settings.json (excerpt)json
1{
2 "mcpServers": {
3 "ultron": {
4 "command": "npx",
5 "args": ["-y", "@ultron/mcp"],
6 "env": {
7 "ULTRON_TOKEN": "..."
8 }
9 }
10 }
11}

Claude Code reads MCP configs at startup. The stdio variant works best here because Claude Code's CLI does not host long-lived HTTP connections. The@ultron/mcp proxy npm package is a 200-line stdio bridge to the HTTP server.

claude code session exampletxt
1$ claude
2> Pull every lead in my Brazil pipeline that hasn't been emailed in 30 days
3 and draft a follow-up in Cortex's voice.
4
5 Calling ultron.crm_search_leads({
6 pipeline: "brazil",
7 last_emailed_before: "30d"
8 })
9 47 leads returned.
10
11 Calling ultron.gemma_draft_reply({
12 persona: "cortex",
13 leads: [...]
14 })
15 47 drafts saved to /dashboard/channels/drafts.

VS Code

Via the official MCP extension or built-in agent.

.vscode/settings.jsonjson
1{
2 "mcp.servers": {
3 "ultron": {
4 "type": "http",
5 "url": "https://ultron.app/mcp",
6 "headers": {
7 "Authorization": "Bearer ${env:ULTRON_TOKEN}"
8 }
9 }
10 }
11}

VS Code surfaces MCP tools through the Copilot Agent sidebar (or the Continue / Cline extensions). Once the Ultron server is registered, the agent has full workspace access subject to the granted scopes.

Windsurf

Cascade reads MCP servers from windsurf settings.

~/.codeium/windsurf/mcp_config.jsonjson
1{
2 "mcpServers": {
3 "ultron": {
4 "serverUrl": "https://ultron.app/mcp",
5 "auth": {
6 "type": "bearer",
7 "token": "${ULTRON_TOKEN}"
8 }
9 }
10 }
11}

Ultron CLI

Terminal-native access. Same tools, no IDE required.

install + usagebash
1# Install
2brew install ultron # macOS
3npm i -g @ultron/cli # cross-platform
4
5# Auth (opens a browser, OAuth flow)
6ultron login
7
8# Switch workspace
9ultron workspace use acme-corp
10
11# Run any chat-v2 tool
12ultron run web_search --query "fintech founders brazil"
13ultron run jobs_create_mission --plan "review pipeline and email at-risk deals"
14
15# Stream a mission
16ultron jobs follow <mission-id>
17
18# Pipe through a model
19ultron chat "summarize my Brazil pipeline and pick top 5 to call"
Tip
The CLI is also a thin wrapper around the same MCP server. Internally it is just an MCP client over HTTP, so anything surfaced in Cursor / Claude Code is also available here.

What this unlocks

A few concrete IDE-side scenarios.

Cursor: build a landing page that closes for a vertical

txt
1> Build me a landing page that closes for fintech founders in Brazil.
2
3 Calling ultron.bcp_lookup({ domain: "stripe.com" })
4 L3, MCP endpoint resolved, currencies USD, BRL supported.
5
6 Calling ultron.crm_search_leads({ industry: "fintech", country: "BR", stage: "qualified" })
7 32 leads, 9 at-risk.
8
9 Calling ultron.gemma_repurpose_content({
10 source: "/dashboard/content/brand-voice/voice.md",
11 audience: "fintech-br-cfo"
12 })
13 positioning sketch ready.
14
15 Generating /apps/landing-br-fintech/page.tsx...
16 Pushing to staging via ultron.deploy_task({ target: "staging" }).
17 Preview at https://staging-br-fintech.ultron.app

Claude Code: research a counterparty's pricing

txt
1> I'm writing a Linear integration. Show me their pricing tiers.
2
3 Calling ultron.bcp_lookup({ domain: "linear.app" })
4 L2, catalog endpoint https://api.linear.app/catalog, pricing https://linear.app/pricing.
5
6 Calling linear.catalog.list() (via the MCP endpoint Linear's manifest pointed at)
7 3 tiers returned: Free, Standard ($8/user), Plus ($16/user).
8
9 Want me to draft the README pricing section based on this?

CLI: kick off a background mission while you're writing code

bash
1$ ultron run jobs_create_mission \
2 --plan "Audit our Q3 pipeline. Email every deal that hasn't moved in 14 days, in Striker's voice. Report back with the digest."
3
4 Mission jm_8H... created. 47 child jobs spawned.
5
6 $ ultron jobs follow jm_8H...
7 12/47 done. ETA ~6 min.