mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-12 03:42:08 +00:00
fix(cron): initialize MCP servers before constructing the cron AIAgent (#21354)
cron/scheduler.py:run_job() constructed AIAgent(...) without ever calling discover_mcp_tools(). The CLI and gateway paths do this at startup; cron jobs inherited none of it and the user's configured mcp_servers were invisible inside every cron run. Insert discover_mcp_tools() right before AIAgent(), wrapped in try/except so a broken MCP server can't kill an otherwise-working cron job. The call is idempotent: register_mcp_servers() short-circuits on already-connected servers, so subsequent ticks in the same scheduler process pay ~0ms. Scoped to the LLM path only; no_agent script jobs skip it entirely. Closes #4219.
This commit is contained in:
parent
4de3ef38b1
commit
04918345ea
2 changed files with 161 additions and 0 deletions
|
|
@ -1323,6 +1323,27 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]:
|
|||
except Exception as e:
|
||||
logger.debug("Job '%s': failed to load credential pool for %s: %s", job_id, runtime_provider, e)
|
||||
|
||||
# Initialize MCP servers so configured mcp_servers are available to
|
||||
# the agent's tool registry before AIAgent is constructed. Without
|
||||
# this, cron jobs never saw any MCP tools — only the gateway / CLI
|
||||
# paths called discover_mcp_tools() at startup. Idempotent: subsequent
|
||||
# ticks short-circuit on already-connected servers inside
|
||||
# register_mcp_servers(). Non-fatal on failure: a broken MCP server
|
||||
# shouldn't kill an otherwise-working cron job. See #4219.
|
||||
try:
|
||||
from tools.mcp_tool import discover_mcp_tools
|
||||
_mcp_tools = discover_mcp_tools()
|
||||
if _mcp_tools:
|
||||
logger.info(
|
||||
"Job '%s': %d MCP tool(s) available",
|
||||
job_id, len(_mcp_tools),
|
||||
)
|
||||
except Exception as _mcp_exc:
|
||||
logger.warning(
|
||||
"Job '%s': MCP initialization failed (non-fatal): %s",
|
||||
job_id, _mcp_exc,
|
||||
)
|
||||
|
||||
agent = AIAgent(
|
||||
model=model,
|
||||
api_key=runtime.get("api_key"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue