tavus-cli 0.3.0__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/.github/workflows/deploy-cloudflare-worker.yml +21 -18
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/PKG-INFO +24 -11
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/README.md +23 -10
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/docs/gemini-enterprise/README.md +10 -7
- tavus_cli-0.3.2/docs/usage-observability.md +65 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/pyproject.toml +1 -1
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/__init__.py +1 -1
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/cli/main.py +78 -78
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/client/http.py +39 -3
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/server.py +182 -83
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/integration/test_client.py +13 -1
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/integration/test_mcp_server.py +24 -1
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/uv.lock +1 -1
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/src/tavus.ts +146 -4
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/test/tavus.test.ts +55 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/wrangler.jsonc +6 -4
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/.env.example +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/.github/workflows/ci.yml +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/.github/workflows/pr-reviews.yml +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/.github/workflows/pypi-cli.yml +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/.gitignore +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/docs/gemini-enterprise/listing.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/docs/gemini-enterprise/test-queries.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/skills/tavus-agentic-pals/SKILL.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/skills/tavus-agentic-pals/agents/openai.yaml +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/skills/tavus-agentic-pals/references/build-and-verify.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/skills/tavus-agentic-pals/references/builder-workflow.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/skills/tavus-agentic-pals/references/chat-mode.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/skills/tavus-agentic-pals/references/examples.md +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/cli/__init__.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/__init__.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/auth/session.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/client/__init__.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/env.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/errors.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/patch.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/__init__.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/build_and_verify.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/capabilities.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/knowledge.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/options.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/quickstart.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/templates.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/recipes/tool_reuse.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/__init__.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/pal.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/conftest.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/integration/test_cli.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/integration/test_oauth.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_auth.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_build_and_verify.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_builder.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_capabilities.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_conversation_chat.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_env.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_guardrail_schema.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_objective_schema.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_pal_schema.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_patch.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_pronunciation_schema.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_scaffold_embed.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_tool_reuse.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/tests/unit/test_tool_schema.py +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/.dev.vars.example +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/package-lock.json +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/package.json +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/src/index.ts +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/src/oauth.ts +0 -0
- {tavus_cli-0.3.0 → tavus_cli-0.3.2}/workers/tavus-mcp/tsconfig.json +0 -0
|
@@ -12,20 +12,26 @@ on:
|
|
|
12
12
|
- test
|
|
13
13
|
- stg
|
|
14
14
|
- prod
|
|
15
|
+
push:
|
|
16
|
+
branches:
|
|
17
|
+
- main
|
|
15
18
|
|
|
16
19
|
permissions:
|
|
17
20
|
contents: read
|
|
18
21
|
|
|
22
|
+
concurrency:
|
|
23
|
+
group: deploy-tavus-mcp-worker-${{ github.event_name == 'workflow_dispatch' && inputs.environment || 'prod' }}
|
|
24
|
+
cancel-in-progress: true
|
|
25
|
+
|
|
19
26
|
jobs:
|
|
20
27
|
deploy:
|
|
21
28
|
runs-on: ubuntu-latest
|
|
22
|
-
environment
|
|
29
|
+
# Manual dispatch picks the requested environment; merges to main deploy prod.
|
|
30
|
+
environment: ${{ github.event_name == 'workflow_dispatch' && inputs.environment || 'prod' }}
|
|
23
31
|
env:
|
|
24
32
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
25
33
|
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
26
|
-
CLOUDFLARE_ENV: ${{ inputs.environment }}
|
|
27
|
-
TAVUS_API_KEY: ${{ secrets.TAVUS_API_KEY }}
|
|
28
|
-
MCP_BEARER_TOKEN: ${{ secrets.MCP_BEARER_TOKEN }}
|
|
34
|
+
CLOUDFLARE_ENV: ${{ github.event_name == 'workflow_dispatch' && inputs.environment || 'prod' }}
|
|
29
35
|
defaults:
|
|
30
36
|
run:
|
|
31
37
|
working-directory: workers/tavus-mcp
|
|
@@ -41,6 +47,17 @@ jobs:
|
|
|
41
47
|
cache: npm
|
|
42
48
|
cache-dependency-path: workers/tavus-mcp/package-lock.json
|
|
43
49
|
|
|
50
|
+
- name: Validate deployment secrets
|
|
51
|
+
run: |
|
|
52
|
+
if [ -z "${CLOUDFLARE_API_TOKEN:-}" ]; then
|
|
53
|
+
echo "::error::Missing CLOUDFLARE_API_TOKEN GitHub secret for environment '$CLOUDFLARE_ENV'."
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
if [ -z "${CLOUDFLARE_ACCOUNT_ID:-}" ]; then
|
|
57
|
+
echo "::error::Missing CLOUDFLARE_ACCOUNT_ID GitHub secret for environment '$CLOUDFLARE_ENV'."
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
44
61
|
- name: Install dependencies
|
|
45
62
|
run: npm ci
|
|
46
63
|
|
|
@@ -50,19 +67,5 @@ jobs:
|
|
|
50
67
|
- name: Test
|
|
51
68
|
run: npm run test
|
|
52
69
|
|
|
53
|
-
- name: Configure legacy shared-token fallback secrets
|
|
54
|
-
run: |
|
|
55
|
-
if [ -n "${TAVUS_API_KEY:-}" ]; then
|
|
56
|
-
printf '%s' "$TAVUS_API_KEY" | npx wrangler secret put TAVUS_API_KEY --env "$CLOUDFLARE_ENV"
|
|
57
|
-
else
|
|
58
|
-
echo "Skipping TAVUS_API_KEY; OAuth user bearer tokens do not require the legacy fallback."
|
|
59
|
-
fi
|
|
60
|
-
|
|
61
|
-
if [ -n "${MCP_BEARER_TOKEN:-}" ]; then
|
|
62
|
-
printf '%s' "$MCP_BEARER_TOKEN" | npx wrangler secret put MCP_BEARER_TOKEN --env "$CLOUDFLARE_ENV"
|
|
63
|
-
else
|
|
64
|
-
echo "Skipping MCP_BEARER_TOKEN; OAuth user bearer tokens do not require the legacy fallback."
|
|
65
|
-
fi
|
|
66
|
-
|
|
67
70
|
- name: Deploy Worker
|
|
68
71
|
run: npx wrangler deploy --env "$CLOUDFLARE_ENV"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tavus-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Tavus CLI and MCP server for agentic PAL creation and editing.
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Requires-Dist: fastmcp>=2.0.0
|
|
@@ -156,7 +156,7 @@ endpoints so MCP clients can authenticate through Tavus browser auth.
|
|
|
156
156
|
Claude Code example:
|
|
157
157
|
|
|
158
158
|
```bash
|
|
159
|
-
claude mcp add -s user --transport http tavus https://mcp.tavus
|
|
159
|
+
claude mcp add -s user --transport http tavus https://mcp.tavus.io/mcp
|
|
160
160
|
```
|
|
161
161
|
|
|
162
162
|
The OAuth authorize step redirects to Tavus developer portal
|
|
@@ -181,25 +181,38 @@ Keep the Worker environment aligned with the portal environment that minted the
|
|
|
181
181
|
key. For example, a TEST key from a local or dev portal must hit a Worker running
|
|
182
182
|
with `--env test`, otherwise downstream Tavus API calls will return 401.
|
|
183
183
|
|
|
184
|
-
For Tavus deployment, configure these
|
|
184
|
+
For Tavus deployment, configure these GitHub environment secrets for each
|
|
185
|
+
deployable environment (`test`, `stg`, `prod`):
|
|
185
186
|
|
|
186
187
|
- `CLOUDFLARE_API_TOKEN`
|
|
187
188
|
- `CLOUDFLARE_ACCOUNT_ID`
|
|
188
|
-
- `TAVUS_API_KEY` and `MCP_BEARER_TOKEN` only if you need the legacy shared-token fallback
|
|
189
189
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
Worker runtime secrets, such as the legacy `TAVUS_API_KEY` or
|
|
191
|
+
`MCP_BEARER_TOKEN` fallback, should be set in Cloudflare with
|
|
192
|
+
`wrangler secret put <NAME> --env <environment>`. They persist across deploys;
|
|
193
|
+
the GitHub workflow does not read or overwrite them.
|
|
194
|
+
|
|
195
|
+
Merges to `main` automatically run the `Deploy Tavus MCP Worker` workflow for
|
|
196
|
+
`prod`. You can also run the workflow manually for `test`, `stg`, or `prod`.
|
|
197
|
+
The public MCP endpoint is always `https://mcp.tavus.io/mcp`. The
|
|
198
|
+
`mcp.tavus-preview.io` custom domain belongs only to the `stg` Worker and must
|
|
199
|
+
not be published as a production fallback.
|
|
200
|
+
|
|
201
|
+
| Deployment | Worker | Hosted endpoint | Tavus API |
|
|
202
|
+
| --- | --- | --- | --- |
|
|
203
|
+
| `test` | `tavus-mcp-test` | Workers.dev URL | `https://test.rqh.tavusapi.com/v2` |
|
|
204
|
+
| `stg` | `tavus-mcp-stg` | `https://mcp.tavus-preview.io/mcp` | `https://stg.rqh.tavusapi.com/v2` |
|
|
205
|
+
| `prod` | `tavus-mcp-prod` | `https://mcp.tavus.io/mcp` | `https://tavusapi.com/v2` |
|
|
206
|
+
|
|
194
207
|
For direct Wrangler usage, the default config targets production; use
|
|
195
208
|
`wrangler deploy --env test` or `wrangler dev --env test` to point at TEST.
|
|
196
209
|
|
|
197
210
|
Useful production checks:
|
|
198
211
|
|
|
199
212
|
```bash
|
|
200
|
-
curl https://mcp.tavus
|
|
201
|
-
curl https://mcp.tavus
|
|
202
|
-
curl -i https://mcp.tavus
|
|
213
|
+
curl https://mcp.tavus.io/.well-known/oauth-protected-resource/mcp
|
|
214
|
+
curl https://mcp.tavus.io/.well-known/oauth-authorization-server
|
|
215
|
+
curl -i https://mcp.tavus.io/mcp
|
|
203
216
|
```
|
|
204
217
|
|
|
205
218
|
Unauthenticated `/mcp` should return `401` with a `WWW-Authenticate` header that
|
|
@@ -136,7 +136,7 @@ endpoints so MCP clients can authenticate through Tavus browser auth.
|
|
|
136
136
|
Claude Code example:
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
claude mcp add -s user --transport http tavus https://mcp.tavus
|
|
139
|
+
claude mcp add -s user --transport http tavus https://mcp.tavus.io/mcp
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
The OAuth authorize step redirects to Tavus developer portal
|
|
@@ -161,25 +161,38 @@ Keep the Worker environment aligned with the portal environment that minted the
|
|
|
161
161
|
key. For example, a TEST key from a local or dev portal must hit a Worker running
|
|
162
162
|
with `--env test`, otherwise downstream Tavus API calls will return 401.
|
|
163
163
|
|
|
164
|
-
For Tavus deployment, configure these
|
|
164
|
+
For Tavus deployment, configure these GitHub environment secrets for each
|
|
165
|
+
deployable environment (`test`, `stg`, `prod`):
|
|
165
166
|
|
|
166
167
|
- `CLOUDFLARE_API_TOKEN`
|
|
167
168
|
- `CLOUDFLARE_ACCOUNT_ID`
|
|
168
|
-
- `TAVUS_API_KEY` and `MCP_BEARER_TOKEN` only if you need the legacy shared-token fallback
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
Worker runtime secrets, such as the legacy `TAVUS_API_KEY` or
|
|
171
|
+
`MCP_BEARER_TOKEN` fallback, should be set in Cloudflare with
|
|
172
|
+
`wrangler secret put <NAME> --env <environment>`. They persist across deploys;
|
|
173
|
+
the GitHub workflow does not read or overwrite them.
|
|
174
|
+
|
|
175
|
+
Merges to `main` automatically run the `Deploy Tavus MCP Worker` workflow for
|
|
176
|
+
`prod`. You can also run the workflow manually for `test`, `stg`, or `prod`.
|
|
177
|
+
The public MCP endpoint is always `https://mcp.tavus.io/mcp`. The
|
|
178
|
+
`mcp.tavus-preview.io` custom domain belongs only to the `stg` Worker and must
|
|
179
|
+
not be published as a production fallback.
|
|
180
|
+
|
|
181
|
+
| Deployment | Worker | Hosted endpoint | Tavus API |
|
|
182
|
+
| --- | --- | --- | --- |
|
|
183
|
+
| `test` | `tavus-mcp-test` | Workers.dev URL | `https://test.rqh.tavusapi.com/v2` |
|
|
184
|
+
| `stg` | `tavus-mcp-stg` | `https://mcp.tavus-preview.io/mcp` | `https://stg.rqh.tavusapi.com/v2` |
|
|
185
|
+
| `prod` | `tavus-mcp-prod` | `https://mcp.tavus.io/mcp` | `https://tavusapi.com/v2` |
|
|
186
|
+
|
|
174
187
|
For direct Wrangler usage, the default config targets production; use
|
|
175
188
|
`wrangler deploy --env test` or `wrangler dev --env test` to point at TEST.
|
|
176
189
|
|
|
177
190
|
Useful production checks:
|
|
178
191
|
|
|
179
192
|
```bash
|
|
180
|
-
curl https://mcp.tavus
|
|
181
|
-
curl https://mcp.tavus
|
|
182
|
-
curl -i https://mcp.tavus
|
|
193
|
+
curl https://mcp.tavus.io/.well-known/oauth-protected-resource/mcp
|
|
194
|
+
curl https://mcp.tavus.io/.well-known/oauth-authorization-server
|
|
195
|
+
curl -i https://mcp.tavus.io/mcp
|
|
183
196
|
```
|
|
184
197
|
|
|
185
198
|
Unauthenticated `/mcp` should return `401` with a `WWW-Authenticate` header that
|
|
@@ -10,9 +10,7 @@ workflow for adding Tavus to a Gemini Enterprise instance.
|
|
|
10
10
|
| Field | Value |
|
|
11
11
|
| --- | --- |
|
|
12
12
|
| MCP transport | Streamable HTTP (no SSE) |
|
|
13
|
-
| Production MCP URL | `https://mcp.tavus.io/mcp`
|
|
14
|
-
| Staging MCP URL | `https://tavus-mcp-stg.<workers-dev>/mcp` |
|
|
15
|
-
| Test MCP URL | `https://tavus-mcp-test.<workers-dev>/mcp` |
|
|
13
|
+
| Production MCP URL | `https://mcp.tavus.io/mcp` |
|
|
16
14
|
| Auth | OAuth 2.1 Authorization Code + PKCE (S256), 3LO via Tavus dev portal |
|
|
17
15
|
| Tool annotations | Every tool declares `readOnlyHint` / `destructiveHint` |
|
|
18
16
|
| Public spec | This document |
|
|
@@ -156,12 +154,17 @@ pal or conversation ID.
|
|
|
156
154
|
4. Run any of the queries in [test-queries.md](./test-queries.md) to confirm
|
|
157
155
|
tools execute end-to-end.
|
|
158
156
|
|
|
159
|
-
##
|
|
157
|
+
## Review environments
|
|
160
158
|
|
|
161
|
-
|
|
159
|
+
Public documentation and customer integrations must use only
|
|
160
|
+
`https://mcp.tavus.io/mcp`. Tavus supplies non-production MCP endpoints and
|
|
161
|
+
credentials privately for connector certification; they are not production
|
|
162
|
+
mirrors or customer-facing fallbacks.
|
|
163
|
+
|
|
164
|
+
| Env | MCP access | API base | Dev portal | Test account |
|
|
162
165
|
| --- | --- | --- | --- | --- |
|
|
163
|
-
| Test |
|
|
164
|
-
| Staging |
|
|
166
|
+
| Test | provided privately | `https://test.rqh.tavusapi.com/v2` | `https://dev.platform.tavus.io` | provided privately |
|
|
167
|
+
| Staging | provided privately | `https://stg.rqh.tavusapi.com/v2` | `https://stage.platform.tavus.io` | provided privately |
|
|
165
168
|
| Production | `https://mcp.tavus.io/mcp` | `https://tavusapi.com/v2` | `https://platform.tavus.io` | provided privately |
|
|
166
169
|
|
|
167
170
|
Each env has a dedicated `gemini-enterprise-test@tavus.io` account pre-seeded
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# MCP and CLI usage observability
|
|
2
|
+
|
|
3
|
+
The Tavus CLI, local MCP server, and hosted MCP Worker identify their downstream
|
|
4
|
+
Tavus API requests with a source-specific user agent:
|
|
5
|
+
|
|
6
|
+
| Surface | User agent |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| CLI | `tavus-cli/<version>` |
|
|
9
|
+
| Local MCP server | `tavus-mcp/<version>` |
|
|
10
|
+
| Hosted MCP Worker | `tavus-mcp-worker/0.1.0` |
|
|
11
|
+
|
|
12
|
+
They also send the matching low-cardinality `X-Tavus-Client-Source` header. The
|
|
13
|
+
header is available for future structured attribution; the user agent works with
|
|
14
|
+
request-handler's current access logging today.
|
|
15
|
+
|
|
16
|
+
## SigNoz data path
|
|
17
|
+
|
|
18
|
+
Request-handler already exports an access-log pair for each authenticated Tavus
|
|
19
|
+
API request. Both records share an OpenTelemetry trace ID:
|
|
20
|
+
|
|
21
|
+
- `log_request_data` records URL, method, request body, and the tagged user agent.
|
|
22
|
+
- `after_request_logging` records route, HTTP status, auth type, and authenticated
|
|
23
|
+
`user_id`.
|
|
24
|
+
|
|
25
|
+
In SigNoz, scope the logs to `service.name = request-handler` and
|
|
26
|
+
`deployment.environment = prod`, select request records whose body contains one
|
|
27
|
+
of the user-agent prefixes above, and join the response record on `trace_id`.
|
|
28
|
+
|
|
29
|
+
That joined dataset supports the usage dashboard:
|
|
30
|
+
|
|
31
|
+
| Question | Signal |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| How many people use it? | distinct authenticated `user_id`, split by surface |
|
|
34
|
+
| How much is it used? | request count and requests per user over time |
|
|
35
|
+
| How successful is it? | 2xx/3xx share versus 4xx/5xx share |
|
|
36
|
+
| What query types run? | normalized HTTP method and Tavus API route |
|
|
37
|
+
| How large are queries? | byte length of the logged request-body field |
|
|
38
|
+
| Which errors occur? | response status distribution, split by route and surface |
|
|
39
|
+
|
|
40
|
+
The existing [MCP Dashboard](https://tavus.us.signoz.cloud/dashboard/019affed-8fd9-756e-a889-d5da6157c976)
|
|
41
|
+
only contains five legacy `mcp.*` latency panels. Those metrics had no matching
|
|
42
|
+
data in the 30 days checked on July 31, 2026, and the dashboard does not currently
|
|
43
|
+
measure adoption or CLI usage. Replace them with this production-only layout:
|
|
44
|
+
|
|
45
|
+
- KPI row: API requests, unique users, success rate, and requests per user.
|
|
46
|
+
- Hourly trends: requests and unique users, each split by CLI, local MCP, and
|
|
47
|
+
hosted MCP.
|
|
48
|
+
- Tables: method plus normalized route family, request-body size percentiles,
|
|
49
|
+
and HTTP 4xx/5xx codes.
|
|
50
|
+
|
|
51
|
+
The ClickHouse queries for that layout were dry-run against the current
|
|
52
|
+
request-handler log schema. The final `tavus-*` filters are expected to return no
|
|
53
|
+
historical rows until this source tagging is released.
|
|
54
|
+
|
|
55
|
+
## Boundaries
|
|
56
|
+
|
|
57
|
+
- Collection starts when this change is deployed/released; it does not recreate
|
|
58
|
+
reliable historical surface attribution.
|
|
59
|
+
- Counts are downstream Tavus API requests, not top-level MCP tool calls or CLI
|
|
60
|
+
invocations. Local-only operations such as help, auth status, path listing, and
|
|
61
|
+
embed scaffolding do not generate an API request and are not counted.
|
|
62
|
+
- No API key, prompt, or request body is added to telemetry by this change. The
|
|
63
|
+
source tags contain only the product surface and package version. Request-handler
|
|
64
|
+
continues applying its existing API-key truncation and 64 KiB body-redaction
|
|
65
|
+
policy.
|