tavus-cli 0.2.0__tar.gz → 0.3.1__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.2.0 → tavus_cli-0.3.1}/.github/workflows/deploy-cloudflare-worker.yml +21 -18
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/PKG-INFO +31 -4
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/README.md +30 -3
- tavus_cli-0.3.1/docs/usage-observability.md +65 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/pyproject.toml +1 -1
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/SKILL.md +38 -1
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/__init__.py +1 -1
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/cli/main.py +751 -105
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/session.py +19 -1
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/client/http.py +256 -34
- tavus_cli-0.3.1/src/tavus_mcp/sdk/recipes/capabilities.py +397 -0
- tavus_cli-0.3.1/src/tavus_mcp/sdk/recipes/knowledge.py +221 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/options.py +24 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/server.py +581 -64
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/integration/test_cli.py +32 -0
- tavus_cli-0.3.1/tests/integration/test_client.py +281 -0
- tavus_cli-0.3.1/tests/integration/test_mcp_server.py +49 -0
- tavus_cli-0.3.1/tests/unit/test_capabilities.py +175 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/uv.lock +686 -688
- tavus_cli-0.3.1/workers/tavus-mcp/src/tavus.ts +2091 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/test/tavus.test.ts +119 -0
- tavus_cli-0.2.0/tests/integration/test_client.py +0 -138
- tavus_cli-0.2.0/tests/integration/test_mcp_server.py +0 -15
- tavus_cli-0.2.0/workers/tavus-mcp/src/tavus.ts +0 -939
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.env.example +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/ci.yml +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/pr-reviews.yml +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/pypi-cli.yml +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.gitignore +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/docs/gemini-enterprise/README.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/docs/gemini-enterprise/listing.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/docs/gemini-enterprise/test-queries.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/agents/openai.yaml +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/build-and-verify.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/builder-workflow.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/chat-mode.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/examples.md +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/cli/__init__.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/__init__.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/client/__init__.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/env.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/errors.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/patch.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/__init__.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/build_and_verify.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/quickstart.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/templates.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/tool_reuse.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/__init__.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/pal.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/conftest.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/integration/test_oauth.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_auth.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_build_and_verify.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_builder.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_conversation_chat.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_env.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_guardrail_schema.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_objective_schema.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_pal_schema.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_patch.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_pronunciation_schema.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_scaffold_embed.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_tool_reuse.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_tool_schema.py +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/.dev.vars.example +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/package-lock.json +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/package.json +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/src/index.ts +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/src/oauth.ts +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/tsconfig.json +0 -0
- {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/wrangler.jsonc +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
|
+
Version: 0.3.1
|
|
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
|
|
@@ -94,8 +94,29 @@ uv run tavus doctor
|
|
|
94
94
|
uv run tavus pal list
|
|
95
95
|
uv run tavus pal options <pal_id>
|
|
96
96
|
uv run tavus pal patch <pal_id> --op replace --path /pal_name --value '"New Name"'
|
|
97
|
+
uv run tavus pal capabilities list <pal_id>
|
|
98
|
+
uv run tavus pal capabilities attach <pal_id> web_search
|
|
99
|
+
uv run tavus pal capabilities attach <pal_id> slide_presenter --document-id <document_id> --slides-trigger walk_the_deck
|
|
100
|
+
uv run tavus document create --url https://example.com/handbook.pdf --tag onboarding
|
|
101
|
+
TAVUS_PORTAL_BEARER_TOKEN=<firebase-id-token> uv run tavus document upload ./handbook.pdf --tag onboarding
|
|
102
|
+
uv run tavus pal knowledge add <pal_id> --document-id <document_id>
|
|
103
|
+
TAVUS_PORTAL_BEARER_TOKEN=<firebase-id-token> uv run tavus pal knowledge upload <pal_id> ./handbook.pdf
|
|
97
104
|
```
|
|
98
105
|
|
|
106
|
+
`pal capabilities` mirrors PAL Maker's built-in capability surface:
|
|
107
|
+
Magic Canvas (`magic_canvas`), Slide Presenter (`slide_presenter`), Web Search
|
|
108
|
+
(`web_search`), Perception (`perception`), and Memory (`memory`). The first,
|
|
109
|
+
second, third, and fifth map to RQH PAL skills; Perception maps to
|
|
110
|
+
`layers.perception`.
|
|
111
|
+
|
|
112
|
+
`document` and `pal knowledge` mirror PAL Maker's Knowledge section. With a
|
|
113
|
+
normal Tavus API key, create Knowledge documents from an already reachable URL
|
|
114
|
+
via RQH `/v2/documents`. Local file upload uses the same portal-only flow as
|
|
115
|
+
PAL Maker (local file -> tavus-api upload/S3 URL -> RQH document record), so it
|
|
116
|
+
requires `TAVUS_PORTAL_BEARER_TOKEN`. PAL Knowledge attachment uses
|
|
117
|
+
`document_ids` and `document_tags`; RAG tuning lives under
|
|
118
|
+
`layers.knowledge_base`.
|
|
119
|
+
|
|
99
120
|
## MCP
|
|
100
121
|
|
|
101
122
|
```json
|
|
@@ -160,13 +181,19 @@ Keep the Worker environment aligned with the portal environment that minted the
|
|
|
160
181
|
key. For example, a TEST key from a local or dev portal must hit a Worker running
|
|
161
182
|
with `--env test`, otherwise downstream Tavus API calls will return 401.
|
|
162
183
|
|
|
163
|
-
For Tavus deployment, configure these
|
|
184
|
+
For Tavus deployment, configure these GitHub environment secrets for each
|
|
185
|
+
deployable environment (`test`, `stg`, `prod`):
|
|
164
186
|
|
|
165
187
|
- `CLOUDFLARE_API_TOKEN`
|
|
166
188
|
- `CLOUDFLARE_ACCOUNT_ID`
|
|
167
|
-
- `TAVUS_API_KEY` and `MCP_BEARER_TOKEN` only if you need the legacy shared-token fallback
|
|
168
189
|
|
|
169
|
-
|
|
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`.
|
|
170
197
|
The `prod` Wrangler route is configured as a custom domain on `mcp.tavus.io`;
|
|
171
198
|
use `https://mcp.tavus-preview.io/mcp` as the Cloudflare-owned endpoint until
|
|
172
199
|
`mcp.tavus.io` DNS resolves.
|
|
@@ -74,8 +74,29 @@ uv run tavus doctor
|
|
|
74
74
|
uv run tavus pal list
|
|
75
75
|
uv run tavus pal options <pal_id>
|
|
76
76
|
uv run tavus pal patch <pal_id> --op replace --path /pal_name --value '"New Name"'
|
|
77
|
+
uv run tavus pal capabilities list <pal_id>
|
|
78
|
+
uv run tavus pal capabilities attach <pal_id> web_search
|
|
79
|
+
uv run tavus pal capabilities attach <pal_id> slide_presenter --document-id <document_id> --slides-trigger walk_the_deck
|
|
80
|
+
uv run tavus document create --url https://example.com/handbook.pdf --tag onboarding
|
|
81
|
+
TAVUS_PORTAL_BEARER_TOKEN=<firebase-id-token> uv run tavus document upload ./handbook.pdf --tag onboarding
|
|
82
|
+
uv run tavus pal knowledge add <pal_id> --document-id <document_id>
|
|
83
|
+
TAVUS_PORTAL_BEARER_TOKEN=<firebase-id-token> uv run tavus pal knowledge upload <pal_id> ./handbook.pdf
|
|
77
84
|
```
|
|
78
85
|
|
|
86
|
+
`pal capabilities` mirrors PAL Maker's built-in capability surface:
|
|
87
|
+
Magic Canvas (`magic_canvas`), Slide Presenter (`slide_presenter`), Web Search
|
|
88
|
+
(`web_search`), Perception (`perception`), and Memory (`memory`). The first,
|
|
89
|
+
second, third, and fifth map to RQH PAL skills; Perception maps to
|
|
90
|
+
`layers.perception`.
|
|
91
|
+
|
|
92
|
+
`document` and `pal knowledge` mirror PAL Maker's Knowledge section. With a
|
|
93
|
+
normal Tavus API key, create Knowledge documents from an already reachable URL
|
|
94
|
+
via RQH `/v2/documents`. Local file upload uses the same portal-only flow as
|
|
95
|
+
PAL Maker (local file -> tavus-api upload/S3 URL -> RQH document record), so it
|
|
96
|
+
requires `TAVUS_PORTAL_BEARER_TOKEN`. PAL Knowledge attachment uses
|
|
97
|
+
`document_ids` and `document_tags`; RAG tuning lives under
|
|
98
|
+
`layers.knowledge_base`.
|
|
99
|
+
|
|
79
100
|
## MCP
|
|
80
101
|
|
|
81
102
|
```json
|
|
@@ -140,13 +161,19 @@ Keep the Worker environment aligned with the portal environment that minted the
|
|
|
140
161
|
key. For example, a TEST key from a local or dev portal must hit a Worker running
|
|
141
162
|
with `--env test`, otherwise downstream Tavus API calls will return 401.
|
|
142
163
|
|
|
143
|
-
For Tavus deployment, configure these
|
|
164
|
+
For Tavus deployment, configure these GitHub environment secrets for each
|
|
165
|
+
deployable environment (`test`, `stg`, `prod`):
|
|
144
166
|
|
|
145
167
|
- `CLOUDFLARE_API_TOKEN`
|
|
146
168
|
- `CLOUDFLARE_ACCOUNT_ID`
|
|
147
|
-
- `TAVUS_API_KEY` and `MCP_BEARER_TOKEN` only if you need the legacy shared-token fallback
|
|
148
169
|
|
|
149
|
-
|
|
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`.
|
|
150
177
|
The `prod` Wrangler route is configured as a custom domain on `mcp.tavus.io`;
|
|
151
178
|
use `https://mcp.tavus-preview.io/mcp` as the Cloudflare-owned endpoint until
|
|
152
179
|
`mcp.tavus.io` DNS resolves.
|
|
@@ -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.
|
|
@@ -100,6 +100,26 @@ PAL tools:
|
|
|
100
100
|
- `tavus_patch_pal(pal_id, ops)`
|
|
101
101
|
- `tavus_describe_pal_options(pal_id)`
|
|
102
102
|
- `tavus_pal_from_template(template, pal_name, business_context, default_face_id, layers)`
|
|
103
|
+
- `tavus_skill_list()`
|
|
104
|
+
- `tavus_pal_skills_list(pal_id)`
|
|
105
|
+
- `tavus_pal_skill_attach|patch|detach(pal_id, skill_id, config?)`
|
|
106
|
+
- `tavus_pal_capability_catalog()`
|
|
107
|
+
- `tavus_pal_capabilities_list(pal_id)`
|
|
108
|
+
- `tavus_pal_capability_attach|patch|detach(pal_id, capability_id, ...)`
|
|
109
|
+
|
|
110
|
+
Knowledge document tools:
|
|
111
|
+
|
|
112
|
+
- `tavus_document_list(limit?, page?, status?, tags?, participant_tags?, name_or_uuid?, verbose?)`
|
|
113
|
+
- `tavus_document_get(document_id, verbose?)`
|
|
114
|
+
- `tavus_document_create(document_url, document_name?, tags?, participant_tags?, crawl?, custom_description?, is_customer_support_document?, font_size_aware_extraction?)`
|
|
115
|
+
- `tavus_document_upload(local_path, document_name?, tags?, participant_tags?, custom_description?, is_customer_support_document?, font_size_aware_extraction?, bucket_name?, region?, sign_duration?)` — requires `TAVUS_PORTAL_BEARER_TOKEN`; with only a Tavus API key, use `tavus_document_create` with a public/presigned URL
|
|
116
|
+
- `tavus_document_tags(search?, page?, limit?)`
|
|
117
|
+
- `tavus_document_chunks(document_id, collection?, limit?, offset?)`
|
|
118
|
+
- `tavus_document_recrawl(document_id, crawl?)`
|
|
119
|
+
- `tavus_pal_knowledge_list(pal_id)`
|
|
120
|
+
- `tavus_pal_knowledge_add|remove|replace(pal_id, document_ids?, document_tags?)`
|
|
121
|
+
- `tavus_pal_knowledge_settings_patch(pal_id, rag_score_threshold?, rag_n_chunks?, rag_surrounding_chunk_radius?, enable_rag_observability_app_messages?, use_procedure_goalchain?)`
|
|
122
|
+
- `tavus_pal_knowledge_upload(pal_id, local_path, ...)` — upload a local file and attach it to the PAL by default; requires `TAVUS_PORTAL_BEARER_TOKEN`
|
|
103
123
|
|
|
104
124
|
Conversation and resource tools:
|
|
105
125
|
|
|
@@ -107,7 +127,7 @@ Conversation and resource tools:
|
|
|
107
127
|
- `tavus_conversation_create(pal_id, face_id, conversation_name)`
|
|
108
128
|
- `tavus_conversation_end(conversation_id)`
|
|
109
129
|
- `tavus_quickstart(system_prompt, pal_name, face_id)`
|
|
110
|
-
- `tavus_resource_list(resource, limit)` for `guardrails`, `objectives`, `documents`, `voices`, or `tools`
|
|
130
|
+
- `tavus_resource_list(resource, limit)` for `guardrails`, `objectives`, `documents`, `voices`, `skills`, or `tools`
|
|
111
131
|
- `tavus_scaffold_embed(conversation_url, target, component_name)`
|
|
112
132
|
|
|
113
133
|
`tavus_scaffold_embed` returns a file manifest. The MCP host agent writes files if the user wants files created.
|
|
@@ -138,6 +158,23 @@ Autonomous build + verify (one call drives the full loop):
|
|
|
138
158
|
|
|
139
159
|
Before patching an existing pal, call `tavus_describe_pal_options` or `tavus pal options`. Use its `available` resources and `schemas.patchable_paths` output to choose valid IDs and patch paths.
|
|
140
160
|
|
|
161
|
+
For PAL Maker capabilities, prefer `tavus_pal_capability_*` or
|
|
162
|
+
`uv run tavus pal capabilities ...` over raw JSON Patch. Supported capability
|
|
163
|
+
ids are `magic_canvas`, `slide_presenter`, `web_search`, `perception`, and
|
|
164
|
+
`memory` (also accepts the portal ids `builtin:magic_canvas`,
|
|
165
|
+
`builtin:slide_presenter`, `builtin:web_search`, and `skill:memory`). Magic
|
|
166
|
+
Canvas, Slide Presenter, Web Search, and Memory persist through
|
|
167
|
+
`/pals/{id}/skills`; Perception persists through `/layers/perception`.
|
|
168
|
+
|
|
169
|
+
For PAL Knowledge, prefer `tavus_pal_knowledge_*` or
|
|
170
|
+
`uv run tavus pal knowledge ...` over raw JSON Patch. The Knowledge section is
|
|
171
|
+
`document_ids` plus `document_tags`, and RAG tuning lives under
|
|
172
|
+
`layers.knowledge_base`. Use `tavus_document_chunks` before making content
|
|
173
|
+
claims about an uploaded document; it reads the text RQH actually indexed.
|
|
174
|
+
The Tavus API-key path creates documents from an already reachable URL. Local
|
|
175
|
+
file upload goes through the developer-portal upload endpoint and needs a
|
|
176
|
+
Firebase portal bearer token in `TAVUS_PORTAL_BEARER_TOKEN`.
|
|
177
|
+
|
|
141
178
|
Prefer focused patches over full rebuilds:
|
|
142
179
|
|
|
143
180
|
```json
|