hermes-mcp
Controls a Hermes agent deployment over its HTTP API, providing tools for lifecycle management (health, status, start, stop, restart), diagnostics (logs, metrics, API description, route detection), task management (send, get, list, cancel), deployment and configuration (deploy, get/set config), and a raw request escape hatch.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hermes-mcpcheck the agent's health status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hermes-mcp
An MCP server for controlling a Hermes agent deployment over its HTTP API — from Claude Code, Claude Desktop, or any other MCP client.
It exposes the four things you actually do to a running agent: check on it, read its logs, give it work, and deploy or reconfigure it.
Status
The tool surface, transport, auth, and error handling are complete and tested.
The endpoint paths are conventional defaults and have not been verified
against a live Hermes deployment. You should not have to fix them by hand —
run hermes-mcp doctor and it will work out the real ones and print the
overrides to paste. See Pointing it at your deployment.
Related MCP server: hcom-mcp
Install
Requires Python 3.10+ and uv.
git clone git@github.com:Stratfiy/hermes-mcp.git
cd hermes-mcp
uv syncConfigure
Only HERMES_BASE_URL is required.
Variable | Default | What it does |
| — | Required. Root URL of the deployment, e.g. |
| — | Credential. Setting it alone turns on bearer auth. |
|
|
|
|
| Header (or query parameter) name when style is |
| — | Static headers, |
|
| Per-request timeout in seconds. |
|
| Set false only for a self-signed staging host. |
|
| Blocks every tool that changes the deployment. |
|
| Truncation ceiling, so a log dump can't swamp the context window. |
|
|
|
| — | JSON file of route overrides. |
| — | Override one route, e.g. |
Pointing it at your deployment
Set the URL and credential, then let it work the rest out:
export HERMES_BASE_URL=https://hermes.example.com
export HERMES_API_KEY=your-token
uv run hermes-mcp doctordoctor checks the host is reachable, checks your credentials are accepted,
reads the deployment's OpenAPI schema, and compares every route it intends to
call against what the deployment actually publishes. Output looks like:
Route check
-----------
[ ok ] Matched against the deployment's OpenAPI schema.
[ warn ] not found: deploy, metrics, start, stop
Add these to your MCP server config:
HERMES_ROUTE_STATUS="GET /api/v1/state"
HERMES_ROUTE_TASK_CREATE="POST /api/v1/jobs"
HERMES_ROUTE_TASK_GET="GET /api/v1/jobs/{task_id}"
...Paste those in and every tool works against your paths. The same thing is
available as the detect_routes tool once the server is registered, and
describe_api reports it as part of a wider picture.
If the deployment publishes no schema, detect_routes falls back to probing
candidate paths — using GET only. Discovering POST /stop by calling it
would mean stopping your agent to learn that stopping it works, so mutating
routes are never probed and must be set by hand.
Register with Claude Code
User scope, so it is available in every project:
claude mcp add --scope user hermes \
--env HERMES_BASE_URL=https://hermes.example.com \
--env HERMES_API_KEY=your-token \
-- uv run --directory /absolute/path/to/hermes-mcp hermes-mcp
claude mcp list # verifyTo start read-only while you confirm the routes are right, add
--env HERMES_READ_ONLY=1.
Tools
Lifecycle — health, status, start, stop, restart
Diagnostics — logs (filter by lines, level, since, search),
metrics, describe_api, detect_routes
Work — send_task, get_task, list_tasks, cancel_task
Deploy and config — deploy, get_config, set_config
Escape hatch — request, for any endpoint the named tools don't model
stop, restart, cancel_task, deploy, and set_config are annotated
destructive, so clients that surface that hint will ask before running them.
The route table
Prefer hermes-mcp doctor over editing this by hand. The defaults assume
conventional REST paths:
GET /health GET /logs POST /tasks
GET /status GET /metrics GET /tasks
POST /start POST /deploy GET /tasks/{task_id}
POST /stop GET /config POST /tasks/{task_id}/cancel
POST /restart PATCH /config GET /openapi.jsonWhen your deployment disagrees, override the route rather than editing code. One at a time:
export HERMES_ROUTE_TASK_CREATE="POST /agent/jobs"
export HERMES_ROUTE_STATUS="GET /v1/state"Or all at once, with HERMES_ROUTES_FILE=routes.json:
{
"status": "GET /v1/state",
"logs": "GET /v1/logs",
"task_create": "POST /agent/jobs",
"task_get": "GET /agent/jobs/{task_id}"
}A 404 from a tool says so explicitly and points back here.
Development
uv run pytest # tests
uv run ruff check . # lint
uv run ruff format . # formatNo test touches the network — HTTP is mocked with respx. CI runs the same
three commands on Python 3.10 and 3.12.
CLI
hermes-mcp # run the MCP server over stdio (what a client invokes)
hermes-mcp doctor # check the deployment and print what it foundAvailable Tools
17 toolscancel_taskADestructive
Cancel a running Hermes task.
Whatever the task had already done externally is not undone — this stops further work, it does not roll back.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive, but the description adds critical nuance: 'Whatever the task had already done externally is not undone.' This explains the non-rollback nature beyond the mere destructive hint, and clarifies that it only stops further work on a running task.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the main action in the first sentence and the critical caveat in the second. It is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description is sufficiently complete: it identifies the target (running task), the action (cancel), and the key side effect (no rollback). It doesn't address error handling, but that's not needed given the low complexity and existing annotations/output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for task_id (0% coverage), yet the description doesn't explicitly mention it either. The implication is clear ('a running Hermes task' corresponds to task_id), but for such a low schema coverage, the description should compensate by defining the parameter more explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Cancel a running Hermes task.' This is a specific verb-resource combination that distinguishes it from read-only siblings like get_task and list_tasks. The additional detail about not rolling back further clarifies its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly compare this tool to alternatives such as stop or restart. It provides context about the tool's effect ('stops further work, it does not roll back') but no explicit when-to-use vs. alternatives, leaving usage somewhat implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployADestructive
Deploy Hermes on the host — pull new code and bring it up.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git ref to deploy (branch, tag, or commit). Omit to deploy whatever the deployment treats as current. | |
| restart_after | No | Ask the deployment to restart the agent once the new code is in place. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag the tool as destructive and non-read-only. The description adds that it pulls new code and brings the service up, which is useful context, but it does not disclose potential side effects like downtime or rollback behavior beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with a dash providing clarity. It is front-loaded with the verb and resource, with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter deploy tool with output schema and annotations, the description is largely sufficient. It covers the primary action and scoping, though it could mention the default restart behavior or prerequisites for extra completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters described in detail. The description adds little beyond the schema, only implying the use of 'ref' via 'new code' and 'restart_after' via 'bring it up,' so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Deploy Hermes on the host' and specifies the mechanism 'pull new code and bring it up.' This distinguishes it from sibling tools like start/stop/restart by emphasizing code deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than explicit. The phrase 'pull new code' suggests using this when updating to a new ref, but it does not state when to prefer deploy over restart or start, nor does it mention exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_apiARead-onlyIdempotent
Show how this server is configured and which endpoints Hermes actually has.
Returns the active base URL, auth style, and route table, plus the
deployment's own OpenAPI schema when it publishes one. Run this first
against a new deployment: the built-in route paths are conventional
defaults, and any that do not match can be corrected with
HERMES_ROUTE_<NAME> or HERMES_ROUTES_FILE rather than a code change.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds valuable context: it returns base URL, auth style, route table, and OpenAPI schema only if the deployment publishes one, and it notes that route mismatches can be fixed via configuration. This enriches the agent's understanding of behavior beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose, and every sentence adds value: what it does, what it returns, and when/how to use it. There is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no parameters and an output schema exists, the description is remarkably complete. It explains the tool's purpose, the content of its return value (including the conditional OpenAPI schema), and provides deployment-specific guidance for fixing route mismatches. This exceeds the minimum needed for a 0-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the input schema fully documents the absence of arguments, and schema coverage is 100%. The baseline for 0 parameters is 4, and the description appropriately does not need to elaborate on parameter meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to show server configuration and actual Hermes endpoints. It uses a specific verb ('Show') and resource ('how this server is configured and which endpoints Hermes actually has'), and it distinguishes itself from siblings by focusing on discovering actual routes and OpenAPI schema, not just static status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance to 'Run this first against a new deployment', and explains that built-in route paths are conventional defaults that may need correction via environment variables. However, it does not explicitly name alternative tools (e.g., detect_routes) or state when not to use this tool, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_routesBRead-onlyIdempotent
Work out this deployment's real endpoints and emit the overrides for them.
| Name | Required | Description | Default |
|---|---|---|---|
| probe | No | When the deployment publishes no OpenAPI schema, fall back to GETting candidate paths to find the read-only endpoints. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the behavioral nuance of discovering endpoints rather than just listing predefined ones. It does not explain what 'overrides' are or how they are emitted, but the output schema may cover return values. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, highly concise and easy to parse. However, the phrasing 'Work out' is informal and could be more precise (e.g., 'Discover'). Non-essential words are absent, but the brevity risks sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, an output schema, and strong annotations, the description needs to clarify the tool's purpose and any domain-specific terms. It does not explain what 'overrides' refers to, and the exact output format is delegated to the output schema. The description is sufficient for a simple tool but leaves significant context on the table.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the only parameter 'probe' with a clear explanation of its fallback behavior, resulting in 100% schema description coverage. The tool description itself adds no additional parameter context, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description indicates the tool's function: determine the deployment's actual endpoints and emit overrides for them. It distinguishes itself from siblings like describe_api (which likely describes the API) by focusing on 'real' endpoints. However, 'work out' is informal and 'overrides' is not explained, making it slightly less crisp than ideal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance is provided. The description does not state when to prefer this tool over alternatives like describe_api or request, nor does it mention any prerequisites or exclusion criteria. The parameter schema hints at fallback behavior, but the overall when-to-use context is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configARead-onlyIdempotent
Read the Hermes deployment's current configuration.
Values the deployment considers secret are usually returned masked. Do not assume anything here is safe to echo back into a shared channel.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and destructiveHint, but the description adds crucial behavioral context: secret values are masked and users shouldn't echo them into shared channels. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The purpose and a critical safety warning are delivered efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with no parameters and a rich output schema (documented elsewhere). Annotations cover safety profile; description adds masking behavior. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no parameters, so baseline for 0 params is 4. The description appropriately says nothing about parameters, and there are none to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the Hermes deployment's configuration. The verb 'Read' and resource 'configuration' are specific and distinguish it from siblings like get_task or set_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this when you need the current configuration. It does not explicitly exclude alternatives, but its purpose is self-evident. However, it lacks explicit when-not-to-use guidance compared to the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskARead-onlyIdempotent
Read one Hermes task: its state, result, and any error it recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value by specifying the returned content (state, result, error), which is not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the verb and resource, containing no redundant words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, one action), an output schema exists so return values need not be described, and annotations cover safety. The description fully covers what the tool does and what it reads.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'task_id' with no description, and schema description coverage is 0%. The description mentions 'one Hermes task' but does not explicitly state that task_id identifies the task or provide format details. The parameter name is self-explanatory but the description adds minimal semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Read' and identifies the resource 'one Hermes task' plus the exact data returned (state, result, error). This clearly distinguishes it from siblings like list_tasks and cancel_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need details of a single task, but does not explicitly state 'use this instead of list_tasks' or mention when not to use it. Still, the context is clear enough for a simple read tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthARead-onlyIdempotent
Check whether the Hermes deployment is reachable and healthy.
Use this first when something looks wrong — it separates "the agent is down" from "the agent is up but misbehaving".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds valuable behavioral context about the diagnostic purpose—distinguishing reachability from health—which goes beyond the annotations and helps the agent interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and immediately followed by usage guidance. Every word earns its place; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only health check with annotations and an output schema, the description is complete. It tells the agent what the tool does and when to use it, and the output schema covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to document. Baseline 4 applies, and the description appropriately says nothing about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: checking whether the Hermes deployment is reachable and healthy. It uses a specific verb 'Check' and a resource, and the added context about separating 'down' from 'up but misbehaving' distinguishes it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Use this first when something looks wrong' explicitly tells the agent when to invoke this tool, and the explanation of what it separates provides useful diagnostic context. However, it does not explicitly name alternative tools for follow-up, so it stops short of full when/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksARead-onlyIdempotent
List recent Hermes tasks, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many tasks to return (1-100). | |
| state | No | Filter by task state, e.g. "running", "failed", "completed". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds behavioral details: it returns tasks 'newest first' and only 'recent' ones. However, it does not describe pagination or the output structure beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence, no redundancy, gets straight to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple list tool with well-documented parameters, output schema, and safety annotations. The description covers the essential purpose and ordering behavior. 'Recent' is slightly vague but acceptable given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover both parameters (limit and state) with defaults and examples, so the description adds no additional parameter meaning. Baseline 3 applies for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Hermes tasks with a specific ordering ('newest first'), distinguishing it from sibling get_task which retrieves a single task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a list of recent tasks is needed, but does not explicitly contrast with alternatives like get_task or cancel_task. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logsARead-onlyIdempotent
Read recent Hermes logs.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Minimum severity to include, e.g. "error" or "warning". | |
| lines | No | How many trailing log lines to return (1-2000). | |
| since | No | Only logs after this point — an ISO-8601 timestamp or a deployment-supported shorthand such as "15m" or "2h". | |
| search | No | Only lines containing this substring. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description consistently says 'Read' and adds the 'recent' scoping, but it does not disclose additional behavior like return format or pagination beyond what the schema and output schema imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, 'Read recent Hermes logs.', which directly states the purpose without any filler. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite its brevity, the description is sufficient because the tool is simple, the schema covers all parameters, there is an output schema, and annotations provide safety context. No critical information appears missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all four parameters (level, lines, since, search), giving 100% coverage. The description itself adds no parameter-specific details, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' and clearly identifies the resource as 'Hermes logs', making the tool's purpose unambiguous. It distinguishes itself from sibling tools by focusing on logs, which no other sibling appears to handle directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it list any exclusions. Usage is implied by the tool's name and filtering parameters, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metricsARead-onlyIdempotent
Read resource and throughput metrics from the Hermes deployment.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the behavioral detail that the tool returns resource and throughput metrics, but does not describe output format or any rate limits, which is acceptable given the strong annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the verb and resource, no fluff. It earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters, an output schema, and strong annotations, the description is sufficient. It could have added a note about scope (e.g., whole deployment) but the current wording is adequate and complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics since there are none, and the schema is fully complete with additionalProperties=false.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it reads resource and throughput metrics from the Hermes deployment, using the specific verb 'read' and specifying the resource scope. While it doesn't explicitly differentiate from siblings like health or status, the metric focus is reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is to fetch metrics, but there is no explicit guidance on when to use this tool instead of health, status, or logs. The description gives enough context that an agent could infer usage, but lacks direct alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requestA
Call any Hermes endpoint directly, for anything the named tools miss.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body. | |
| path | Yes | Path on the Hermes base URL, starting with "/". | |
| query | No | Query-string parameters. | |
| method | Yes | HTTP method, e.g. "GET" or "POST". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, providing the safety profile. The description adds the context that it's a direct call to any endpoint, but it doesn't disclose additional behaviors like authentication requirements or error handling. Since annotations carry the burden, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no redundancy. It front-loads the action and purpose, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic request tool with a complete schema and output schema, the description sufficiently explains its role as a fallback. It lacks details on authentication or failure modes, but the openWorldHint and sibling context cover the selection decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for method, path, query, and body. The description adds no further parameter semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Call') and resource ('any Hermes endpoint'), and explicitly frames the tool as a fallback for endpoints the named tools miss, which distinguishes it from the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for anything the named tools miss' explicitly tells the agent when to use this tool instead of the named sibling tools. It doesn't enumerate specific exclusions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restartADestructive
Restart the Hermes agent.
Use this after a deploy or a config change that needs a fresh process. Causes a brief outage; in-flight work may be dropped.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds concrete behavioral context beyond annotations: 'Causes a brief outage; in-flight work may be dropped.' This complements the destructiveHint true annotation and communicates real impact to the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each serving a distinct purpose: action, when to use, and side effects. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool with an output schema and annotations, the description fully covers purpose, appropriate timing, and consequences. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not explain any. Baseline for no parameters is 4, and no further parameter information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Restart the Hermes agent' – a specific verb and resource. Distinguishes from sibling tools like start/stop by naming the restart action and the process context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this after a deploy or a config change that needs a fresh process' – providing clear contextual guidance. It does not name explicit alternatives or exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_taskB
Send the Hermes agent a task to work on.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Ask the deployment to hold the response until the task finishes. Only useful for short tasks; long ones will hit HERMES_TIMEOUT. Leave false and poll `get_task` instead. | |
| prompt | Yes | The instruction for the agent, in plain language. | |
| metadata | No | Optional deployment-specific fields sent alongside the prompt — conversation id, channel, priority, and so on. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, idempotentHint false), the description reveals no additional behavioral details such as asynchronous execution, queuing, or timeout behavior. The schema hints at these via the wait parameter, but the description text adds nothing beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and target without extraneous words. It is appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema provides solid parameter documentation, but the description lacks broader context about where this fits in the task lifecycle. With 15 sibling tools, a brief note on when to send a task versus other operations would make the description more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (prompt, wait, metadata) documented. The description itself contributes no parameter-level meaning, so it relies on the schema. A baseline of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send') and the target ('the Hermes agent a task'), making the tool's purpose unambiguous. It does not explicitly distinguish from the sibling 'request' tool, but the resource and verb are specific enough to convey the core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings like get_task or cancel_task. The input schema mentions polling get_task for long tasks, but that context is not present in the description itself, leaving the agent without usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_configCDestructive
Update Hermes configuration values.
| Name | Required | Description | Default |
|---|---|---|---|
| values | Yes | The keys to change, as a flat mapping. Only the keys you pass are touched; the rest are left alone. | |
| restart_after | No | Ask the deployment to restart so the change takes effect. Many settings are only read at startup. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add behavioral context beyond the annotations. Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description does not explain implications such as persistence or the need for a restart. It largely restates the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and easy to scan, though it is somewhat terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and comprehensive parameter descriptions, the tool is a mutating configuration operation. The description omits critical context such as whether changes are permanent, when they take effect, or any warnings about destructive behavior. It is too minimal for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (100% coverage). The description itself adds no parameter-specific meaning, so it relies on the schema, which is sufficient. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Update') and a resource ('Hermes configuration values'). It differentiates from the sibling 'get_config' (read vs. write) but is less specific about the scope of configuration changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool compared to alternatives like 'deploy' or 'restart'. The description simply states the action without any context on prerequisites, timing, or when to prefer it over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startA
Start the Hermes agent.
Safe to call when the agent is already running — most deployments treat it
as a no-op — but check status first if you are unsure.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false), the description adds that it is a no-op in most deployments when already running, which is useful behavioral context. It does not contradict annotations; the idempotentHint=false is not violated by noting this deployment-specific behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences. The first states the exact purpose, and the second adds valuable safety guidance without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema and existing annotations, the description covers the essential context: what it does, safety around idempotency, and a helpful pointer to `status` when uncertain. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the description need not explain parameter semantics. The schema coverage is 100% with no properties, and the baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Start the Hermes agent' with a specific verb and resource. It implicitly differentiates from sibling tools like stop, restart, and status by focusing on the start action, and further clarifies its behavior when already running.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: it is safe to call when already running, most deployments treat it as a no-op, and advises checking `status` first if unsure. This tells the agent when to use the tool and when to check an alternative tool first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusARead-onlyIdempotent
Read the Hermes agent's current run state.
Returns whatever the deployment reports: process state, uptime, version,
queue depth. Prefer this over start when you only need to know if the
agent is already running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is already established. The description adds context by specifying what it returns (process state, uptime, version, queue depth) and noting that output is 'whatever the deployment reports,' which aligns with the openWorldHint. It does not contradict annotations and provides useful behavioral details beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every sentence adds value: the first states the action and resource, the second explains return values and provides usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool with no parameters, a rich set of annotations (readOnly, idempotent, non-destructive, openWorld), and an output schema present. The description fully covers what the tool does, what it returns, and when to use it over a sibling, making it complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100%, so there is no parameter burden for the description to carry. The baseline of 4 is appropriate because the description adds no parameter information (none needed) and the schema is already complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('the Hermes agent's current run state'), and explicitly contrasts itself with the sibling tool `start`, saying to prefer this when you only need to know if the agent is already running. This distinguishes it clearly from at least one sibling and provides a specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Prefer this over `start` when you only need to know if the agent is already running.' This states a clear condition for using this tool over a specific alternative, which satisfies the 'explicit when/alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopADestructive
Stop the Hermes agent.
This takes the agent offline: in-flight work may be dropped and the agent will not accept new tasks until it is started again. Confirm with the user before calling this against a production deployment.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds valuable behavioral context: 'in-flight work may be dropped' and 'will not accept new tasks until it is started again.' This goes beyond the annotation to explain consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the action, the second explains consequences and a usage caution. Every sentence earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple no-parameter tool with annotations and an output schema, the description fully covers purpose, behavioral impact, and usage caution. It is complete and well-suited for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema carries no semantic load. The baseline for 0 params is 4, and the description does not need to add parameter detail. No additional meaning required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Stop the Hermes agent.' It clearly conveys the action and scope, distinguishing it from siblings like 'start' and 'restart' by explicitly stating it takes the agent offline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use (to stop the agent) and a specific caution ('Confirm with the user before calling this against a production deployment'). Does not explicitly name alternatives, but the context is sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
cancel_task - First observed
deploy - First observed
describe_api - First observed
detect_routes - First observed
get_config - First observed
get_task - First observed
health - First observed
list_tasks - First observed
logs - First observed
metrics - First observed
request - First observed
restart - First observed
send_task - First observed
set_config - First observed
start - First observed
status - First observed
stop
TDQS
Scored across 17 tools
Most tools target distinct resources and actions, but health/status and describe_api/detect_routes have overlapping purposes; descriptions generally mitigate confusion.
Mix of single-word nouns (health, status, logs, metrics) and verb_noun forms (get_task, send_task, set_config); the pattern is readable but not consistently applied.
At 17 tools, the set sits at the borderline upper end of typical scope; some redundancy (health/status, describe_api/detect_routes) adds bulk, but each tool has a clear role.
The surface covers lifecycle, monitoring, task management, configuration, and API introspection, with a request fallback for gaps; minor redundancy but no major missing operations.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
MCP server for Appcircle mobile CI/CD platform.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that allows Claude Desktop and other MCP clients to delegate tasks to a local Hermes Agent for automation and persistent operations.35 PyPI61Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA control-plane MCP server for launching and supervising hcom-managed agents, running as a single persistent HTTP server to coordinate multiple sessions.1MIT
- AlicenseCqualityDmaintenanceMCP sidecar for Hermes Agent exposing operator tools (cron, skills, config, workspace) with tiered read-only/operator/owner modes and dry-run by default for safe local development.431MIT
- FlicenseAqualityCmaintenanceMCP server that integrates Conductor Cloud with Hermes Agent, enabling Hermes to create sandboxed coding workspaces, dispatch tasks to developer agents (Claude, Codex, Cursor, ACP), and monitor or retrieve session results via MCP tools.8-