compare_calls¶
Compare two calls side-by-side. Returns each call's headline metrics (Compass Score, predicted CSAT, agent lift) plus structured deltas: signals present in one but not the other, guidance present in one but not the other, dimension value differences, and score deltas. Both calls must belong to the caller's project.
Parameters¶
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
session_id_a |
string | yes | — | First call's session_id. |
session_id_b |
string | yes | — | Second call's session_id. |
include_transcript |
boolean | no | False |
Include transcripts in the per-call payload. Default: false. |
Example call¶
from fastmcp import Client
from fastmcp.client.auth import BearerAuth
async with Client(
"https://mcp.chordia.ai/mcp",
auth=BearerAuth("YOUR_APPLICATION_KEY"),
) as client:
result = await client.call_tool(
"compare_calls",
{
"session_id_a": "...",
"session_id_b": "..."
},
)
print(result.content[0].text)
# Plus any of the 1 optional params from the table above.
In Claude Desktop, Cursor, or any MCP-aware client the same call is issued by the LLM automatically once the server is configured — see integrations.
Result¶
Success responses are JSON of the shape below. Optional fields are omitted when the underlying data isn't present.
{
"call_a": { "...same shape as get_call_detail..." : "..." },
"call_b": { "...same shape as get_call_detail..." : "..." },
"differences": {
"signals_only_in_a": ["empathy_acknowledged"],
"signals_only_in_b": ["objection_handled"],
"signals_in_both": ["next_steps_clear"],
"guidance_only_in_a": [],
"guidance_only_in_b": ["offer_followup"],
"guidance_in_both": ["confirm_next_steps"],
"dimensions_diff": [
{"key": "intent_clarity", "value_a": "high", "value_b": "medium"}
],
"score_delta": {"compass_score": 0.4, "predicted_csat": 0.2, "agent_lift": 0.12}
}
}
Auth context¶
Every call receives the connection's project_id and access_scope
automatically — the caller never passes them. See
Authentication & RBAC for how scope narrows
results.
Errors¶
All tools return JSON. Errors are wrapped in { "error": "..." }. The
most common shapes are documented in
Python integration → Error shape.