Noodle Seed
Guides

Analytics & observability

See how AI clients use your server — volume, sessions, latency percentiles, two-tier errors, per-tool usage — from the CLI and the console.

Every request to a hosted server is captured automatically at the gateway: no SDK, no instrumentation, no code changes. Once traffic flows, the same analytics are readable three ways — the CLI, the console dashboard, and your coding agent.

The two-tier error model

Analytics splits failures the way MCP does:

  • Tool errors (tool_error) — a tool result with isError: true. These are handed back to the model, which usually recovers. Shown in amber.
  • MCP errors (mcp_error) — protocol violations, timeouts, unknown tools, internal faults. These never reach the model and degrade the user experience. Shown in rose; these are the ones that need your attention.

Discovery chatter (tools/list, ping) is excluded from usage numbers, so tool-call counts reflect real intent. Sessions are counted from initialize requests, which also supply the client mix (ChatGPT, Claude, Cursor, and friends).

From the CLI

noodle metrics                 # the report: volume, sessions, errors, latency, tools, clients
noodle metrics --window 24h    # presets: 24h, 7d (default), 30d
noodle events                  # the per-request stream
noodle events --status mcp_error --json
noodle events --session <id>   # replay one session chronologically
noodle events --tail           # follow live

noodle metrics reports latency as percentiles (p50/p95/p99), a token gauge (average token-equivalent each call adds to the model's context — a tool-design health signal), and per-tool health. When a tool's error share is elevated, the report ends with the exact next command to run.

From the console

Open your project in the console and switch to the analytics tab: the same numbers as charts — request volume with error ticks, client and method mix, per-tool bars with health, and the event stream. Click any session id to replay that session in order. Tool names that are not in your manifest are tagged — a useful signal that an AI client is hallucinating tool names worth adding or aliasing.

You can also just ask the console's chat: "how is my server doing?" renders the same metrics as a card, and it will drill into failing tools and sessions for you.

For coding agents

noodle metrics --agent-output

Returns a compact JSON verdict — health (ok or attention), a one-line summary, and attention[] items that each carry the exact next command — so an agent can branch without parsing the full payload. The full payloads are noodle metrics --json and noodle events --json.

Logs vs analytics

Analytics answers what happened to requests; logs answer what your app said while handling them. For logs, see Troubleshootingnoodle logs supports --level, --search, --since, and --until.

Records are scalar-only by construction: no request bodies, headers, tokens, or secret values are ever captured.

Intent insights (private preview)

Intent Capture is an optional environment-level layer for understanding the goal behind a tool call and whether the selected tool appears to be a direct fit, partial fit, workaround, or unknown. It is off by default and available only to admitted design partners during the private preview.

An owner can operate it without changing application code:

noodle intents status
noodle intents enable
noodle intents list --window 7d
noodle intents disable       # stops new capture; retained data remains
noodle intents purge --yes   # permanently deletes retained data and disables capture

When enabled, Noodle adds one optional, described field to served tool schemas. A participating client model may supply a fixed category, match grade, and short paraphrase. Noodle validates and removes that field before your tool's input validation and fulfil run, then writes valid evidence asynchronously to a separate stream with 14-day retention. Prompts, transcripts, headers, raw tool arguments/results, credentials, and identities are not part of this stream.

The Console analytics tab shows capture state, coverage, goal categories, and fit. Treat the results as model-supplied product research: client participation is optional, cached schemas can delay coverage, and a server cannot observe needs that never caused it to be selected. Intent is not a user quote, verified ground truth, or satisfaction signal.

On this page