Skip to content

Public documentation

Trellus MCP documentation

Connect your AI assistant to Trellus call data. Get reporting totals, compare reps, find calls, and read a selected session through four read-only tools.

Remote MCP · OAuth · Read-only reporting

One connector for your call data

Ask questions about call activity, compare rep results, find sessions, and review a selected call. The Trellus MCP connector exposes four read-only reporting tools.

Trellus MCP server URL
https://mcp.trellus.ai/rpt/mcp

Each person signs in with their own Trellus account. The connection follows that account’s existing data permissions. Reading these docs does not require a login; connecting to account data does.

No API key needed for the hosted connector. Your AI app opens Trellus sign-in and requests rpt:read access. Use the Call Data API for a direct server-side integration.
Connection details
TransportStreamable HTTP
AuthorizationBrowser-based OAuth
Scoperpt:read
AccessThe connected Trellus user’s existing data permissions
ToolsAccount discovery, session search, metrics, and individual session detail

Connect your AI assistant

Copy the exact server URL above. Keep the /rpt/mcp path and do not add a trailing slash. In a managed workspace, an administrator may need to allow custom connectors.

Claude

  1. Open Customize → Connectors and add a custom connector. In a managed workspace, an owner or permitted administrator may need to add it under Organization settings → Connectors first.
  2. Name it Trellus, paste https://mcp.trellus.ai/rpt/mcp, and continue to the detected authentication settings.
  3. Use OAuth sign-in. Choose Claude’s published identity or automatic registration; Trellus does not require your own client secret or a fixed API-key header.
  4. Add the connector, connect your own Trellus account, and approve the read access.
  5. In a new conversation, enable Trellus from + → Connectors and ask your first question.

Client menus may change. See Claude connector setup for the current interface.

ChatGPT

  1. Open ChatGPT Plugins, choose +, then Add custom MCP server. Available controls depend on your account and workspace policy.
  2. Name it Trellus, add a description, and use https://mcp.trellus.ai/rpt/mcp as the public endpoint under Connection.
  3. Use OAuth, review the permissions, and create the plugin. Complete Trellus sign-in and approve read access when prompted.
  4. Review the four discovered tools. If the action list is empty or outdated, open the connection and choose Refresh after signing in.
  5. Install or enable the resulting connection. Start a new conversation, type @, select Trellus, and ask your first question.

Client menus may change. See ChatGPT connection guide for the current interface.

Other MCP clients and custom agents

  1. Use a client that supports remote MCP over Streamable HTTP and browser-based OAuth with PKCE and dynamic client registration.
  2. Add https://mcp.trellus.ai/rpt/mcp as a remote server. Let the client discover authentication from the endpoint.
  3. Complete Trellus sign-in in the browser and approve rpt:read access. Do not substitute a Trellus API key for the OAuth access token.
  4. Enable the connector for the conversation and list the available tools.
  5. For a custom runtime that does not handle the browser flow, implement OAuth in your application and pass its access token to the MCP client. For direct server-to-server HTTPS, use the Call Data API.

Ask a question that you can check

Start with a time range and a specific metric. The assistant should discover your account settings first, then report the filters and timezone it used.

Example question 1
Use Trellus to get my team’s reporting timezone. For the last seven complete days, show outbound dial attempts, connected calls, and total live duration by rep. Include unanswered attempts in total dials and use rep names instead of IDs.
Example question 2
Use Trellus to compare the last 30 days by disposition. Show session count and total duration, then calculate average duration. Explain which filters you used.
Example question 3
Use Trellus to find five calls in the last seven days with the fields needed to identify them. Open one selected session and summarize its outcome, objections, and next step without including customer contact details.
Choose the data you share. Search and session-detail tools redact phone-like values by default. This is not complete anonymization: names, companies, transcript text, and other requested fields may still contain personal information. Request only the fields needed for your analysis.

Tool reference

