Files
g-world/addons/godot_ai/clients/hermes.gd
T
2026-08-10 20:39:06 +03:00

47 lines
1.9 KiB
GDScript
Vendored

@tool
extends McpClient
func _init() -> void:
id = "hermes"
display_name = "Hermes Agent"
config_type = "yaml"
# Hermes reads MCP config from ~/.hermes/config.yaml (YAML), NOT mcp.json.
# Verified against the official docs:
# https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp
# Windows: Hermes stores config under $LOCALAPPDATA/hermes (NOT $APPDATA,
# which is Roaming) — confirmed by where the running Hermes process reads.
# NOTE: _path_template.expand() only substitutes $VAR tokens, not %VAR%.
path_template = {
"unix": "~/.hermes/config.yaml",
"windows": "$LOCALAPPDATA/hermes/config.yaml"
}
# Hermes uses the snake_case `mcp_servers` key (not `mcpServers`).
# PackedStringArray explicitly, matching every other descriptor — an
# untyped Array literal relies on implicit conversion that newer Godot
# builds enforce more strictly (the #722 CI lesson for Array[String]).
server_key_path = PackedStringArray(["mcp_servers"])
# HTTP entries use `url` (+ optional `headers`); transport is inferred —
# there is no `type` field in Hermes MCP config.
entry_url_field = "url"
# No transport pin: Hermes infers streamable-http from the URL.
entry_extra_fields = {}
entry_initial_fields = {}
## Attach migration (#838). Hermes stdio entries are flat command/args/env
## (hermes-agent.nousresearch.com/docs/user-guide/features/mcp), transport
## inferred exactly like the URL form — which is why `url` and the
## HTTP-only `headers` must not survive next to a command: an entry with
## both picks the wrong transport. `enabled`/`tools`/`env` stay user-owned.
command_shape = McpClient.CommandShape.FLAT
command_legacy_keys = PackedStringArray(["url", "headers"])
command_user_fields = PackedStringArray(["enabled", "tools", "env"])
command_supports_url_fallback = true
# Hermes is "installed" wherever the config.yaml lives; presence of the
# file is sufficient for the dock's installed badge.
detect_paths = PackedStringArray()