Inspector events
Each event has id, ts (ms), kind, title, and optionally runId, serverId, durationMs, direction (in/out), level (info/warn/error) and data.
| Kind | Emitted when | data |
|---|---|---|
run.start | A chat turn starts | profile, model, tools (names), system (full system prompt) |
llm.request | Each model step begins | model, provider, body (provider request body), warnings |
llm.response | Each model step ends | finishReason, usage, response (id, modelId) |
tool.call | The model (or you, or an app) calls a tool | id, input, rawInput (the arguments as the model streamed them), invalid when they couldn’t be parsed; for MCP tools lineage (id of the first attempt, attempt, fingerprint); duplicateOf when it repeats an earlier call that may write (level warn) |
tool.result | A tool returns | id, output, lineage; possibleDoubleWrite when an earlier attempt’s outcome is unknown (level warn) |
tool.progress | A server reports notifications/progress for a tool call | id (tool call), tool, progress, total, message |
tool.error | A tool throws or returns isError | id, error, errorClass (timeout, cancelled, transport, protocol, tool, declined, input, other), lineage; outcomeUnknown when a tool that may write failed before it could answer |
skill.load | load_skill runs | id |
run.finish | A turn completes | usage totals |
run.error | A turn fails or is stopped | error name, message, HTTP status, response body |
mcp.status | A server connects, fails or disconnects | status, error, serverInfo, tools count |
mcp.rpc | Any JSON-RPC message to/from a server | the raw message |
mcp.unanswered | The connection closed while a request was still open | id, method, waitedMs, reason |
mcp.http | An HTTP request to a remote server fails (4xx/5xx or no response) | method, url, status or error, masked requestHeaders, responseHeaders (e.g. www-authenticate), configured |
resource.updated | A subscribed resource changed (notifications/resources/updated) | uri |
mcp.log | A stdio server writes to stderr, or the client errors | the line |
ui.rpc | An MCP App message crosses the iframe boundary | the raw JSON-RPC (or MCP-UI) message |
ui.action | An A2UI button is pressed | the resolved action |
interaction.request | A tool approval, elicitation or sampling request is waiting for the user | the request, with its id and kind |
interaction.resolved | That request was answered or cancelled | id, kind, outcome, response |
agent.request | Moka sends a turn to a remote agent | A2A JSON-RPC body or AG-UI RunAgentInput |
agent.event | An A2A result or AG-UI event arrives | the raw event; AG-UI RAW events are collapsed into one count/events entry per run |
agent.response | The agent’s turn is done | |
log | Warnings, e.g. a server skipped because it couldn’t connect |
Correlation fields
Section titled “Correlation fields”| Field | On | Meaning |
|---|---|---|
rpc.id / rpc.method | mcp.rpc, mcp.unanswered | The JSON-RPC id and the request’s method |
rpc.pairId | responses, cancellations, mcp.unanswered | Event id of the request they belong to |
rpc.outcome | same | ok, error, cancelled, late (answered after cancellation) or unanswered |
rpc.reason | cancellations | timeout when the client gave up waiting |
rpc.callId | tools/call requests and what answered them | The tool call (tool.call data.id) the message belongs to |
durationMs | responses | Time since the request was sent |
parentId | agent.event | Event id of the AG-UI step (graph node) that emitted it |
Payloads larger than 200 KB (e.g. base64 images) are truncated in the live stream to keep the UI fast.