Skip to main content
The MCP server exposes eleven read tools. Arguments use camelCase, such as traceId; result fields retain the HTTP API’s spelling, such as trace_id. Successful results contain one MCP text block holding JSON. API failures contain a JSON error object and isError: true. Use Connect an agent for installation and host setup.

Tool index

Shared filters, limits and results

Inputs reject unrecognized keys. Every limit must be a positive integer within the tool’s stated ceiling. team is an optional array of team IDs for scoped discovery and function tools. Omission uses the token’s accessible team set. Requested teams cannot widen access. Unknown teams are dropped with scope_note; if none are accessible, the client skips the query and returns an empty scoped result with that note. For tools with an environment object, use one of these input forms:
Omit environment for no environment filter. vexlo_list_tags differs: its environment input is an array of names, such as {"environment":["staging"]}; it cannot select unset environments. Trace-ID reads take no discovery scope filters; the server still enforces the token’s scope. Page ceilings are bounded by the server’s capabilities as described per tool. Pass a returned next_cursor back as cursor, and stop at null. A positional cursor does not create a stable snapshot of data still receiving records. Returned root status, root name or duration can be absent before completion. A function row’s team can be absent for an effective multi-team query. Treat these omissions as data; do not require every result to have the fields of a completed, single-team example.

Search traces

vexlo_search_traces accepts only optional arguments: The result contains items, applied limit, next_cursor and an applicable scope_note. Use the returned trace_id with vexlo_get_trace. Function-name matching is exact. since and until are inclusive bounds on the server’s first receipt time, not the SDK’s execution start time; see HTTP search.

Check known trace IDs

vexlo_check_trace_status takes traceIds, an array of 1 to 100 IDs, and no search filters. It returns summary items, the applied limit and next_cursor. When requested IDs are absent from the result, not_returned reports them in the caller’s order. The field is omitted when every ID is returned. It does not distinguish nonexistent traces from traces outside the read token’s scope. vexlo_find_related_traces takes required traceId and these optional arguments: The result includes relation, searched_tag_keys, searched window, items, limit and next_cursor. An applicable note warns when an empty result’s anchor trace lies outside the searched window. Shared tags relate recordings; they do not establish that one service called another.

List functions and tags

The maximum list limit is the lower of 200 and server search_limit_max. The default is server search_limit_default, clamped to that ceiling. Both return items, limit, next_cursor and applicable scope information. For function discovery, copy the exact service/name from catalog results. The catalog’s is_entry_point flag requires a service filter and is computed across that service’s environments. Verify scoped entry-point observations through vexlo_get_function; see the HTTP metadata contract. The server applies its function name equality filter after pagination, so an empty filtered page can still have a cursor. Follow it before concluding that no function matches.

Check coverage and health

vexlo_check_coverage and vexlo_check_health accept optional team, environment object and singular service. They take no cursor or list limit. Coverage reports observed services, recording counts, observed function counts and record loss. Health reports server storage, reported loss and recent service activity. These describe the selected scope, not proof that every application path is instrumented or delivered.

Read a trace

vexlo_get_trace takes required traceId and optional: The response contains trace metadata, steps, limit, next_cursor, completeness and recording-quality information. Each completed attempt can include input/output/error/log previews. Retrieve full values with vexlo_get_values. steps is one page of at most 500. Follow cursors to null, count distinct paths against the newest step_count, and restart without a cursor while they disagree. A trace still receiving records remains a changing observation even when a cursor walk reaches its end. An in_flight attempt carries attempt, started_us and status, without completed duration or slots. A step with no completed attempt sorts last in slowest_first. A retrying step with completed attempts ranks by their accumulated duration, so an open attempt can appear on any page. Do not infer missing-call or hung-call counts from a single page.

Read a function

vexlo_get_function requires service and name, both nonempty strings. It accepts optional team and the environment object. The result describes the function and its observed callers and callees. Those relationships connect recorded calls; they are not an exhaustive static dependency list. Use vexlo_get_function_examples for recorded executions and vexlo_get_trace for their surrounding call graphs. See Understand function usage.

Retrieve selected values

vexlo_get_values takes: The root path is the empty string, ""; it is a valid array entry. Results include values and unknown_paths. The value field is encoded data in a string, including when the encoding is json. A readable zero-length payload omits value and bytes_count, but retains encoding and truncated. The MCP result preserves these fields rather than filling in an empty value. This API selects paths and slots, not numbered attempts. It can return repeated path/slot entries from several attempts without an attempt identifier. Do not assign those entries to retry numbers by array position. Use trace detail’s attempt-specific previews and status where that identity matters. A pending slot reads as stored when its bytes are readable. Without readable bytes it remains pending, which does not establish why the bytes are absent or whether a later read will find them. For slots recorded as stored, a full-value read returns expired when bytes are unavailable. This does not prove that the bytes previously arrived. See Inspect recorded values and HTTP traces and values.

Retrieve function examples

vexlo_get_function_examples requires service and name, and accepts: The response contains the function identity and up to five retained examples, with previews by default. It has no cursor. Environment filtering selects from existing retained examples; it does not establish a complete history or create an exhaustive sample for that environment. Requesting includeValues does not guarantee a value field. If bytes cannot be returned, inspect the slot’s state and preview instead. The client normalizes an empty slot state to not_captured; an absent input/output key stays absent.

Errors and changing observations

Tool failures set MCP isError: true and include a JSON error with kind. Mapped kinds include authentication_failed, wrong_role, not_found, invalid_arguments, too_many_values_requested, rate_limited, server_error, malformed_response and network_error. Preserve the returned server code/message when reporting the failure. Startup failures occur before tools are available; use Connect an agent for their exit codes. For successful reads, keep application status, recording completeness and value availability separate. None substitutes for the others.