Prerequisites
- Global
adminaccess to create or trust platform MCP servers. - Project
adminorowneraccess to create bindings and overlays. - Secret values available in the supervisor environment.
Three scopes
When no explicit binding exists, resolution follows project, platform, then
package precedence. An enabled binding overrides that precedence. A disabled
binding is an explicit opt-out and makes the logical reference unavailable in
that project.
Keep secret values out of MAIster data
MCP environment and header entries are name and value pairs. A value is one of two things, and nothing in between:- a reference such as
env:GITHUB_TOKEN— MAIster stores only the reference, and the execution host substitutes the value when it starts or connects to the MCP server. SetGITHUB_TOKENin the supervisor service environment on every host that can run the MCP; - a literal such as
FASTMCP_LOG_LEVEL=ERROR— stored and used exactly as written, which is your statement that it is not a secret.
${HOME} reaches the server as those
eight characters.
Use a reference for anything secret. Do not put an API key in flow.yaml, a
package file, a project form, a URL, or an argument. Client-visible snapshots
and logs keep a reference as a reference — the value behind it never appears in
them. A literal is visible to anyone who can read the catalog, so the form warns
you inline when a literal sits under a name that looks like a credential
(*_TOKEN, *_API_KEY, Authorization, …). It is a warning, not a refusal.
For a server that requires bearer authentication, use the bearer token env
field rather than writing an Authorization header yourself: give it an
env:NAME reference and the host composes Authorization: Bearer <value>.
Setting both is refused.
A project overlay changes the value a project uses for a slot the server
declares, and never the name — the name is the server’s own contract. Two
projects can therefore point the same slot at different credentials, or one at a
plain literal such as a different GH_HOST, without cloning the server or
exposing either value.
Register a platform MCP server
- Open MCPs as a global administrator.
- Add the logical ID and supported agent families.
- Select
stdio,sse, orhttpand fill in its command or URL fields.sseis legacy — it was deprecated by the MCP specification, and a Codex runner cannot use it at all. Preferhttp. - Add the environment rows (for
stdio) or header rows (forsse/http), and the bearer token env reference if the server needs one. - Leave the server untrusted until its source and command have been reviewed.
- Trust and enable it.
- Run Test connection and inspect the initialization result and latency.
stdio server is visible but cannot execute or even be probed. A
failed probe records an actionable reason and releases any child process it
started.
Resolve requirements in a project
Open Project → MCPs. The requirements ledger combines attached package requirements, enabled Flow node requirements, and attached platform-agent profiles. Each logical reference is classified as bound, automatically resolved, unbound, misconfigured, or not ready. For every unresolved required reference:- choose a compatible platform, project, or package target;
- connect the binding;
- add a project overlay when the target’s default values do not fit — the overlay replaces a slot’s value and keeps its name;
- test the connection in the project context;
- confirm that the requirement becomes ready.
sse
server on a Codex runner refuses the launch before any workspace is created, and
an additional one is withheld with the reason shown on the Run.