{
  "markdown": "# convai-analytics\n\nAgentic analytics for Convai applications.\n\nThis repository lets MCP-capable agents, coding agents, and developers answer questions about Convai session telemetry using only a Convai API key. The recommended path is the published local MCP server, [`@convai/analytics-mcp`](https://www.npmjs.com/package/@convai/analytics-mcp), which plugs into Claude Desktop, Cursor, Codex-compatible MCP clients, and other stdio MCP hosts so agents can call typed analytics tools instead of writing custom scripts.\n\nFor developers who want direct programmatic access, the repo also includes TypeScript, Python, and CLI clients that use the same public Analytics API.\n\nAsk questions like:\n\n> How many interactions did my characters have in the last 7 days?\n>\n> How many unique end users used each character this month?\n>\n> Show aggregate P50/P95/P99 latency over time for production readiness sign-off.\n>\n> Explain why this interaction was slow and generate a waterfall chart.\n>\n> Which processor, provider, model, or character is driving latency or errors?\n\nThe SDK calls Convai's hosted analytics API at `https://analytics-api.convai.com/v1/analytics`. The API resolves your API key server-side, scopes every query to your account, enforces plan and quota limits, and returns agent-friendly JSON that can be summarized, charted, or used in scripts.\n\n> **Status:** v0.2. The full v1 endpoint surface is wired: `summary`, `timeseries`, `breakdown`, `sessions.list`, `sessions.get`, `interactions.get`, `metrics/catalog`, `regression-detection`, and `query`. Convenience facades (`latency`, `providers`, `errors`, `usage`) work end to end on top of those primitives.\n\n## What This Is\n\n- **A local MCP server** in `packages/mcp` that exposes the main analytics questions as typed agent tools.\n- **A TypeScript SDK** in `packages/typescript`.\n- **A Python SDK** in `packages/python`.\n- **A CLI** in `cli`.\n- **Prompt recipes** in `recipes/prompts` that tell an AI agent exactly which calls to make for common analytics questions.\n- **Chart recipes** in `recipes/charts` that generate Vega-Lite specs or Plotly timelines for latency, usage, reliability, and concurrency analysis.\n\n## What This Is Not\n\n- **Not a client-side browser SDK.** Your Convai API key is a bearer secret. Do not put it in browser JavaScript, mobile apps, public notebooks, screenshots, logs, or committed config files.\n- **Not a direct data-store client.** All reads go through Convai's hosted Analytics API with server-side account scoping, plan checks, and quota enforcement.\n- **Not a write API.** It only reads analytics data. It does not mutate characters, sessions, configs, or telemetry.\n- **Not a replacement for the Convai dashboard.** It is the programmable and agent-friendly surface for deeper analysis, automation, and chart generation.\n\n## Repository Layout\n\n```text\nconvai-analytics/\n├── docs/                       Concepts, auth, metrics reference, prompt/chart indexes\n├── openapi/                    Snapshot of the analytics API contract\n├── packages/\n│   ├── typescript/             @convai/analytics SDK\n│   ├── mcp/                    @convai/analytics-mcp local stdio server\n│   └── python/                 convai-analytics SDK\n├── cli/                        convai-analytics command line interface\n├── recipes/\n│   ├── prompts/                Natural-language prompt templates for AI agents\n│   └── charts/                 Runnable chart-generation scripts\n└── examples/                   Runnable end-to-end examples\n```\n\n## Prerequisites\n\n- Node.js 18+ for the TypeScript SDK, CLI, examples, and chart recipes.\n- Python 3.10+ and `uv` for the Python SDK examples.\n- A Convai API key for the account whose analytics you want to query.\n\nGet your key from the same Convai account you use for the rest of the Convai API, then export it in your shell:\n\n```bash\nexport CONVAI_API_KEY=\"ck_live_your_key_here\"\n```\n\nThe SDK reads `CONVAI_API_KEY` automatically. You normally do **not** need to set a base URL; production is the default.\n\n## Recommended: MCP From A Fresh Client\n\nFor agent workflows, start here:\n\n```bash\nexport CONVAI_API_KEY=\"ck_live_your_key_here\"\nnpx -y @convai/analytics-mcp@latest\n```\n\nThe server is also listed in the Official MCP Registry as [`io.github.Conv-AI/convai-analytics-mcp`](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.Conv-AI%2Fconvai-analytics-mcp). If your MCP client supports registry discovery, use that registry entry; otherwise configure the `npx` command above. Once connected, ask normal analytics questions:\n\nAfter adding or changing MCP config, restart Claude Desktop, Claude Code, Cursor, Codex, or your MCP host so it reloads the server command and `CONVAI_API_KEY`.\n\n```text\nShow aggregate P50/P95/P99 latency for the last 30 days and generate a chart.\n```\n\n```text\nWhich component is driving p95 latency, and which sessions should I inspect?\n```\n\n```text\nShow usage trends, unique end users, active-session concurrency, and provider/model latency charts.\n```\n\nSee [packages/mcp/README.md](packages/mcp/README.md) for client setup snippets.\n\n## Developer SDK Path From A Fresh Clone\n\n```bash\ngit clone https://github.com/Conv-AI/convai-analytics.git\ncd convai-analytics\nexport CONVAI_API_KEY=\"ck_live_your_key_here\"\n\n# Install TypeScript SDK + CLI dependencies.\nmake ts-install\n\n# Optional but useful: verify the SDK and CLI compile.\nmake ts-build\nmake ts-test\n```\n\nRun the smallest working example:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  examples/node/account-summary.ts last_7d\n```\n\nExpected result: a short account summary with sessions, end users, interactions, errors, and latency percentiles for your own account.\n\n## Use With A Coding Agent\n\nIf your agent does not support MCP, open this repo in Codex, Claude Code, Cursor, or a similar coding agent. Give the agent this instruction:\n\n```text\nUse this repository and my CONVAI_API_KEY environment variable to answer analytics questions.\nFirst read README.md, docs/concepts.md, docs/metrics-reference.md, and recipes/prompts/README.md.\nPrefer MCP when available; otherwise use the SDK or recipes. Do not ask for direct data-store access.\nKeep the API key private and do not print it.\n```\n\nThen ask normal product questions:\n\n```text\nHow many interactions and unique end users did I have in the last 30 days?\nBreak it down by character and generate a usage trend chart.\n```\n\n```text\nShow aggregate P50/P95/P99 voice.user_to_bot_latency for the last 7 days.\nAdd a 3000 ms p95 threshold line and summarize the worst buckets.\n```\n\n```text\nList recent slow sessions, choose one with traceable interaction spans,\nexplain the bottleneck, and generate a waterfall chart.\n```\n\nThe agent should use `recipes/prompts` for the call sequence and `recipes/charts` for chart generation.\n\n## MCP Server\n\nThe fastest path for MCP-capable agents is [`@convai/analytics-mcp`](https://www.npmjs.com/package/@convai/analytics-mcp). It is a published local stdio MCP server that wraps only the public TypeScript SDK. It reads `CONVAI_API_KEY`, optionally reads `CONVAI_ANALYTICS_BASE_URL`, and never accepts account overrides, service credentials, database URLs, or other internal access paths.\n\nRun it directly:\n\n```bash\nexport CONVAI_API_KEY=\"ck_live_your_key_here\"\nnpx -y @convai/analytics-mcp@latest\n```\n\nOfficial MCP Registry name: [`io.github.Conv-AI/convai-analytics-mcp`](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.Conv-AI%2Fconvai-analytics-mcp)\n\nClaude Desktop example:\n\n```json\n{\n  \"mcpServers\": {\n    \"convai-analytics\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@convai/analytics-mcp@latest\"],\n      \"env\": {\n        \"CONVAI_API_KEY\": \"ck_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\nAfter saving this config, quit and reopen Claude Desktop so it starts the new MCP server. Claude Code, Cursor, Codex-compatible clients, and other stdio MCP hosts can use the same command/env shape; restart the client or start a new session after adding or changing MCP config. Once connected, ask questions like:\n\n```text\nShow aggregate P50/P95/P99 latency for the last 30 days and generate a chart.\n```\n\n```text\nWhich component is driving p95 latency, and which sessions should I inspect?\n```\n\n```text\nShow usage trends, unique end users, active-session concurrency, and provider/model latency charts.\n```\n\nThe MCP server returns structured JSON for data tools and Vega-Lite JSON specs for chart tools. It does not write files; your MCP client can decide whether to render, save, or summarize the returned artifacts.\n\nLocal development:\n\n```bash\nmake mcp-install\nmake mcp-lint\nmake mcp-test\nmake mcp-build\nmake mcp-smoke\n```\n\nSee [`packages/mcp/README.md`](packages/mcp/README.md) for the full tool list, prompt list, resources, and live smoke command. See [`docs/publishing.md`](docs/publishing.md) and [`docs/mcp-distribution.md`](docs/mcp-distribution.md) for release, registry, and marketplace publishing notes.\n\n## TypeScript SDK\n\nWhen using the repository directly:\n\n```bash\nmake ts-install\npackages/typescript/node_modules/.bin/tsx --tsconfig tsconfig.recipes.json examples/node/account-summary.ts last_24h\n```\n\nWhen using the package from your own Node project:\n\n```bash\nnpm install @convai/analytics\n```\n\n```ts\nimport { ConvaiAnalytics } from \"@convai/analytics\";\n\nconst client = new ConvaiAnalytics({\n  apiKey: process.env.CONVAI_API_KEY,\n});\n\nconst summary = await client.summary({ range: \"last_7d\" });\nconsole.log({\n  sessions: summary.sessions,\n  interactions: summary.interactions,\n  uniqueEndUsers: summary.uniqueEndUsers,\n  p95EndToEndMs: summary.p95EndToEndMs,\n});\n```\n\nFind sessions to inspect:\n\n```ts\nconst sessions = await client.sessions.list({\n  range: \"last_7d\",\n  sort: \"slowest\",\n  limit: 10,\n});\n\nconsole.table(\n  sessions.sessions.map((s) => ({\n    sessionId: s.sessionId,\n    interactions: s.interactionCount,\n    p95EndToEndMs: s.p95EndToEndMs,\n    startTime: s.startTime,\n  })),\n);\n```\n\nInspect one interaction:\n\n```ts\nconst trace = await client.interactions.get(\"interaction_id_here\");\n\nfor (const span of trace.spans) {\n  console.log(\n    `${span.processor ?? \"unknown\"} ${span.durationMs ?? 0}ms` +\n      (span.provider ? ` provider=${span.provider}` : \"\"),\n  );\n}\n```\n\n## Python SDK\n\nFrom this repository:\n\n```bash\ncd packages/python\nuv sync\nuv run python - <<'PY'\nfrom convai_analytics import ConvaiAnalytics\n\nclient = ConvaiAnalytics()\nsummary = client.summary(range=\"last_7d\")\nprint({\n    \"sessions\": summary.sessions,\n    \"interactions\": summary.interactions,\n    \"unique_end_users\": summary.unique_end_users,\n    \"p95_end_to_end_ms\": summary.p95_end_to_end_ms,\n})\nPY\n```\n\nFrom your own Python project:\n\n```bash\n# Use this once the package is available in your Python package registry.\npip install convai-analytics\n```\n\n```python\nfrom convai_analytics import ConvaiAnalytics\n\nclient = ConvaiAnalytics()  # reads CONVAI_API_KEY\nsessions = client.sessions.list(range=\"last_7d\", sort=\"slowest\", limit=5)\n\nfor session in sessions.sessions:\n    print(session.session_id, session.interaction_count, session.p95_end_to_end_ms)\n```\n\n## CLI\n\nBuild the local CLI:\n\n```bash\nmake ts-install\nmake ts-build\n```\n\nRun common queries:\n\n```bash\nnpx -y @convai/analytics-cli summary --range last_7d --pretty\n\nnode cli/dist/index.js summary --range last_7d --pretty\n\nnode cli/dist/index.js timeseries \\\n  --measure p95Value \\\n  --metric-name voice.user_to_bot_latency \\\n  --granularity day \\\n  --range last_30d \\\n  --pretty\n\nnode cli/dist/index.js sessions \\\n  --range last_7d \\\n  --sort slowest \\\n  --limit 5 \\\n  --pretty\n\nnode cli/dist/index.js interaction interaction_id_here --pretty\n```\n\nUse `--api-key` only for local one-off testing. Prefer `CONVAI_API_KEY` so the key does not end up in shell history:\n\n```bash\nCONVAI_API_KEY=\"ck_live_your_key_here\" node cli/dist/index.js summary --range last_24h\n```\n\n## Example Questions And Commands\n\nAll commands below assume:\n\n```bash\nexport CONVAI_API_KEY=\"ck_live_your_key_here\"\nmake ts-install\nmake ts-build\n```\n\n### 1. Account Usage Summary\n\nQuestion:\n\n```text\nHow many sessions, interactions, unique end users, and errors did I have in the last 7 days?\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  examples/node/account-summary.ts last_7d\n```\n\n### 2. Aggregate Latency Percentiles\n\nQuestion:\n\n```text\nShow aggregate P50/P95/P99 latency over time for production-readiness sign-off.\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/latency_percentile_band.ts \\\n  --range last_7d \\\n  --granularity hour \\\n  --p95-threshold-ms 3000 \\\n  > latency-percentiles.vl.json\n```\n\n### 3. P95 Latency Trend\n\nQuestion:\n\n```text\nShow p95 end-to-end latency over time, optionally filtered to one character.\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/p95_over_time.ts \\\n  --range last_7d \\\n  > p95-over-time.vl.json\n```\n\nAdd `--character-id your_character_id` to focus on one character.\n\n### 4. Component Bottlenecks\n\nQuestion:\n\n```text\nWhich processor contributes most to p95 latency?\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/component_breakdown.ts \\\n  --range last_7d \\\n  > component-bottlenecks.vl.json\n```\n\n### 5. Slow Session Drilldown\n\nFirst find a session:\n\n```bash\nnode cli/dist/index.js sessions --range last_7d --sort slowest --limit 5 --pretty\n```\n\nThen diagnose it:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  examples/node/why-was-this-session-slow.ts session_id_here\n```\n\n### 6. Interaction Waterfall\n\nQuestion:\n\n```text\nShow the latency breakdown of this specific interaction id.\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/latency_waterfall.ts \\\n  --interaction interaction_id_here \\\n  > interaction-waterfall.vl.json\n```\n\n### 7. Reliability Trends\n\nQuestion:\n\n```text\nShow errors and dropped error-persistence events over time.\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/reliability_trends.ts \\\n  --range last_7d \\\n  --granularity day \\\n  > reliability-trends.vl.json\n```\n\n### 8. Usage Trends\n\nQuestion:\n\n```text\nShow sessions, interactions, and unique end users over time.\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/usage_trends.ts \\\n  --range last_30d \\\n  --granularity day \\\n  > usage-trends.vl.json\n```\n\n### 9. Active Session / LiveKit Room Pressure\n\nQuestion:\n\n```text\nEstimate concurrent active sessions over time.\n```\n\nCommand:\n\n```bash\npackages/typescript/node_modules/.bin/tsx \\\n  --tsconfig tsconfig.recipes.json \\\n  recipes/charts/concurrency_estimate.ts \\\n  --range last_7d \\\n  --bucket-minutes 5 \\\n  > active-session-concurrency.vl.json\n```\n\nThis is a proxy derived from session start/end windows until first-class stream concurrency metrics are exposed.\n\n### 10. Provider Comparison\n\nQuestion:\n\n```text\nCompare LLM or TTS provider latency and reliability.\n```\n\nAgent prompt:\n\n```text\nRead recipes/prompts/provider-comparison.md and compare LLM and TTS providers for the last 7 days.\nReturn a table with provider/model, p95 latency, sample count, and any reliability caveats.\n```\n\n### 11. Regression Detection\n\nQuestion:\n\n```text\nDid latency regress compared with the previous window?\n```\n\nBusiness-tier and above:\n\n```ts\nconst regressions = await client.regressionDetection({\n  baselineRange: \"last_7d\",\n  currentRange: \"last_24h\",\n  measure: \"p95Value\",\n  groupBy: \"processor\",\n});\n```\n\nLower plans should expect a typed `PlanInsufficientError` for this endpoint.\n\n## Prompt Recipes\n\nThe prompt recipes are the best starting point for agents:\n\n| Recipe | Use it when you want to know |\n|---|---|\n| [`why-was-this-session-slow.md`](recipes/prompts/why-was-this-session-slow.md) | why a session felt slow and which interaction/component caused it |\n| [`aggregate-latency-distribution.md`](recipes/prompts/aggregate-latency-distribution.md) | P50/P95/P99 latency bands for systemic trend analysis |\n| [`p95-latency-trend.md`](recipes/prompts/p95-latency-trend.md) | p95 latency over time for an account or character |\n| [`component-bottlenecks.md`](recipes/prompts/component-bottlenecks.md) | which processor contributes most to p95 |\n| [`trace-explanation.md`](recipes/prompts/trace-explanation.md) | what happened in one interaction id |\n| [`error-rate-trends.md`](recipes/prompts/error-rate-trends.md) | errors over time and by component/provider |\n| [`provider-comparison.md`](recipes/prompts/provider-comparison.md) | provider/model latency comparisons |\n| [`usage-summary.md`](recipes/prompts/usage-summary.md) | sessions, interactions, and unique users by character or experience |\n\n## Chart Recipes\n\nMost chart recipes print a Vega-Lite JSON spec to stdout. You can save that spec, render it in a notebook, hand it to an agent, or convert it to PNG with a Vega-Lite renderer.\n\n| Script | Output |\n|---|---|\n| [`latency_percentile_band.ts`](recipes/charts/latency_percentile_band.ts) | P50/P95/P99 line chart, optional p95 threshold |\n| [`p95_over_time.ts`](recipes/charts/p95_over_time.ts) | p95 latency trend |\n| [`component_breakdown.ts`](recipes/charts/component_breakdown.ts) | p95 latency by processor |\n| [`latency_waterfall.ts`](recipes/charts/latency_waterfall.ts) | per-interaction waterfall |\n| [`reliability_trends.ts`](recipes/charts/reliability_trends.ts) | errors and dropped persistence events |\n| [`usage_trends.ts`](recipes/charts/usage_trends.ts) | sessions, interactions, unique end users |\n| [`concurrency_estimate.ts`](recipes/charts/concurrency_estimate.ts) | active-session concurrency proxy |\n| [`session_timeline.py`](recipes/charts/session_timeline.py) | session event timeline |\n\n## Authentication, Isolation, And Plans\n\nEvery request sends `CONVAI-API-KEY` to the hosted analytics API. The API key resolves server-side to one Convai account. The client cannot choose or override account scope.\n\n| Plan | API access | Notes |\n|---|---|---|\n| free / starter | yes, limited monthly quota | basic endpoints |\n| scale | yes, higher quota | basic endpoints |\n| business | yes | adds `regression-detection` and restricted `query` |\n| enterprise | yes | higher quotas / retention according to contract |\n\nCommon auth and plan errors:\n\n| Status | Meaning |\n|---|---|\n| 401 | missing or invalid API key |\n| 402 | plan required for analytics API access |\n| 403 | endpoint requires a higher plan |\n| 429 | rate limit or monthly analytics quota exceeded |\n\nSee [`docs/authentication.md`](docs/authentication.md) for details.\n\n## Endpoint Catalog\n\n| SDK call | REST endpoint | Notes |\n|---|---|---|\n| `client.summary(...)` | `GET /v1/analytics/summary` | headline account KPIs |\n| `client.timeseries(...)` | `GET /v1/analytics/timeseries` | metric over time |\n| `client.breakdown(...)` | `GET /v1/analytics/breakdown` | grouped breakdowns |\n| `client.sessions.list(...)` | `GET /v1/analytics/sessions` | session inventory |\n| `client.sessions.get(id)` | `GET /v1/analytics/sessions/{id}` | session timeline |\n| `client.interactions.get(id)` | `GET /v1/analytics/interactions/{id}` | trace / component spans |\n| `client.catalog()` | `GET /v1/analytics/metrics/catalog` | queryable metric definitions |\n| `client.regressionDetection(...)` | `GET /v1/analytics/regression-detection` | business+ |\n| `client.query(cubeQuery)` | `POST /v1/analytics/query` | restricted advanced query, business+ |\n\nConvenience facades:\n\n- `client.latency.byComponent(...)`\n- `client.latency.overTime(...)`\n- `client.providers.compare(...)`\n- `client.errors.summary(...)`\n- `client.errors.overTime(...)`\n- `client.usage.summary(...)`\n- `client.usage.interactions(...)`\n\n## SDK And REST Parameter Names\n\nUse camelCase in the TypeScript SDK and MCP prompts. The SDK translates request keys and common measure/group values at the HTTP boundary:\n\n```ts\nawait client.timeseries({\n  measure: \"uniqueSessions\",\n  groupBy: \"characterId\",\n  range: \"last_30d\",\n});\n```\n\nIf you call the REST API directly, use snake_case query keys and canonical snake_case values:\n\n```bash\ncurl -H \"CONVAI-API-KEY: $CONVAI_API_KEY\" \\\n  \"https://analytics-api.convai.com/v1/analytics/timeseries?range=last_30d&measure=unique_sessions&group_by=character_id\"\n\ncurl -H \"CONVAI-API-KEY: $CONVAI_API_KEY\" \\\n  \"https://analytics-api.convai.com/v1/analytics/breakdown?range=last_30d&measure=unique_sessions&group_by=character_id\"\n```\n\nThe public API accepts common SDK-style aliases for compatibility, but documentation uses the canonical REST form so scripts, dashboards, and agents have one stable wire format.\n\nStatus breakdowns (`group_by=status`) require telemetry rows that include status metadata. If a status breakdown returns only an empty group or no rows, treat it as a no-data state rather than rendering demo values. Character usage breakdowns currently return stable character IDs; display-name enrichment is planned as a backward-compatible addition.\n\n## Development Commands\n\n```bash\nmake ts-install          # install TypeScript SDK + CLI deps\nmake ts-build            # build TypeScript SDK + CLI\nmake ts-test             # run TypeScript unit tests\nmake ts-lint             # ESLint + TypeScript typecheck\nmake ts-typecheck-recipes # typecheck examples and chart recipes\nmake package-check       # verify npm package archives exclude node_modules\n\nmake py-install          # install Python SDK dev env\nmake py-test             # run Python tests\nmake py-lint             # ruff + mypy\n\nmake check-openapi       # compare committed OpenAPI snapshot with live API\nmake gen-types           # regenerate generated SDK types from OpenAPI snapshot\n```\n\nLive E2E test, if you have an API key with data:\n\n```bash\nCONVAI_ANALYTICS_E2E_RANGE=last_30d \\\nCONVAI_ANALYTICS_E2E_DELAY_MS=6500 \\\nmake e2e-stg\n```\n\nDespite the target name, `e2e-stg` defaults to staging. To run against production:\n\n```bash\nCONVAI_ANALYTICS_BASE_URL=https://analytics-api.convai.com/v1/analytics \\\nCONVAI_ANALYTICS_E2E_RANGE=last_30d \\\nCONVAI_ANALYTICS_E2E_DELAY_MS=6500 \\\nmake e2e-stg\n```\n\n## More Documentation\n\n- [`docs/getting-started.md`](docs/getting-started.md)\n- [`docs/concepts.md`](docs/concepts.md)\n- [`docs/metrics-reference.md`](docs/metrics-reference.md)\n- [`docs/prompts.md`](docs/prompts.md)\n- [`docs/charts.md`](docs/charts.md)\n- [`ROADMAP.md`](ROADMAP.md)\n",
  "bytes": 22660,
  "sha": "99673e474ca42fca3ba8725c0a93952c1a5ca78ef491c705e93c8b049411ecc7",
  "repo_slug": "conv-ai/convai-analytics",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_conv_ai_convai_analytics_mcp_f4f806ae/readme"
}