These are the four hosted Trellus MCP tools. Examples below are tool argument objects; your MCP client sends them through tools/call. Extra arguments are rejected.

The four read-only tools
ToolUse it to
trellus_bootstrapDiscover the account and reporting options
trellus_search_sessionsFind calls and return selected fields
trellus_metric_detailsCount sessions, sum values, and compare groups
trellus_get_sessionRead one selected call

trellus_bootstrap

Call this before a report that needs user IDs, a team timezone, or exact disposition values.

Pass an empty object, {}. This tool has no arguments.

trellus_bootstrap example
{}

Response: Returns user_info, team_info, user_directory, autodialer_mapping_options, and custom_dispositions. The user directory contains available user IDs and names; team_info includes analytics_timezone when configured.

trellus_search_sessions

Search a time range for sessions. Add conversation_type EQ 1 to select calls; without that filter, results can include other session types. Choose only the fields needed, then use a returned session_id to inspect one session.

trellus_search_sessions arguments
FieldTypeMeaning
start_micros
Optional
integer Inclusive Unix timestamp in microseconds. Defaults to 30 days before the current time when omitted.
end_micros
Optional
integer Exclusive Unix timestamp in microseconds. Defaults to the current time when omitted. Must be later than start_micros; the range cannot exceed 366 days.
cnf
Optional
array of filter groups AND between outer groups, OR within each inner group. Omit or use [] for no extra filters.
select
Optional
string[] One to 100 published reporting column paths. Omit to use the default selection shown below. Duplicate columns are removed.
limit
Optional
integer Maximum returned sessions, from 1 to 1,000. Defaults to 1,000.
team_id
Optional
string Optional team scope where your account has access. Supplying an ID does not grant access.
redact_phone_numbers
Optional
boolean Defaults to true. Set false only when phone values are needed and you are permitted to share them with the connected assistant.
trellus_search_sessions example
{
  "cnf": [
    [
      {
        "column_name": "conversation_type",
        "operator": "EQ",
        "value_safe": 1
      }
    ]
  ],
  "select": [
    "session_id",
    "started_at",
    "resource_id",
    "duration",
    "dial_metric.is_inbound",
    "user_log.disposition"
  ],
  "limit": 5,
  "redact_phone_numbers": true
}

Response: Returns { select, sessions }. Each session maps the selected column paths to their values. There is no offset or cursor argument; use smaller time windows for larger datasets. Use the metric tool for totals instead of counting a capped search result.

trellus_metric_details

Calculate reporting totals without downloading individual call rows. Keep total dial counts separate from connected-call metrics.

trellus_metric_details arguments
FieldTypeMeaning
selects
Required
metric definition[] One to 50 count or sum definitions. { "cnf": [] } counts all matching sessions. { "column_name": "duration" } sums that numeric field. Add a definition-level cnf to limit only that metric.
start_micros
Optional
integer Inclusive Unix microseconds. Defaults to 30 days before the current time when omitted.
end_micros
Optional
integer Exclusive Unix microseconds. Defaults to the current time. The range must be positive and at most 366 days.
cnf
Optional
array of filter groups Filters applied to every metric in the request. Omit or use [] for no extra filters.
group_by
Optional
{ column_name: string } Split results by exactly one supported categorical dimension. Each returned row begins with its group value.
team_id
Optional
string Optional team scope where your account has access.
trellus_metric_details example
{
  "cnf": [
    [
      {
        "column_name": "dial_metric.is_dial",
        "operator": "EQ",
        "value_safe": true
      }
    ],
    [
      {
        "column_name": "dial_metric.is_inbound",
        "operator": "EQ",
        "value_safe": false
      }
    ]
  ],
  "selects": [
    {
      "cnf": []
    },
    {
      "cnf": [
        [
          {
            "column_name": "dial_metric.is_connected",
            "operator": "EQ",
            "value_safe": true
          }
        ]
      ]
    },
    {
      "column_name": "dial_metric.live_duration"
    }
  ],
  "group_by": {
    "column_name": "resource_id"
  }
}

