docs: Added example MCP server allowlisting to the example configuration files

This commit is contained in:
2026-08-28 12:06:58 -06:00
parent 1e15bc31d5
commit 772c19f2bd
4 changed files with 272 additions and 224 deletions
+16 -6
View File
@@ -14,7 +14,8 @@
model: openai:gpt-4o # Specify the LLM to use model: openai:gpt-4o # Specify the LLM to use
temperature: null # Set default temperature parameter, range (0, 1) temperature: null # Set default temperature parameter, range (0, 1)
top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model
reasoning_effort: null # Reasoning effort level for models that support it (e.g. low, medium, high). reasoning_effort:
null # Reasoning effort level for models that support it (e.g. low, medium, high).
# Only valid when the agent's model declares reasoning_levels. # Only valid when the agent's model declares reasoning_levels.
agent_session: null # Set a session to use when starting the agent. (e.g. temp, default); defaults to globally set agent_session agent_session: null # Set a session to use when starting the agent. (e.g. temp, default); defaults to globally set agent_session
name: <agent-name> # Name of the agent, used in the UI and logs name: <agent-name> # Name of the agent, used in the UI and logs
@@ -41,7 +42,8 @@ can_spawn_agents: false # Enable the agent to spawn child agents
# Graph agents (graph.yaml) ignore this; they declare spawn targets in agent nodes. # Graph agents (graph.yaml) ignore this; they declare spawn targets in agent nodes.
max_concurrent_agents: 4 # Maximum number of agents that can run simultaneously max_concurrent_agents: 4 # Maximum number of agents that can run simultaneously
max_agent_depth: 3 # Maximum nesting depth for sub-agents (prevents runaway spawning) max_agent_depth: 3 # Maximum nesting depth for sub-agents (prevents runaway spawning)
max_concurrent_jobs: 5 # Max background jobs (`job__*` tools) running at once for this agent max_concurrent_jobs:
5 # Max background jobs (`job__*` tools) running at once for this agent
# (overrides the global setting; 0 disables background jobs for this agent) # (overrides the global setting; 0 disables background jobs for this agent)
inject_spawn_instructions: true # Inject the default agent spawning instructions into the agent's system prompt inject_spawn_instructions: true # Inject the default agent spawning instructions into the agent's system prompt
summarization_model: null # Model to use for summarizing sub-agent output (e.g. 'openai:gpt-4o-mini'); defaults to current model summarization_model: null # Model to use for summarizing sub-agent output (e.g. 'openai:gpt-4o-mini'); defaults to current model
@@ -49,26 +51,34 @@ summarization_threshold: 4000 # Character threshold above which sub-agent out
escalation_timeout: 300 # Seconds a sub-agent waits for a user interaction response before timing out (default: 5 minutes) escalation_timeout: 300 # Seconds a sub-agent waits for a user interaction response before timing out (default: 5 minutes)
mcp_servers: # Optional list of MCP servers that the agent utilizes mcp_servers: # Optional list of MCP servers that the agent utilizes
- github # Corresponds to the name of an MCP server in the `<coyote-config-dir>/mcp.json` file - github # Corresponds to the name of an MCP server in the `<coyote-config-dir>/mcp.json` file
mcp_tools: # Optional per-server tool allowlist for the agent's MCP servers
github: # (glob patterns: * and ?). Intersects with the global config,
- get_* # mcp.json `allowedTools`, and every other configured layer. It
- search_* # can only narrow access, never widen it.
global_tools: # Optional list of additional global tools to enable for the agent; i.e. not tools specific to the agent global_tools: # Optional list of additional global tools to enable for the agent; i.e. not tools specific to the agent
- web_search - web_search
- fs - fs
- python - python
skills_enabled: true # Master switch for skills in this agent (default: inherit from global). skills_enabled:
true # Master switch for skills in this agent (default: inherit from global).
# Skills also require `function_calling_support: true` in the global config. # Skills also require `function_calling_support: true` in the global config.
enabled_skills: # Optional list of skills available when this agent runs. enabled_skills: # Optional list of skills available when this agent runs.
# Must be a subset of global `visible_skills`. Omit to inherit the global default. # Must be a subset of global `visible_skills`. Omit to inherit the global default.
- git-master - git-master
- ai-slop-remover - ai-slop-remover
inject_skill_instructions: true # Inject a short hint pointing the model at `skill__list` when skills are enabled inject_skill_instructions:
true # Inject a short hint pointing the model at `skill__list` when skills are enabled
# (default: true). Suppressed automatically when no skills are available. # (default: true). Suppressed automatically when no skills are available.
skill_instructions: null # Custom text for the skill hint (optional; uses built-in default if null) skill_instructions: null # Custom text for the skill hint (optional; uses built-in default if null)
enabled_macros: # Optional list of macros invocable when this agent is active in the REPL. enabled_macros: # Optional list of macros invocable when this agent is active in the REPL.
- generate-commit-message # An empty list disables all macros. Omit to inherit the role/global default. - generate-commit-message # An empty list disables all macros. Omit to inherit the role/global default.
memory: null # Per-agent memory override (default: inherit). Set to `false` to disable memory memory:
null # Per-agent memory override (default: inherit). Set to `false` to disable memory
# for this agent regardless of workspace/global presence. See the Memory wiki page. # for this agent regardless of workspace/global presence. See the Memory wiki page.
dynamic_instructions: false # Whether to use dynamic instructions for the agent; if false, static instructions are used dynamic_instructions: false # Whether to use dynamic instructions for the agent; if false, static instructions are used
instructions: | # Static instructions for the agent; ignored if dynamic instructions are used instructions:
| # Static instructions for the agent; ignored if dynamic instructions are used
You are a AI agent designed to demonstrate agent capabilities. You are a AI agent designed to demonstrate agent capabilities.
<tools> <tools>
+49 -22
View File
@@ -2,7 +2,8 @@
model: openai:gpt-4o # Specify the LLM to use model: openai:gpt-4o # Specify the LLM to use
temperature: null # Set default temperature parameter (0, 1) temperature: null # Set default temperature parameter (0, 1)
top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model
reasoning_effort: null # Reasoning effort level for models that support it (e.g. low, medium, high). reasoning_effort:
null # Reasoning effort level for models that support it (e.g. low, medium, high).
# Only valid when the active model declares reasoning_levels. See the Clients docs. # Only valid when the active model declares reasoning_levels. See the Clients docs.
# ---- Behavior ---- # ---- Behavior ----
@@ -31,10 +32,8 @@ sync_models_url: > # URL to sync model changes from
# ---- REPL Prompt ---- # ---- REPL Prompt ----
# Custom REPL left/right prompts; see the [REPL Prompt Documentation](https://github.com/Dark-Alex-17/coyote/wiki/REPL-Prompt) for more information # Custom REPL left/right prompts; see the [REPL Prompt Documentation](https://github.com/Dark-Alex-17/coyote/wiki/REPL-Prompt) for more information
left_prompt: left_prompt: '{color.red}{model}){color.green}{?session {?agent {agent}>}{session}{?role /}}{!session {?agent {agent}>}}{role}{?rag @{rag}}{color.cyan}{?session )}{!session >}{color.reset} '
'{color.red}{model}){color.green}{?session {?agent {agent}>}{session}{?role /}}{!session {?agent {agent}>}}{role}{?rag @{rag}}{color.cyan}{?session )}{!session >}{color.reset} ' right_prompt: '{color.cyan}{?reasoning_effort [{reasoning_effort}] }{color.purple}{?session {?consume_tokens {consume_tokens}({consume_percent}%)}{!consume_tokens {consume_tokens}}}{color.reset}'
right_prompt:
'{color.cyan}{?reasoning_effort [{reasoning_effort}] }{color.purple}{?session {?consume_tokens {consume_tokens}({consume_percent}%)}{!consume_tokens {consume_tokens}}}{color.reset}'
# ---- Vault ---- # ---- Vault ----
# See the [Vault documentation](https://github.com/Dark-Alex-17/coyote/wiki/Vault) for more information on the Coyote vault. # See the [Vault documentation](https://github.com/Dark-Alex-17/coyote/wiki/Vault) for more information on the Coyote vault.
@@ -85,7 +84,8 @@ vault_password_file: null # Path to a file containing the password for th
function_calling_support: true # Enables or disables function calling (Globally). function_calling_support: true # Enables or disables function calling (Globally).
mapping_tools: # Alias for a tool or toolset mapping_tools: # Alias for a tool or toolset
fs: 'fs_cat,fs_ls,fs_mkdir,fs_rm,fs_write,fs_read,fs_glob,fs_grep' fs: 'fs_cat,fs_ls,fs_mkdir,fs_rm,fs_write,fs_read,fs_glob,fs_grep'
enabled_tools: null # Which tools to enable by default. enabled_tools:
null # Which tools to enable by default.
# Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything. # Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything.
# Example (list form): # Example (list form):
# enabled_tools: # enabled_tools:
@@ -129,7 +129,8 @@ visible_tools: # Which tools are visible to be compiled (and a
mcp_server_support: true # Enables or disables MCP servers (globally). mcp_server_support: true # Enables or disables MCP servers (globally).
mapping_mcp_servers: # Alias for an MCP server or set of servers mapping_mcp_servers: # Alias for an MCP server or set of servers
git: github,gitmcp git: github,gitmcp
enabled_mcp_servers: null # Which MCP servers to enable by default. enabled_mcp_servers:
null # Which MCP servers to enable by default.
# Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything. # Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything.
# Example (list form): # Example (list form):
# enabled_mcp_servers: # enabled_mcp_servers:
@@ -137,7 +138,21 @@ enabled_mcp_servers: null # Which MCP servers to enable by default.
# - slack # - slack
# Example (comma-separated form): # Example (comma-separated form):
# enabled_mcp_servers: github,slack,ddg-search # enabled_mcp_servers: github,slack,ddg-search
no_workspace_mcp: false # Disable loading workspace-local MCP servers (default: false). mcp_tools:
null # Per-server MCP tool allowlists (glob patterns: * and ? supported).
# Tools that match no pattern are hidden from the model as if they
# don't exist. Stacks with the other allowlist layers (mcp.json
# `allowedTools`, role, agent, session, skill, graph node). Every
# configured layer must allow a tool, so layers only ever narrow.
# An empty list blocks all of a server's tools.
# Example:
# mcp_tools:
# github:
# - get_*
# - list_*
# slack: []
no_workspace_mcp:
false # Disable loading workspace-local MCP servers (default: false).
# When false (the default), Coyote merges the first workspace MCP config it finds # When false (the default), Coyote merges the first workspace MCP config it finds
# into the global MCP registry at startup, checking in order: # into the global MCP registry at startup, checking in order:
# 1. .coyote/mcp.json # 1. .coyote/mcp.json
@@ -149,14 +164,16 @@ no_workspace_mcp: false # Disable loading workspace-local MCP servers (
# ---- Skills ---- # ---- Skills ----
# Skills are modular knowledge or capability packs the LLM can load and unload mid-conversation. # Skills are modular knowledge or capability packs the LLM can load and unload mid-conversation.
# See the [Skills documentation](https://github.com/Dark-Alex-17/coyote/wiki/Skills) for more details. # See the [Skills documentation](https://github.com/Dark-Alex-17/coyote/wiki/Skills) for more details.
skills_enabled: true # Master switch. Set to false to hide all skill management tools from the model. skills_enabled:
true # Master switch. Set to false to hide all skill management tools from the model.
# Skills also require `function_calling_support: true` above to work at all. # Skills also require `function_calling_support: true` above to work at all.
visible_skills: # The universe of skills allowed to be enabled in any context. Omit (null) for "all installed". visible_skills: # The universe of skills allowed to be enabled in any context. Omit (null) for "all installed".
- ai-slop-remover - ai-slop-remover
- code-review - code-review
- frontend-ui-ux - frontend-ui-ux
- git-master - git-master
enabled_skills: null # Which skills are available by default (no role/agent/session active). null = all visible. enabled_skills:
null # Which skills are available by default (no role/agent/session active). null = all visible.
# Accepts either a YAML list or a comma-separated string. # Accepts either a YAML list or a comma-separated string.
# Example (list form): # Example (list form):
# enabled_skills: # enabled_skills:
@@ -164,7 +181,8 @@ enabled_skills: null # Which skills are available by default (no ro
# - ai-slop-remover # - ai-slop-remover
# Example (comma-separated form): # Example (comma-separated form):
# enabled_skills: git-master,ai-slop-remover # enabled_skills: git-master,ai-slop-remover
inject_skill_instructions: true # Inject a short hint pointing the model at `skill__list` when skills are enabled in inject_skill_instructions:
true # Inject a short hint pointing the model at `skill__list` when skills are enabled in
# this context. Only injected if `function_calling_support`, `skills_enabled`, and the # this context. Only injected if `function_calling_support`, `skills_enabled`, and the
# effective enabled skill set is non-empty (default: true). # effective enabled skill set is non-empty (default: true).
skill_instructions: null # Custom text used for the skill hint when injected. If null, uses built-in default. skill_instructions: null # Custom text used for the skill hint when injected. If null, uses built-in default.
@@ -174,7 +192,8 @@ skill_instructions: null # Custom text used for the skill hint when inj
# (a macro file named `review.yaml` runs as `.review [args]`; built-in commands always win a name collision). # (a macro file named `review.yaml` runs as `.review [args]`; built-in commands always win a name collision).
# Workspace-local macros in `.coyote/macros/` shadow same-named global macros (skip them with --no-workspace-macros). # Workspace-local macros in `.coyote/macros/` shadow same-named global macros (skip them with --no-workspace-macros).
# See the [Macros documentation](https://github.com/Dark-Alex-17/coyote/wiki/Macros) for more details. # See the [Macros documentation](https://github.com/Dark-Alex-17/coyote/wiki/Macros) for more details.
enabled_macros: null # Which macros are invocable by default (no role/agent/session active). null = all visible. enabled_macros:
null # Which macros are invocable by default (no role/agent/session active). null = all visible.
# An empty list means NO macros are invocable. Accepts either a YAML list or a # An empty list means NO macros are invocable. Accepts either a YAML list or a
# comma-separated string. Roles, agents, and sessions may define their own # comma-separated string. Roles, agents, and sessions may define their own
# `enabled_macros`; the most specific active one wins (session > agent > role > global). # `enabled_macros`; the most specific active one wins (session > agent > role > global).
@@ -198,9 +217,11 @@ continuation_prompt: null # Custom prompt used when auto-continuing. If
# See the [Session documentation](https://github.com/Dark-Alex-17/coyote/wiki/Sessions) for more information # See the [Session documentation](https://github.com/Dark-Alex-17/coyote/wiki/Sessions) for more information
save_session: null # Controls the persistence of the session. If true, auto save; if false, don't auto-save save; if null, ask the user what to do save_session: null # Controls the persistence of the session. If true, auto save; if false, don't auto-save save; if null, ask the user what to do
compression_threshold: 4000 # Compress the session when the token count reaches or exceeds this threshold compression_threshold: 4000 # Compress the session when the token count reaches or exceeds this threshold
summarization_prompt: > # The text prompt used for creating a concise summary of session message summarization_prompt:
> # The text prompt used for creating a concise summary of session message
'Summarize the discussion briefly in 200 words or less to use as a prompt for future context.' 'Summarize the discussion briefly in 200 words or less to use as a prompt for future context.'
summary_context_prompt: > # The text prompt used for including the summary of the entire session as context to the model summary_context_prompt:
> # The text prompt used for including the summary of the entire session as context to the model
'This is a summary of the chat history as a recap: ' 'This is a summary of the chat history as a recap: '
compression_keep_last: 0 # Number of most-recent messages to keep visible after compression (0 = compress all messages) compression_keep_last: 0 # Number of most-recent messages to keep visible after compression (0 = compress all messages)
max_tool_result_chars: null # Cap on tool result characters forwarded to the model per call (null = no cap) max_tool_result_chars: null # Cap on tool result characters forwarded to the model per call (null = no cap)
@@ -214,9 +235,11 @@ max_concurrent_jobs: 5 # Max background jobs (`job__*` tools) running
# Bootstrap with `coyote --init-memory [global|workspace]` to create the marker file # Bootstrap with `coyote --init-memory [global|workspace]` to create the marker file
# the LLM needs before it will write any memory. # the LLM needs before it will write any memory.
memory: null # null = enabled when memory exists on disk; true = force on; false = force off memory: null # null = enabled when memory exists on disk; true = force on; false = force off
memory_cap_with_tools: null # Char cap for injected memory when function calling is available (default: 6000). memory_cap_with_tools:
null # Char cap for injected memory when function calling is available (default: 6000).
# Only MEMORY.md indexes are injected; the LLM uses memory__read to fetch drill files. # Only MEMORY.md indexes are injected; the LLM uses memory__read to fetch drill files.
memory_cap_without_tools: null # Char cap when function calling is unavailable (default: 12000). memory_cap_without_tools:
null # Char cap when function calling is unavailable (default: 12000).
# Indexes plus drill file bodies are injected up to this cap. # Indexes plus drill file bodies are injected up to this cap.
# ---- Workspace Instructions ---- # ---- Workspace Instructions ----
@@ -226,7 +249,8 @@ memory_cap_without_tools: null # Char cap when function calling is unavailable
# Disable per-invocation with --no-workspace-instructions, or override the chain with # Disable per-invocation with --no-workspace-instructions, or override the chain with
# repeatable --workspace-instructions-file flags. # repeatable --workspace-instructions-file flags.
workspace_instructions: null # null/true = inject when an instructions file exists; false = never inject workspace_instructions: null # null/true = inject when an instructions file exists; false = never inject
workspace_instructions_files: null # File name chain to search, in priority order. workspace_instructions_files:
null # File name chain to search, in priority order.
# Default: [COYOTE.md, AGENTS.md, CLAUDE.md, GEMINI.md] # Default: [COYOTE.md, AGENTS.md, CLAUDE.md, GEMINI.md]
# Set to a custom list to reorder or drop fallbacks, e.g.: # Set to a custom list to reorder or drop fallbacks, e.g.:
# workspace_instructions_files: [COYOTE.md] # workspace_instructions_files: [COYOTE.md]
@@ -277,7 +301,8 @@ document_loaders:
# (see https://pandoc.org for details on how to install pandoc) # (see https://pandoc.org for details on how to install pandoc)
jina: 'curl -fsSL https://r.jina.ai/$1 -H "Authorization: Bearer {{JINA_API_KEY}}' # Use Jina to translate a website into text; jina: 'curl -fsSL https://r.jina.ai/$1 -H "Authorization: Bearer {{JINA_API_KEY}}' # Use Jina to translate a website into text;
# Requires a Jina API key to be added to the Coyote vault # Requires a Jina API key to be added to the Coyote vault
git: > # Use yek to load a git repository into the knowledgebase (https://github.com/bodo-run/yek) git:
> # Use yek to load a git repository into the knowledgebase (https://github.com/bodo-run/yek)
sh -c "yek $1 --json | jq 'map({ path: .filename, contents: .content })'" sh -c "yek $1 --json | jq 'map({ path: .filename, contents: .content })'"
# ---- Clients ---- # ---- Clients ----
@@ -339,7 +364,8 @@ clients:
- type: gemini - type: gemini
api_base: https://generativelanguage.googleapis.com/v1beta api_base: https://generativelanguage.googleapis.com/v1beta
api_key: '{{GEMINI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault api_key: '{{GEMINI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
auth: null # When set to 'oauth', Coyote will use OAuth instead of an API key auth:
null # When set to 'oauth', Coyote will use OAuth instead of an API key
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL # Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
patch: patch:
chat_completions: chat_completions:
@@ -359,7 +385,8 @@ clients:
- type: claude - type: claude
api_base: https://api.anthropic.com/v1 # Optional api_base: https://api.anthropic.com/v1 # Optional
api_key: '{{ANTHROPIC_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault api_key: '{{ANTHROPIC_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
auth: null # When set to 'oauth', Coyote will use OAuth instead of an API key auth:
null # When set to 'oauth', Coyote will use OAuth instead of an API key
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL # Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
# See https://docs.mistral.ai/ # See https://docs.mistral.ai/
@@ -373,7 +400,8 @@ clients:
name: xai name: xai
api_base: https://api.x.ai/v1 api_base: https://api.x.ai/v1
api_key: '{{XAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault api_key: '{{XAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
auth: null # When set to 'oauth', Coyote will use OAuth instead of an API key auth:
null # When set to 'oauth', Coyote will use OAuth instead of an API key
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL # Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
# Note: Oauth requires SuperGrok/X Premium+ subscription # Note: Oauth requires SuperGrok/X Premium+ subscription
@@ -529,7 +557,6 @@ clients:
api_base: https://api.deepinfra.com/v1/openai api_base: https://api.deepinfra.com/v1/openai
api_key: '{{DEEPINFRA_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault api_key: '{{DEEPINFRA_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
# ----- RAG dedicated ----- # ----- RAG dedicated -----
# See https://jina.ai # See https://jina.ai
+4
View File
@@ -16,6 +16,10 @@ enabled_tools: # Tools to enable for this role. Accepts a
enabled_mcp_servers: # MCP servers to enable for this role. Accepts a YAML list (preferred) enabled_mcp_servers: # MCP servers to enable for this role. Accepts a YAML list (preferred)
- github # or a comma-separated string (e.g. `enabled_mcp_servers: github,gitmcp`). - github # or a comma-separated string (e.g. `enabled_mcp_servers: github,gitmcp`).
- gitmcp # Use `all` to enable every configured MCP server. - gitmcp # Use `all` to enable every configured MCP server.
mcp_tools: # Per-server MCP tool allowlists for this role (globs: * and ?).
github: # Intersects with the global config / mcp.json `allowedTools`.
- get_* # Layers only narrow. Tools matching no pattern are hidden from
- search_* # the model as if they don't exist.
skills_enabled: true # Master switch for skills in this role (default: inherit from global). skills_enabled: true # Master switch for skills in this role (default: inherit from global).
# Skills also require `function_calling_support: true` in the global config. # Skills also require `function_calling_support: true` in the global config.
enabled_skills: # Skills available when this role is active. Accepts a YAML list (preferred) enabled_skills: # Skills available when this role is active. Accepts a YAML list (preferred)
+7
View File
@@ -51,6 +51,10 @@ global_tools: # Tool universe an `llm` node's `tools:` whit
mcp_servers: # MCP servers an `llm` node may reference via `mcp:<server>` mcp_servers: # MCP servers an `llm` node may reference via `mcp:<server>`
- ddg-search - ddg-search
mcp_tools: # Optional per-server tool allowlists (globs: * and ?) applied to
ddg-search: # every node that uses `mcp:<server>`; intersects with the other
- search # allowlist layers (global config, agent, mcp.json `allowedTools`).
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Skills policy (optional) # Skills policy (optional)
# Skills only attach to `llm` nodes inside a graph. Both fields are optional. # Skills only attach to `llm` nodes inside a graph. Both fields are optional.
@@ -402,6 +406,9 @@ nodes:
tools: # Narrow whitelist: exactly these entries, nothing else tools: # Narrow whitelist: exactly these entries, nothing else
- web_search_coyote # an exact global-tool / custom-tool name - web_search_coyote # an exact global-tool / custom-tool name
- mcp:ddg-search # `mcp:<server>` includes that server's functions - mcp:ddg-search # `mcp:<server>` includes that server's functions
mcp_tools: # Optional per-node narrowing of MCP tools (globs: * and ?)
ddg-search: # keys must be servers this graph enables; intersects with
- search # the graph-level mcp_tools above and every other layer
model: claude:claude-haiku-4-5 # Optional per-node model override model: claude:claude-haiku-4-5 # Optional per-node model override
temperature: 0.3 # Optional per-node sampling override temperature: 0.3 # Optional per-node sampling override
reasoning_effort: null # Optional per-node reasoning effort override (e.g. low, medium, high) reasoning_effort: null # Optional per-node reasoning effort override (e.g. low, medium, high)