- Claude Code — runs the real Claude Code agent with Anthropic models. Supports selected MCP servers and native tool approval.
- Codex — runs the real Codex CLI agent with OpenAI gpt-5 family models. Supports skills and selected MCP servers (through a host-executed relay — see the caveat below).
- Cursor CLI — runs the real Cursor agent, signed in with your own
CURSOR_API_KEYand billed to that Cursor account. MCPJam mints no model lease for it, so it needs a credential the other two do not. This page documents that credential in Harness credentials on your own vendor account; its turn mechanics and host settings are not covered here yet. The Playground model picker shows Cursor Auto locked — the Cursor runtime picks its own model on your account, so the picker has nothing to select.
The Claude Code and Codex hosts are available to organizations where the
respective feature has been enabled. Contact your account team if you don’t
see them in the host template catalog.
What happens when you run a turn
- Pre-flight check. Before the stream opens, MCPJam verifies that the host can run: the model is supported by the selected harness, the Computer data plane is configured, and the host settings are ones the runtime can honor. Any failure returns a clear error before the turn starts — a turn never silently falls back to the emulated engine.
- Where it runs. By default the host’s project Computer is reserved or woken (provisioned on first use). In the desktop app and
npx @mcpjam/inspector, a Claude Code host can instead run natively on your own machine — see Running Claude Code on your machine below. A turn never moves between the two on its own: if the target you chose cannot run, you are told why, and you decide. - Credential delivery. MCPJam installs a short-lived model credential into the sandbox’s egress layer outside the VM. Neither the sandbox nor your browser ever holds a real model key. The agent runs pointed at MCPJam’s model proxy, which verifies the credential and meters every generation. There is no raw-key fallback.
- MCP delivery. The two harnesses deliver MCP servers differently:
- Claude Code (native) — selected MCP servers are written into the session’s MCP config, each pointed at MCPJam’s per-server proxy tunnel. The runtime’s own MCP client connects to them and the model calls the tools through native function calling. No upstream credentials enter the sandbox.
- Codex (host-executed) — the Codex CLI does not make MCP server tools model-callable in the mode MCPJam drives (openai/codex#19425), so MCPJam instead enumerates each selected server’s tools at turn start and hands them to the agent as host-executed tools. The bridge injects their descriptions into the prompt, the model invokes them through a CLI shim, and MCPJam executes them on its own server against the already-authorized connection. Nothing about your servers — no URL, no token — enters the sandbox.
- The turn runs. The agent’s own loop executes; native tools run inside the sandbox; file changes land on the Computer’s disk; the transcript and trace persist like any other chat.
Running Claude Code on your machine
Available in the MCPJam desktop app and
npx @mcpjam/inspector — never in the
hosted product — and only where MCPJam has enabled it for your account.- Install the local runtime. About 200 MB, downloaded once and shared by every project: Claude Code, its supporting runtime, and the Node it runs on. MCPJam verifies the download’s signature and then verifies the contents again after extraction, and refuses anything that does not match what this Inspector build expects.
- Choose the project folder. In the desktop app this opens your OS folder picker. This is the directory the agent starts in.
- Authorize. The authorization is scoped to this project and this machine, and it expires on its own. Changing the runtime, the folder, or the permission profile means authorizing again — the old authorization does not carry over, by design.
Host settings
Claude Code
Codex
Host-page tool-level toggles (such as tool visibility) are not re-enforced
for harness runs. Controls the runtime cannot honor are disabled in the UI
rather than silently ignored.
Codex MCP fidelity caveat
Codex’s MCP support is not equivalent to Claude Code’s, and the difference matters if you are using it to benchmark a connector:- The model does not call your tools through native function calling. The harness bridge injects each tool’s name, description, and input schema into the prompt, and the model runs
node <shim> <toolName> '<json>'through its built-inbashtool. Tool-selection behavior therefore reflects how well the model follows those shim instructions, not how a native MCP client would behave. - Tools execute host-side, in MCPJam’s server process, not in the sandbox. For a remote HTTP connector the difference is small (the same outbound request, from a different origin). For a stdio/local server it is larger — the server runs where MCPJam runs, not next to the agent.
- Tool schemas are enumerated once, at turn start. There is no
tools/list_changedsubscription, so a server that changes its tool list mid-turn is only picked up on the next turn. - Every projected tool’s description is part of the prompt, so a server with many tools inflates each turn of the conversation.
Requirements
- A project Computer (the E2B data plane must be configured for your deployment) — or, for a Claude Code host in the desktop app or
npx, the local runtime installed and authorized (see Running Claude Code on your machine). - For Claude Code: an MCPJam-provided Anthropic model selected on the host.
- For Codex: an MCPJam-provided OpenAI gpt-5 family model selected on the host.
- A signed-in project member — guest sessions cannot run harness hosts.
Harness credentials on your own vendor account
Not every harness runs on MCPJam’s model access. A harness that authenticates against the customer’s own account with the runtime vendor — the Cursor CLI host, which signs in with aCURSOR_API_KEY and bills every generation to that
Cursor account — takes no MCPJam model lease at all. Its credential comes from a
project secret, and the delivery you choose decides which surfaces can run it.
Hosted eval and swarm launches refuse an environment that selects a
materialized secret. That is deliberate: only the chat path resolves and injects
materialized values, so on a runner-claimed attempt the credential would simply
be missing and the run would report a healthy connector as broken. A brokered
secret has no such problem — the backend composes it into the box’s network
policy and the runner does not participate.
So for a Cursor CLI host that you intend to run in an eval suite or a swarm,
create the secret as brokered, under Project Settings → Secrets, bound to:
Then select it into the environment the host runs in. That selection is the
grant, not a formality: brokered secrets are composed onto a box from its
environment’s selection, so a secret the environment does not grant is never
delivered no matter how it is bound.
Every way that can go wrong is refused before the sandbox is touched, with a
message that names the fix:
Replaying an eval run cannot verify a brokered credential. A replay keeps
the original run’s environment internally, but MCPJam’s runner is not told
which environment that was, so it cannot check the grant before the sandbox
starts and refuses rather than guess. Launch the suite directly to run a
Cursor CLI host; nothing about the secret or the environment needs to change.
A persistent project Computer (the ordinary playground chat box) does not
receive brokered secrets today — they are composed onto the disposable boxes
that scenario, eval and swarm runs provision. Chat on a project Computer
therefore needs a materialized
CURSOR_API_KEY. It is fine for one
environment to hold both.Project secrets require KMS envelope encryption
Storing any project secret requires the deployment to have envelope encryption turned on. Without it MCPJam refuses the write outright, with:This deployment cannot store project secrets yet: envelope encryption (SECRETS_KMS_WRITE) is not enabled.This is a deployment prerequisite, not a toggle: without envelope writes the stored value is not cryptographically bound to its project and its owner, and a credential store whose isolation rests on row checks alone is not the design. MCPJam Cloud has this configured. A self-hosted or local development deployment must set, on the Convex backend:
Set the four key variables before turning
SECRETS_KMS_WRITE on, and prove
the key actually works first — four correctly spelled variables are not the same
as a usable key, and every way that can fail (missing IAM permission, wrong
region, a private key truncated by a dashboard field) looks like success until
the first real write. Reads are unaffected: a deployment holding older secrets
keeps opening them.
Until KMS is configured, a self-hosted deployment cannot store a
CURSOR_API_KEY in either delivery, and so cannot run the Cursor CLI host.
Billing
- Computer time — the harness runtime keeps the Computer awake, so it meters into your org’s monthly computer-time allowance exactly like terminal use. A turn that runs on your own machine uses no Computer and meters no computer time.
- Model tokens — every generation is priced and settled by the model proxy against your org, the same accounting as regular chat, whether the turn ran hosted or on your own machine. Spend caps and empty-wallet rejections apply before the stream starts either way.
Failure modes
None of these fall back to the emulated engine — a turn that says it ran the real runtime did. All fail closed; a failed start spends nothing.
Running on your own machine (Claude Code, desktop app and
npx only):
Eval-specific pre-flight refusals (harness eval runs only):
Related
- Computer — Manage your project’s Computer, sandbox images, and lifecycle.
- Playground — The workspace where you select hosts and run turns.