Response: Returns { selects, rows } and group_by when supplied. Result cells follow the selects order. With group_by, the first cell is the group value. Averages are calculated from the appropriate sum and count; there is no average operator.

trellus_get_session

Retrieve the complete reporting record for a specific session selected from a search.

trellus_get_session arguments
FieldTypeMeaning
session_id
Required
string An existing session ID you are allowed to read. Use an ID returned by trellus_search_sessions.
redact_phone_numbers
Optional
boolean Defaults to true. Phone-like strings are replaced throughout the returned record.
trellus_get_session example
{
  "session_id": "SESSION_ID_FROM_SEARCH",
  "redact_phone_numbers": true
}

Response: Returns the selected session as a JSON record, including available call and transcript detail. This is a larger response than selected search columns, so open individual sessions as needed.

Default session-search columns

If you omit select, the search returns these fields. Supply an explicit selection to keep responses focused.

Default select
[
  "session_id",
  "started_at",
  "conversation_type",
  "resource_id",
  "duration",
  "dial_metric.is_inbound",
  "dial_metric.sip_code",
  "customer_data.name",
  "customer_data.company_name",
  "user_log.disposition",
  "user_log.sentiment",
  "user_log.purpose"
]

Filters and breakdowns

Use cnf to describe which sessions match. An empty array selects all sessions within the time range and the account’s permitted scope.

  • Each filter has column_name, operator, and value_safe. Use a reporting column published in tools/list, or a supported field under state.* or custom_metrics.*.
  • Outer cnf groups are joined with AND. Filters inside one group are joined with OR. Empty cnf means no extra filters.
  • EQ and NEQ compare scalar values, including null. IN and NIN take arrays of up to 1,000 values; null is not accepted in these arrays.
  • GT, GE, LT, and LE compare numeric or string columns. REGEX is available for strings and supported dynamic fields, with patterns up to 512 characters.
  • Boolean, byte, and enum fields support EQ, NEQ, IN, and NIN. Numeric fields additionally support ordering. Enum values must match the published name or number.
  • For a column inside a list, such as agents[*].agent_id, add reducer: "ANY" or "ALL". Do not add a reducer to a scalar column.
  • Use at most 100 outer groups and 20 filters per group. Unknown fields, unsupported operators, extra arguments, and invalid filter or value types return a tool error.
CNF example
[
  [
    {
      "column_name": "dial_metric.is_inbound",
      "operator": "EQ",
      "value_safe": false
    }
  ],
  [
    {
      "column_name": "agents[*].agent_id",
      "operator": "EQ",
      "value_safe": "REP_ID_FROM_BOOTSTRAP",
      "reducer": "ANY"
    },
    {
      "column_name": "duration",
      "operator": "GT",
      "value_safe": 60
    }
  ]
]

This example means: non-inbound sessions AND either a matching agent OR a duration above 60 seconds. Replace the example rep ID with one returned by trellus_bootstrap.

Group metrics by one dimension

Set group_by.column_name to one of the values below. Grouping is available on trellus_metric_details, not session search.

Supported group_by columns
[
  "agent_joined",
  "agents[*].agent_id",
  "agents[*].agent_type",
  "conversation_type",
  "customer_joined",
  "dial_metric.is_inbound",
  "dial_metric.sip_code",
  "platform",
  "resource_id",
  "user_log.disposition",
  "user_log.purpose",
  "user_log.sentiment"
]

Your MCP client can retrieve the complete accepted reporting-column and enum definitions through tools/list. Use those definitions when generating filters.

