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.
Files changed (81) hide show
  1. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/deploy-cloudflare-worker.yml +21 -18
  2. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/PKG-INFO +31 -4
  3. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/README.md +30 -3
  4. tavus_cli-0.3.1/docs/usage-observability.md +65 -0
  5. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/pyproject.toml +1 -1
  6. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/SKILL.md +38 -1
  7. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/__init__.py +1 -1
  8. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/cli/main.py +751 -105
  9. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/session.py +19 -1
  10. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/client/http.py +256 -34
  11. tavus_cli-0.3.1/src/tavus_mcp/sdk/recipes/capabilities.py +397 -0
  12. tavus_cli-0.3.1/src/tavus_mcp/sdk/recipes/knowledge.py +221 -0
  13. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/options.py +24 -0
  14. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/server.py +581 -64
  15. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/integration/test_cli.py +32 -0
  16. tavus_cli-0.3.1/tests/integration/test_client.py +281 -0
  17. tavus_cli-0.3.1/tests/integration/test_mcp_server.py +49 -0
  18. tavus_cli-0.3.1/tests/unit/test_capabilities.py +175 -0
  19. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/uv.lock +686 -688
  20. tavus_cli-0.3.1/workers/tavus-mcp/src/tavus.ts +2091 -0
  21. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/test/tavus.test.ts +119 -0
  22. tavus_cli-0.2.0/tests/integration/test_client.py +0 -138
  23. tavus_cli-0.2.0/tests/integration/test_mcp_server.py +0 -15
  24. tavus_cli-0.2.0/workers/tavus-mcp/src/tavus.ts +0 -939
  25. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.env.example +0 -0
  26. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/ci.yml +0 -0
  27. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/pr-reviews.yml +0 -0
  28. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.github/workflows/pypi-cli.yml +0 -0
  29. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/.gitignore +0 -0
  30. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/docs/gemini-enterprise/README.md +0 -0
  31. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/docs/gemini-enterprise/listing.md +0 -0
  32. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/docs/gemini-enterprise/test-queries.md +0 -0
  33. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/agents/openai.yaml +0 -0
  34. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/build-and-verify.md +0 -0
  35. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/builder-workflow.md +0 -0
  36. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/chat-mode.md +0 -0
  37. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/skills/tavus-agentic-pals/references/examples.md +0 -0
  38. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/cli/__init__.py +0 -0
  39. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/__init__.py +0 -0
  40. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
  41. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
  42. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
  43. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/client/__init__.py +0 -0
  44. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/env.py +0 -0
  45. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/errors.py +0 -0
  46. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/patch.py +0 -0
  47. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/__init__.py +0 -0
  48. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/build_and_verify.py +0 -0
  49. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/quickstart.py +0 -0
  50. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
  51. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/templates.py +0 -0
  52. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/recipes/tool_reuse.py +0 -0
  53. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/__init__.py +0 -0
  54. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
  55. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
  56. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
  57. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/pal.py +0 -0
  58. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
  59. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
  60. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/conftest.py +0 -0
  61. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/integration/test_oauth.py +0 -0
  62. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_auth.py +0 -0
  63. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_build_and_verify.py +0 -0
  64. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_builder.py +0 -0
  65. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_conversation_chat.py +0 -0
  66. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_env.py +0 -0
  67. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_guardrail_schema.py +0 -0
  68. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_objective_schema.py +0 -0
  69. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_pal_schema.py +0 -0
  70. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_patch.py +0 -0
  71. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_pronunciation_schema.py +0 -0
  72. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_scaffold_embed.py +0 -0
  73. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_tool_reuse.py +0 -0
  74. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/tests/unit/test_tool_schema.py +0 -0
  75. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/.dev.vars.example +0 -0
  76. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/package-lock.json +0 -0
  77. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/package.json +0 -0
  78. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/src/index.ts +0 -0
  79. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/src/oauth.ts +0 -0
  80. {tavus_cli-0.2.0 → tavus_cli-0.3.1}/workers/tavus-mcp/tsconfig.json +0 -0
  81. {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: ${{ inputs.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.2.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 Cloudflare/GitHub environment secrets:
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
- Then run the `Deploy Tavus MCP Worker` workflow for `test`, `stg`, or `prod`.
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 Cloudflare/GitHub environment secrets:
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
- Then run the `Deploy Tavus MCP Worker` workflow for `test`, `stg`, or `prod`.
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.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tavus-cli"
3
- version = "0.2.0"
3
+ version = "0.3.1"
4
4
  description = "Tavus CLI and MCP server for agentic PAL creation and editing."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -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
@@ -1,4 +1,4 @@
1
1
  """Tavus CLI and MCP server package."""
2
2
 
3
3
  __all__ = ["__version__"]
4
- __version__ = "0.1.1"
4
+ __version__ = "0.3.1"