Documentation

Context & Tools

One CLI-agnostic profile for MCP servers, tool permissions, context directories, and a shared system prompt — translated into each agent's native flags at spawn time.

The problem it solves

Every coding CLI configures MCP servers and tool permissions differently, in its own config file, with its own flag names. Frontier owns a single profile covering all of them. You configure it once in the Context & Tools screen, and Frontier translates it into each CLI's native flags when it spawns the process — so you never hand-edit a claude, copilot, or codex config again.

What the profile contains

  • MCP servers — name, transport, and connection details.
  • Tool allow and deny lists — which tools an agent may call.
  • A shared system prompt — appended for every agent that supports one.
  • Extra context directories — folders outside the working directory the agent may read.
  • A strict-MCP flag — ignore the CLI's own MCP configuration and use only this profile.

Managing MCP servers

Each server row edits one entry: a name, a transport (stdio, http, or sse), and either command, arguments, and environment variables for stdio, or a URL and headers for the remote transports. Import .mcp.json merges a standard { "mcpServers": { … } } document straight in.

Remote servers can authenticate through browser OAuth. Tokens are encrypted with Electron's safeStorage, stay in the main process, refresh automatically, and reach provider processes only through environment-backed header placeholders.

How each CLI receives it

Claude Code

Gets --mcp-config with inline JSON (plus --strict-mcp-config when strict mode is on), --allowedTools / --disallowedTools, --add-dir, and --append-system-prompt. Each enabled MCP server also adds mcp__<server>__* to the allowed tools, because acceptEdits does not approve MCP calls in non-interactive mode.

GitHub Copilot

Gets --additional-mcp-config, --allow-tool= / --deny-tool=, and --add-dir. Copilot has no system-prompt flag, so the shared prompt is folded into the stdin prompt as a prefix. It receives its required tools: ["*"] field, and each enabled server name is added to --allow-tool for headless execution.

Codex and Codex + Ollama

Stdio and Streamable HTTP servers are supplied as per-invocation -c 'mcp_servers.<name>={…}' overrides. The shared system prompt and the MCP session notice go through Codex's native per-invocation developer_instructions, which preserves their developer role instead of folding them into the user prompt. Enabled servers use Codex's per-server default_tools_approval_mode = "approve" so MCP calls work headlessly.

  • Legacy SSE servers are not injected into Codex — the CLI does not support that transport.
  • A server name containing anything outside letters, digits, _, and - gets a stable Codex-only alias, because Codex's dotted override parser cannot address quoted TOML key segments.

Shape of the injected config

Claude and Copilot receive MCP JSON shaped as { "mcpServers": { "<name>": { command, args, env } | { type, url, headers } } }. Codex receives the equivalent TOML tables through CLI config overrides, where headers maps to Codex's http_headers.

Opting a provider out

Every provider card for a Claude, Copilot, or Codex-kind agent has an Apply shared Context & Tools profile toggle. Turn it off and that agent runs with only its own configuration and whatever extra arguments you gave it.