Keep reporting definitions consistent

  • For calendar dates, obtain team_info.analytics_timezone from trellus_bootstrap and convert the requested local boundaries to Unix microseconds. Ask the user for a timezone if it is unset.
  • A dial count should include unanswered attempts. For outbound dials, filter dial_metric.is_dial=true and dial_metric.is_inbound=false, then use { "cnf": [] } as a select. Do not add connection, duration, or disposition filters to the total unless the question asks for them.
  • Use a separate filtered select for connected calls. Do not treat agent_joined=false alone as a universal definition of a missed call; combine it with the relevant inbound and call filters.
  • Grouping by agents[*] expands a session across its agents, so the same session can contribute to more than one group. Those group totals may not add up to the unique session count.
  • MCP query boundaries use microseconds. Reporting started_at values use Unix seconds; duration, connected duration, and live duration are measured in seconds.
  • All four tools read data. They do not place calls, edit CRM records, change campaigns, or modify account settings.

For field-level definitions, query recipes, and a direct HTTPS integration, see the Call Data API reference.

OAuth for custom clients

Use the endpoint’s discovery metadata, authorization-code flow, and S256 PKCE. The resource is the full MCP URL. Request only rpt:read and send the resulting OAuth token in the Authorization: Bearer header.

Hosted MCP OAuth contract
SettingValue
Resourcehttps://mcp.trellus.ai/rpt/mcp
Issuerhttps://mcp.trellus.ai
Authorization-server metadatahttps://mcp.trellus.ai/.well-known/oauth-authorization-server
Protected-resource metadatahttps://mcp.trellus.ai/.well-known/oauth-protected-resource
Scoperpt:read
Grant typesauthorization_code, refresh_token
PKCE methodS256
Token endpoint authenticationnone (public client)
Access-token lifetime1 hour
Refresh tokensRotate on refresh; expire after 30 days

The discovery response provides authorization, registration, token, and revocation endpoints. A client must store each rotated refresh token returned by a successful refresh. Do not expose tokens in browser page source, public repositories, examples, or chat prompts.

The assistant’s runtime may not open the consent window itself. In that case, your application must complete OAuth before handing an access token to the MCP runtime. The read-only OAuth token is different from a Trellus API key.

Tool-call envelope and error handling

After MCP initialization and authentication, call a tool with a JSON-RPC request like this:

tools/call request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "trellus_bootstrap",
    "arguments": {}
  }
}

The tool result contains a text item with the JSON-encoded reporting result. Check isError before parsing it as successful data. Validation errors explain which argument needs correcting. Authentication failures require reconnecting or refreshing the token; service errors may include a reference to share with Trellus support.

Use an MCP SDK to handle initialization, protocol negotiation, authentication discovery, and requests. Publishing documentation does not make account data accessible without authorization.

Troubleshooting

The connector URL is rejected

Use exactly https://mcp.trellus.ai/rpt/mcp. The client must support remote Streamable HTTP MCP and the Trellus OAuth flow. A local-only or fixed-token client needs a different integration path.

The app asks for my API key or a client secret

For hosted MCP, use the detected OAuth flow and automatic registration or a supported published client identity. Do not paste a Trellus API key into a fixed-header field.

The sign-in link expired

Start Connect again from your AI app, then complete Trellus sign-in and consent within 10 minutes.

The tool list is empty or stale

Complete sign-in, refresh the connection’s tools or metadata, and start a new conversation. The supported tool list contains the four tools on this page.

The assistant does not use Trellus

Enable the connection in the conversation and start your prompt with “Use Trellus to…”. Review any tool permission prompt from the AI client.

A query says the date range or filter is invalid

Use integer microsecond timestamps, a positive range of at most 366 days, column names from tools/list, and exact disposition values from trellus_bootstrap.

A report has fewer calls than expected

Check the timezone, date boundaries, team and rep filters, and your Trellus access. Search results are capped at 1,000; use trellus_metric_details for totals.

A connected account stopped working

Reconnect through your AI app and approve access again. If a tool returns a support reference, include that reference when contacting Trellus support, without sending tokens.

Still need help? Contact Trellus support with the client name, the tool name, and any error reference. Keep credentials out of the message.