Type
array[McpEntry]
Required
No. Omitmcps: if you don’t manage any.
Entry fields
name
| Field | Type | Required |
|---|---|---|
name | string | yes |
mcpServers object.
target
| Field | Type | Required |
|---|---|---|
target | string | yes |
~/-prefixed. Common values:
| Agent | Target |
|---|---|
| Claude Desktop | ~/.config/claude/claude_desktop_config.json |
| Cursor | ~/.cursor/mcp.json |
| Codex | ~/.codex/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_settings.json |
| Continue | ~/.continue/config.json |
| VS Code (Copilot, Cline, Roo) | ~/.vscode/settings.json |
source
| Field | Type | Required |
|---|---|---|
source | URL | conditionally |
mcpServers object. gaal downloads the file and merges the entry named name into the target.
Mutually exclusive with inline.
inline
| Field | Type | Required |
|---|---|---|
inline | object | conditionally |
gaal.yaml. Fields:
| Subfield | Type | Required |
|---|---|---|
command | string | yes |
args | array of strings | no |
env | map[string]string | no |
source. Exactly one of source or inline must be set per entry.
Example
Behaviour
- gaal upserts under the
mcpServersobject of the target file. - Other top-level keys in the target file are preserved.
- Other entries inside
mcpServersthat gaal didn’t author are preserved. - Removing an entry from
gaal.yamldoes not remove it from the target unless you pass--prune. - gaal does not expand
${VAR}references inargs:orenv:. The agent process resolves them when launching the server.