The Operata MCP Server is live and ready.However, as we ship new features, the tool surface and configuration may change, guided by the MCP specification and your feedback.
Follow the changelog for updates.
Endpoints and authentication
The server offers two endpoints. Use OAuth when a person is connecting, and an API key for machine-to-machine integrations.
For the full comparison, roles, and how to mint a key, see Choose how to connect and Authentication.
Recommended workflow
The trace tools are schema-driven. Learn what data is available before you query it.list_groupsandswitch_group— select the group to query (OAuth sessions; API keys are already fixed to their group).get_schema— learn the services, column paths, query types, aggregate functions, and filter operators.traces_list— browse and filter traces by time range, span name, or duration.traces_query— run analytics: counts, averages, trends, rates, and facets.traces_get— drill into a single trace for the full span tree.traces_span_insightsandtraces_span_logs— deep diagnostics on one span.knowledge— documentation and troubleshooting guidance.
Tools
get_schema
Returns the complete data schema: available services, column paths, query types, aggregate functions, and filter operators. Call this tool first so the AI client constructs valid queries. Parametersquery_reason(string, optional) — your reason for requesting the schema.
Example - exploring the agent_interaction fields in the schema
knowledge
Retrieves information from the Operata knowledge base — Operata features, CX observability concepts, and troubleshooting guidance. Parametersquery(string, required) — your question about Operata features or concepts.
Example - asking how MOS score is calculated
list_groups
Lists the groups your authenticated account can access.- Over OAuth, this returns every group your Operata user can reach.
- With an API key, it returns only the single group the key belongs to.
groupId, groupName, and region.
Parameters
- None.
Example - listing the groups you can access
switch_group
Sets the active group for the session. Every later tool call uses this group unless you override it with agroupId parameter on the call.
Parameters
groupId(string, required) — the group to switch to. Must be a group your account can access.
Example - switching to a specific group by ID
An API key can only reach the group it was created in. Calling
switch_group with any
other group on an API-key session returns
403 "API key access is restricted to its own group". Connect over OAuth to
work across groups.traces_list
Lists and searches traces with filtering, sorting, and cursor-based pagination. Returns trace summaries with metadata such as duration, span count, and status. ParametersstartTime(string, required) — ISO 8601 UTC start time.endTime(string, required) — ISO 8601 UTC end time.filters(array, optional) — filter objects, each apathplus an operator (eq,gt,lt, and so on).sort(string, optional) —"asc"or"desc". Default"desc".limit(integer, optional) — results per page, 1–1000. Default 100.cursor(object, optional) — pagination cursor from a previous response.groupId(string, optional) — group to query. Defaults to the active group you set withswitch_group.
SpanName, ServiceName, StatusCode, SpanKind, Duration.
Example - listing recent agent-interaction traces
traces_query
Executes analytical queries against trace data. Supports five query types, which you can combine in a single request. Each query specifies akey (a unique identifier) and a service.
Parameters
startTime(string, required) — ISO 8601 UTC start time.endTime(string, required) — ISO 8601 UTC end time.queries(object, required) — an object containing arrays for each query type.groupId(string, optional) — group to query. Defaults to the active group you set withswitch_group.
Example - combining scalar and rate queries over May 2026
traces_get
Retrieves a single trace by ID in full OpenTelemetry JSON, with all spans and logs. ParameterstraceId(string, required) — the 32-character hex trace identifier.includeInternal(boolean, optional) — include internaloperata.*spans. Defaultfalse.groupId(string, optional) — group to query. Defaults to the active group you set withswitch_group.
Example - fetching one trace by ID
traces_span_insights
Returns the insights (detected issues and anomalies) associated with a specific span within a trace. ParameterstraceId(string, required) — the 32-character hex trace identifier.spanId(string, required) — the 16-character hex span identifier.groupId(string, optional) — group to query. Defaults to the active group you set withswitch_group.
Example - getting insights for a span
traces_span_logs
Returns paginated logs for a specific span within a trace, such as softphone logs, CCP events, and other diagnostic records. ParameterstraceId(string, required) — the 32-character hex trace identifier.spanId(string, required) — the 16-character hex span identifier.limit(integer, optional) — max log records, 1–1000. Default 50.cursor(object, optional) — pagination cursor from a previous response.groupId(string, optional) — group to query. Defaults to the active group you set withswitch_group.
Example - paging through a span's logs
Services
traces_query and the schema operate against four services. Each is one row per interaction at a different level of the customer journey.
Query types
A singletraces_query request can combine any of these types.
Query construction
These constraints trip up generated queries most often:
- Service selection drives the path convention. Use
Attributes.cx.*foragent_interaction; useAttributes.*directly forjourney_interaction. - Boolean fields such as
had_agent,had_bot, andhad_queuehold string values. Filter with"eq": "true", not booleantrue. - You can’t use
SpanNameintraces_queryfilters. Usetraces_listwith aSpanNamefilter instead.
get_schema before building a complex query. Scope startTime/endTime to the narrowest range that meets your need, and combine query types in one traces_query call to minimize round-trips. Use cursor-based pagination on traces_list and traces_span_logs for large result sets.
Verify
Confirm the server is reachable and returning the full tool surface. This example uses the API key endpoint, since it authenticates with a single header. The OAuth endpoint uses an interactive sign-in that your MCP client handles.get_schema, knowledge, list_groups, switch_group, traces_list, traces_query, traces_get, traces_span_insights, and traces_span_logs. For more curl checks, see Test the server with curl.
Related
- MCP overview — authentication, groups, and testing for every client.
- Connect Claude — Claude Desktop, Claude Code, and the Claude API.
- Connect Cursor — Cursor’s MCP configuration.
- Connect ChatGPT — a ChatGPT custom connector over OAuth.
- Connect OpenCode — OpenCode’s MCP configuration.
- Connect Microsoft Copilot Studio — a shared agent for your team.
- Connect GitHub Copilot — VS Code, Visual Studio, JetBrains, and the CLI.
- Troubleshoot the MCP server — common failure modes and fixes.
- Authentication — the API keys the server uses.
- Rate limits — the 100 requests per minute per key limit.