Skip to main content
This page is a working reference for the mcps: block. For the conceptual model, see Concepts → MCP servers. Every recipe below uses the registry-resolved form: list the target agents and the scope, and let gaal find the right JSON file. The legacy target: field is deprecated — see the migration recipe at the bottom.

Filesystem server (inline stdio)

Becomes (in ~/.claude.json):

Server with environment variables

${GITHUB_TOKEN} is not expanded by gaal — the literal string ${GITHUB_TOKEN} is written into the JSON. The agent process resolves environment variables when it launches the server. See Environment & secrets.

Install one server in many agents

List the agents in a single entry. gaal fans the entry out to each one’s MCP config file.
Or use the wildcard to install in every agent registered on this machine that exposes a global MCP config:

Native HTTP server

For agents that accept remote MCP entries, write the endpoint directly:

HTTP server with headers

Scalar headers are written as static values. Use env: for secrets; gaal writes the environment variable name for target formats that support env-backed headers.

SSE (HTTP+SSE) server

For servers still on the older HTTP+SSE transport:
If your target agent does not support native remote MCP servers yet, keep using a stdio bridge such as mcp-remote under command and args.

Pull config from a remote URL

When the upstream maintainer publishes the canonical JSON, point at it instead of duplicating the spec.
The remote file must contain an mcpServers object. gaal downloads it and merges the matching entry into each target. source: and inline: are mutually exclusive.

VS Code (Copilot, Cline, Roo)

VS Code-family agents share ~/.vscode/settings.json as their MCP config. Just list them like any other agent — gaal resolves all three to the same file and writes once.
gaal upserts under the mcpServers key while leaving every other VS Code setting in place.

Common targets

The destination file is resolved from the agent registry. For reference: See Agent integrations for the full list.

Removing an entry

Removing an mcps[] entry from gaal.yaml does not remove it from the target file unless you pass --prune. Without --prune, gaal stops managing it but leaves the JSON intact.

Migrating from target:

Earlier versions required an explicit target: path on every entry. That field still works but logs a deprecation warning. Replace each entry with agents: + global::

Concepts: MCP servers

Environment & secrets

Pruning

Schema: mcps