atmon docs

REFERENCE/API/ROUTER.MD

RouterService

Find the tool for a task by describing the task. You send what the person actually asked for; you get back a short ranked list of the actions that fit, each with a compact argument schema and a flag saying whether that person has connected the app it belongs to. Telling atmon afterwards whether the tool you picked was the right one is what improves the next answer.

Every call is a POST to https://api.atmon.ai/automaton.v1.RouterService/<Call> with a JSON body, and authenticates with Authorization: Bearer <your project key>. Field names in JSON are lowerCamelCase, so the field written tool_slug below is toolSlug on the wire. How to call the API has the whole convention.

Calls

CallRequestResponseSummary
ResolveToolsResolveToolsRequestResolveToolsResponseResolves an intent to a small ranked slate of tools with schemas compacted for a model, and returns the resolution_id that identifies the decision.
ReportOutcomeReportOutcomeRequestReportOutcomeResponseReports what happened under a resolution, which is what ranking learns from.

ResolveTools

Resolves an intent to a small ranked slate of tools with schemas compacted for a model, and returns the resolution_id that identifies the decision. This is what the MCP search_tools meta-tool answers with. Tools the project's entity visibility hides never reach the slate, and by default neither do tools of toolkits the entity has not connected (include_unconnected).

Request ResolveToolsRequest, response ResolveToolsResponse.

POST /automaton.v1.RouterService/ResolveTools HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "entityId": "...",
  "intent": "...",
  "contextMessages": ["..."],
  "toolkitFilter": ["..."],
  "maxTools": 0,
  "includeUnconnected": true
}

The response:

{
  "matches": [{
    "toolSlug": "...",
    "score": 0.0,
    "compactInputSchemaJson": "{}",
    "connected": true
  }],
  "resolutionId": "...",
  "connectionScoped": true
}

ReportOutcome

Reports what happened under a resolution, which is what ranking learns from. Two limits bound it: the named call must have run one of that resolution's own matches, and a resolution is reportable exactly once, claimed atomically so the first report wins.

Request ReportOutcomeRequest, response ReportOutcomeResponse.

POST /automaton.v1.RouterService/ReportOutcome HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "resolutionId": "...",
  "toolCallId": "...",
  "outcome": "OUTCOME_SUCCESS",
  "detail": "..."
}

The response:

{}

Messages

ReportOutcomeRequest

FieldType#Notes
resolution_idstring1
tool_call_idstring2empty when no call was made
outcomeOutcome3
detailstring4

ReportOutcomeResponse

No fields. The call takes its scope from the authenticated project.

ResolveToolsRequest

FieldType#Notes
entity_idstring1
intentstring2natural-language statement of what the agent needs
context_messagesrepeated string3recent turns, most recent last
toolkit_filterrepeated string4empty means the request's whole search scope
max_toolsint325
include_unconnectedbool6Search the whole catalog instead of the entity's connected surface. By default a resolve searches the toolkits this entity has an active connection for, plus the project's own private toolkits, because a tool the entity cannot call is not an answer. Set this to browse what the project could connect next; the matches then carry connected = false. The default does nothing when the entity has connected nothing: an entity with no connections is looking for what to connect, so its resolve searches the whole catalog either way.

ResolveToolsResponse

FieldType#Notes
matchesrepeated ToolMatch1
resolution_idstring2echo in ReportOutcome to close the loop
connection_scopedbool3True when the search was bounded to the entity's connected surface. False means the whole catalog was searched, either because include_unconnected was set or because the entity has connected nothing yet.

ToolMatch

FieldType#Notes
tool_slugstring1
scoredouble2
compact_input_schema_jsonstring3trimmed for this context
connectedbool4entity holds an active connection for its toolkit

Enums

Outcome

Value#Meaning
OUTCOME_UNSPECIFIED0
OUTCOME_SUCCESS1
OUTCOME_EXECUTION_ERROR2right tool, call failed
OUTCOME_WRONG_TOOL3agent had to re-route after seeing the result
OUTCOME_NO_TOOL_FOUND4nothing returned matched the intent