fix(acp): admit config MCP servers by platform_toolsets.acp like the gateway

A fresh ACP agent appended mcp-<server> for every enabled config MCP server
unconditionally, so a platform_toolsets.acp allowlist of server names and the
no_mcp sentinel were ignored on ACP while the gateway honoured both.

The MCP half now comes from the same _get_platform_tools(config, "acp") call
as the base toolsets: its server names (default every enabled server, a listed
allowlist, or none for no_mcp) are keyed as mcp-<server>. Editor-provided
session/new servers are unchanged.

Docs: `hermes tools` has no ACP platform entry, so drop the claim that it
configures platform_toolsets.acp; document the MCP rules with a config example.
This commit is contained in:
teknium1
2026-09-23 09:12:55 -07:00
committed by Teknium
parent cccea211a9
commit 316d6fb8f7
4 changed files with 58 additions and 15 deletions

View File

@@ -466,7 +466,7 @@ class SessionManager:
from agent.skill_utils import parse_config_string_list
from hermes_cli.config import load_config
from hermes_cli.runtime_provider import resolve_runtime_provider
from hermes_cli.tools_config import _get_platform_tools
from hermes_cli.tools_config import _get_platform_tools, enabled_mcp_server_names
from hermes_constants import resolve_reasoning_config
config = load_config()
@@ -477,18 +477,16 @@ class SessionManager:
elif isinstance(model_cfg, str):
default_model = model_cfg.strip()
from tools.mcp_tool_common import mcp_server_enabled
configured_mcp_servers = [
name for name, cfg in (config.get("mcp_servers") or {}).items()
if not isinstance(cfg, dict) or mcp_server_enabled(cfg)
]
if enabled_toolsets is None:
# The same per-platform resolver as the gateway/cron/api_server: platform_toolsets.acp wins, else
# hermes-acp; its MCP half (every enabled server, a listed-name allowlist, or none for ``no_mcp``)
# comes back as bare server names, which ACP keys as ``mcp-<server>`` like its session servers.
resolved = _get_platform_tools(config, "acp")
mcp_servers = resolved & enabled_mcp_server_names(config)
enabled_toolsets = _expand_acp_enabled_toolsets(sorted(resolved - mcp_servers), sorted(mcp_servers))
kwargs = {
"platform": "acp", "quiet_mode": True, "session_id": session_id, "session_db": self._get_db(),
# The same per-platform resolver as the gateway/cron/api_server: platform_toolsets.acp wins, else hermes-acp.
"enabled_toolsets": (list(enabled_toolsets) if enabled_toolsets is not None else _expand_acp_enabled_toolsets(
sorted(_get_platform_tools(config, "acp", include_default_mcp_servers=False)),
mcp_server_names=configured_mcp_servers)),
"enabled_toolsets": list(enabled_toolsets),
# agent.disabled_toolsets is subtracted at tool granularity by the agent, as on the CLI/gateway/cron.
"disabled_toolsets": (list(disabled_toolsets) if disabled_toolsets is not None
else parse_config_string_list((config.get("agent") or {}).get("disabled_toolsets")) or None),