tavus-cli 0.1.1__tar.gz → 0.3.0__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 (85) hide show
  1. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/PKG-INFO +41 -16
  2. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/README.md +39 -14
  3. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/docs/gemini-enterprise/README.md +21 -16
  4. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/docs/gemini-enterprise/listing.md +8 -8
  5. tavus_cli-0.3.0/docs/gemini-enterprise/test-queries.md +161 -0
  6. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/pyproject.toml +2 -2
  7. tavus_cli-0.3.0/skills/tavus-agentic-pals/SKILL.md +245 -0
  8. tavus_cli-0.3.0/skills/tavus-agentic-pals/agents/openai.yaml +4 -0
  9. {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/build-and-verify.md +27 -27
  10. {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/builder-workflow.md +37 -37
  11. {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/chat-mode.md +19 -19
  12. {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/examples.md +23 -23
  13. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/cli/main.py +809 -160
  14. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/session.py +19 -1
  15. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/client/http.py +230 -44
  16. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/patch.py +3 -3
  17. tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/__init__.py +6 -0
  18. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/build_and_verify.py +83 -71
  19. tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/capabilities.py +397 -0
  20. tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/knowledge.py +221 -0
  21. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/options.py +37 -13
  22. tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/quickstart.py +50 -0
  23. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/templates.py +9 -9
  24. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/tool_reuse.py +4 -4
  25. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/__init__.py +5 -5
  26. tavus_cli-0.1.1/src/tavus_mcp/sdk/schemas/persona.py → tavus_cli-0.3.0/src/tavus_mcp/sdk/schemas/pal.py +8 -8
  27. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/server.py +522 -99
  28. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/integration/test_cli.py +38 -6
  29. tavus_cli-0.3.0/tests/integration/test_client.py +269 -0
  30. tavus_cli-0.3.0/tests/integration/test_mcp_server.py +26 -0
  31. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_build_and_verify.py +57 -49
  32. tavus_cli-0.3.0/tests/unit/test_capabilities.py +175 -0
  33. tavus_cli-0.1.1/tests/unit/test_persona_schema.py → tavus_cli-0.3.0/tests/unit/test_pal_schema.py +14 -14
  34. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_patch.py +5 -5
  35. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_tool_reuse.py +2 -2
  36. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/uv.lock +1 -1
  37. tavus_cli-0.3.0/workers/tavus-mcp/src/tavus.ts +1949 -0
  38. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/test/tavus.test.ts +72 -8
  39. tavus_cli-0.1.1/docs/gemini-enterprise/test-queries.md +0 -161
  40. tavus_cli-0.1.1/skills/tavus-agentic-personas/SKILL.md +0 -208
  41. tavus_cli-0.1.1/skills/tavus-agentic-personas/agents/openai.yaml +0 -4
  42. tavus_cli-0.1.1/src/tavus_mcp/sdk/recipes/__init__.py +0 -6
  43. tavus_cli-0.1.1/src/tavus_mcp/sdk/recipes/quickstart.py +0 -48
  44. tavus_cli-0.1.1/tests/integration/test_client.py +0 -138
  45. tavus_cli-0.1.1/tests/integration/test_mcp_server.py +0 -15
  46. tavus_cli-0.1.1/workers/tavus-mcp/src/tavus.ts +0 -936
  47. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.env.example +0 -0
  48. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/ci.yml +0 -0
  49. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/deploy-cloudflare-worker.yml +0 -0
  50. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/pr-reviews.yml +0 -0
  51. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/pypi-cli.yml +0 -0
  52. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.gitignore +0 -0
  53. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/__init__.py +0 -0
  54. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/cli/__init__.py +0 -0
  55. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/__init__.py +0 -0
  56. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
  57. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
  58. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
  59. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/client/__init__.py +0 -0
  60. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/env.py +0 -0
  61. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/errors.py +0 -0
  62. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
  63. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
  64. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
  65. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
  66. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
  67. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
  68. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/conftest.py +0 -0
  69. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/integration/test_oauth.py +0 -0
  70. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_auth.py +0 -0
  71. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_builder.py +0 -0
  72. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_conversation_chat.py +0 -0
  73. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_env.py +0 -0
  74. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_guardrail_schema.py +0 -0
  75. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_objective_schema.py +0 -0
  76. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_pronunciation_schema.py +0 -0
  77. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_scaffold_embed.py +0 -0
  78. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_tool_schema.py +0 -0
  79. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/.dev.vars.example +0 -0
  80. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/package-lock.json +0 -0
  81. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/package.json +0 -0
  82. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/src/index.ts +0 -0
  83. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/src/oauth.ts +0 -0
  84. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/tsconfig.json +0 -0
  85. {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/wrangler.jsonc +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tavus-cli
3
- Version: 0.1.1
4
- Summary: Tavus CLI and MCP server for agentic persona creation and editing.
3
+ Version: 0.3.0
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
7
7
  Requires-Dist: httpx>=0.27.0
@@ -20,21 +20,25 @@ Description-Content-Type: text/markdown
20
20
 
21
21
  # tavus-cli
22
22
 
23
- Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus persona creation end-to-end — separate from the human-facing Conversational Persona Builder.
23
+ Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus PAL creation end-to-end — separate from the human-facing PAL Maker.
24
24
 
25
25
  ## What's here
26
26
 
27
- - **MCP server.** Persona CRUD plus mutations for tools, KB, guardrails, pronunciation dicts, layers, and objectives. Local stdio for IDE-embedded clients, remote (Cloudflare Worker) for hosted agents.
28
- - **CLI.** Scripted persona authoring + publish. `tavus persona list / options / patch`, JSON round-tripping, OS-keychain auth.
27
+ - **MCP server.** PAL CRUD plus mutations for tools, KB, guardrails, pronunciation dicts, layers, and objectives. Local stdio for IDE-embedded clients, remote (Cloudflare Worker) for hosted agents.
28
+ - **CLI.** Scripted PAL authoring + publish. `tavus pal list / options / patch`, JSON round-tripping, OS-keychain auth.
29
29
  - **Codex skill.** Publishable skill so an external agent can invoke the MCP server and CLI without reading the full Tavus API.
30
30
 
31
- ## Why standalone (not under Conversational Persona Builder)
31
+ ## Why standalone (not under PAL Maker)
32
32
 
33
- The Conversational Persona Builder project is the **human** builder — replica-driven, in-product. This repo is for **agents driving the API** without that UI. Adjacent in code and concepts, but a different deliverable and audience.
33
+ The PAL Maker project is the **human** builder — face-driven, in-product. This repo is for **agents driving the API** without that UI. Adjacent in code and concepts, but a different deliverable and audience.
34
+
35
+ > The Tavus API exposes `/v2/pals` and `/v2/faces` as backwards-compatible
36
+ > vocabulary aliases over `/v2/personas` and `/v2/replicas`. This toolkit speaks
37
+ > the new pal/face vocabulary throughout.
34
38
 
35
39
  ## Out of scope (for now)
36
40
 
37
- - Replica/video preview surfaces (live in the Conversational Persona Builder)
41
+ - Face/video preview surfaces (live in the PAL Maker)
38
42
  - Marketplace / sharing UX
39
43
  - Multi-tenant auth beyond the existing dev-portal token model
40
44
 
@@ -57,11 +61,11 @@ Examples:
57
61
 
58
62
  ```bash
59
63
  # Production defaults; only the API key is required.
60
- TAVUS_API_KEY=... uv run tavus persona list
64
+ TAVUS_API_KEY=... uv run tavus pal list
61
65
 
62
66
  # Test DB without URL overrides.
63
- TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus persona list
64
- uv run tavus --env TEST persona list
67
+ TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus pal list
68
+ uv run tavus --env TEST pal list
65
69
  ```
66
70
 
67
71
  The login flow opens the dev-portal at `/dev/cli-authorize` with a loopback callback URL and an
@@ -87,11 +91,32 @@ Local development commands:
87
91
 
88
92
  ```bash
89
93
  uv run tavus doctor
90
- uv run tavus persona list
91
- uv run tavus persona options <persona_id>
92
- uv run tavus persona patch <persona_id> --op replace --path /persona_name --value '"New Name"'
94
+ uv run tavus pal list
95
+ uv run tavus pal options <pal_id>
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
93
104
  ```
94
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
+
95
120
  ## MCP
96
121
 
97
122
  ```json
@@ -184,8 +209,8 @@ OAuth routes yet.
184
209
 
185
210
  ## Codex Skill
186
211
 
187
- A publishable Codex skill for this repo lives at `skills/tavus-agentic-personas/`.
188
- It documents the CLI and MCP workflows, safe persona patching, environment setup,
212
+ A publishable Codex skill for this repo lives at `skills/tavus-agentic-pals/`.
213
+ It documents the CLI and MCP workflows, safe PAL patching, environment setup,
189
214
  and concrete examples for agents using this toolkit.
190
215
 
191
216
  Install it by copying that folder into `${CODEX_HOME:-$HOME/.codex}/skills/`, or
@@ -1,20 +1,24 @@
1
1
  # tavus-cli
2
2
 
3
- Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus persona creation end-to-end — separate from the human-facing Conversational Persona Builder.
3
+ Agent-facing surfaces that let another agent (Claude, Codex, or any MCP-aware client) drive Tavus PAL creation end-to-end — separate from the human-facing PAL Maker.
4
4
 
5
5
  ## What's here
6
6
 
7
- - **MCP server.** Persona CRUD plus mutations for tools, KB, guardrails, pronunciation dicts, layers, and objectives. Local stdio for IDE-embedded clients, remote (Cloudflare Worker) for hosted agents.
8
- - **CLI.** Scripted persona authoring + publish. `tavus persona list / options / patch`, JSON round-tripping, OS-keychain auth.
7
+ - **MCP server.** PAL CRUD plus mutations for tools, KB, guardrails, pronunciation dicts, layers, and objectives. Local stdio for IDE-embedded clients, remote (Cloudflare Worker) for hosted agents.
8
+ - **CLI.** Scripted PAL authoring + publish. `tavus pal list / options / patch`, JSON round-tripping, OS-keychain auth.
9
9
  - **Codex skill.** Publishable skill so an external agent can invoke the MCP server and CLI without reading the full Tavus API.
10
10
 
11
- ## Why standalone (not under Conversational Persona Builder)
11
+ ## Why standalone (not under PAL Maker)
12
12
 
13
- The Conversational Persona Builder project is the **human** builder — replica-driven, in-product. This repo is for **agents driving the API** without that UI. Adjacent in code and concepts, but a different deliverable and audience.
13
+ The PAL Maker project is the **human** builder — face-driven, in-product. This repo is for **agents driving the API** without that UI. Adjacent in code and concepts, but a different deliverable and audience.
14
+
15
+ > The Tavus API exposes `/v2/pals` and `/v2/faces` as backwards-compatible
16
+ > vocabulary aliases over `/v2/personas` and `/v2/replicas`. This toolkit speaks
17
+ > the new pal/face vocabulary throughout.
14
18
 
15
19
  ## Out of scope (for now)
16
20
 
17
- - Replica/video preview surfaces (live in the Conversational Persona Builder)
21
+ - Face/video preview surfaces (live in the PAL Maker)
18
22
  - Marketplace / sharing UX
19
23
  - Multi-tenant auth beyond the existing dev-portal token model
20
24
 
@@ -37,11 +41,11 @@ Examples:
37
41
 
38
42
  ```bash
39
43
  # Production defaults; only the API key is required.
40
- TAVUS_API_KEY=... uv run tavus persona list
44
+ TAVUS_API_KEY=... uv run tavus pal list
41
45
 
42
46
  # Test DB without URL overrides.
43
- TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus persona list
44
- uv run tavus --env TEST persona list
47
+ TAVUS_ENV=TEST TAVUS_API_KEY=... uv run tavus pal list
48
+ uv run tavus --env TEST pal list
45
49
  ```
46
50
 
47
51
  The login flow opens the dev-portal at `/dev/cli-authorize` with a loopback callback URL and an
@@ -67,11 +71,32 @@ Local development commands:
67
71
 
68
72
  ```bash
69
73
  uv run tavus doctor
70
- uv run tavus persona list
71
- uv run tavus persona options <persona_id>
72
- uv run tavus persona patch <persona_id> --op replace --path /persona_name --value '"New Name"'
74
+ uv run tavus pal list
75
+ uv run tavus pal options <pal_id>
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
73
84
  ```
74
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
+
75
100
  ## MCP
76
101
 
77
102
  ```json
@@ -164,8 +189,8 @@ OAuth routes yet.
164
189
 
165
190
  ## Codex Skill
166
191
 
167
- A publishable Codex skill for this repo lives at `skills/tavus-agentic-personas/`.
168
- It documents the CLI and MCP workflows, safe persona patching, environment setup,
192
+ A publishable Codex skill for this repo lives at `skills/tavus-agentic-pals/`.
193
+ It documents the CLI and MCP workflows, safe PAL patching, environment setup,
169
194
  and concrete examples for agents using this toolkit.
170
195
 
171
196
  Install it by copying that folder into `${CODEX_HOME:-$HOME/.codex}/skills/`, or
@@ -86,14 +86,19 @@ after the connector passes Gemini Enterprise's review in `stg`.
86
86
 
87
87
  ## Scopes
88
88
 
89
+ > **Naming note.** Tools and API paths use the new **pal/face** vocabulary
90
+ > (`tavus_pal_*`, `/v2/pals`, `/v2/faces`). The OAuth **scope** strings remain
91
+ > `tavus.personas.*` / `tavus.resources.*` — they are an auth-server contract and
92
+ > are intentionally left unchanged until the auth team confirms pal-named scopes.
93
+
89
94
  | Scope | Grants |
90
95
  | --- | --- |
91
96
  | `tavus` | All scopes below (umbrella; default when no scope requested) |
92
- | `tavus.personas.read` | List, get, and describe personas + attached resources |
93
- | `tavus.personas.write` | Create, patch, delete personas; create from templates |
97
+ | `tavus.personas.read` | List, get, and describe pals + attached resources |
98
+ | `tavus.personas.write` | Create, patch, delete pals; create from templates |
94
99
  | `tavus.conversations.read` | (Reserved — read-only conversation tools land in a follow-up) |
95
100
  | `tavus.conversations.write` | Create + end conversations; run `tavus_quickstart` |
96
- | `tavus.resources.read` | List replicas, voices, guardrails, objectives, documents, llm tools; scaffold embed code |
101
+ | `tavus.resources.read` | List faces, voices, guardrails, objectives, documents, llm tools; scaffold embed code |
97
102
 
98
103
  ## Tools → scope → API
99
104
 
@@ -102,17 +107,17 @@ forwarded from the bearer token.
102
107
 
103
108
  | Tool | Scope | Tavus API path |
104
109
  | --- | --- | --- |
105
- | `tavus_persona_list` | `tavus.personas.read` | `GET /v2/personas` |
106
- | `tavus_persona_get` | `tavus.personas.read` | `GET /v2/personas/{id}` |
107
- | `tavus_describe_persona_options` | `tavus.personas.read` | `GET /v2/personas/{id}` + `GET /v2/{replicas,voices,guardrails,objectives,documents,tools}` |
108
- | `tavus_persona_create` | `tavus.personas.write` | `POST /v2/personas` |
109
- | `tavus_persona_from_template` | `tavus.personas.write` | `POST /v2/personas` |
110
- | `tavus_persona_delete` | `tavus.personas.write` | `DELETE /v2/personas/{id}` |
111
- | `tavus_patch_persona` | `tavus.personas.write` | `PATCH /v2/personas/{id}` |
110
+ | `tavus_pal_list` | `tavus.personas.read` | `GET /v2/pals` |
111
+ | `tavus_pal_get` | `tavus.personas.read` | `GET /v2/pals/{id}` |
112
+ | `tavus_describe_pal_options` | `tavus.personas.read` | `GET /v2/pals/{id}` + `GET /v2/{faces,voices,guardrails,objectives,documents,tools}` |
113
+ | `tavus_pal_create` | `tavus.personas.write` | `POST /v2/pals` |
114
+ | `tavus_pal_from_template` | `tavus.personas.write` | `POST /v2/pals` |
115
+ | `tavus_pal_delete` | `tavus.personas.write` | `DELETE /v2/pals/{id}` |
116
+ | `tavus_patch_pal` | `tavus.personas.write` | `PATCH /v2/pals/{id}` |
112
117
  | `tavus_conversation_create` | `tavus.conversations.write` | `POST /v2/conversations` |
113
118
  | `tavus_conversation_end` | `tavus.conversations.write` | `POST /v2/conversations/{id}/end` |
114
- | `tavus_quickstart` | `tavus.conversations.write` (+ implicit `tavus.personas.write`) | `POST /v2/personas` + `POST /v2/conversations` |
115
- | `tavus_replica_list` | `tavus.resources.read` | `GET /v2/replicas` |
119
+ | `tavus_quickstart` | `tavus.conversations.write` (+ implicit `tavus.personas.write`) | `POST /v2/pals` + `POST /v2/conversations` |
120
+ | `tavus_face_list` | `tavus.resources.read` | `GET /v2/faces` |
116
121
  | `tavus_resource_list` | `tavus.resources.read` | `GET /v2/{guardrails,objectives,documents,voices,tools}` |
117
122
  | `tavus_scaffold_embed` | `tavus.resources.read` | none (returns starter HTML/TSX locally) |
118
123
 
@@ -123,12 +128,12 @@ should rely on:
123
128
 
124
129
  | Annotation | Tools |
125
130
  | --- | --- |
126
- | `readOnlyHint: true` | `tavus_persona_list`, `tavus_persona_get`, `tavus_describe_persona_options`, `tavus_replica_list`, `tavus_resource_list`, `tavus_scaffold_embed` |
127
- | `destructiveHint: true` | `tavus_persona_delete`, `tavus_patch_persona`, `tavus_conversation_end` |
131
+ | `readOnlyHint: true` | `tavus_pal_list`, `tavus_pal_get`, `tavus_describe_pal_options`, `tavus_face_list`, `tavus_resource_list`, `tavus_scaffold_embed` |
132
+ | `destructiveHint: true` | `tavus_pal_delete`, `tavus_patch_pal`, `tavus_conversation_end` |
128
133
  | `openWorldHint: false` | `tavus_scaffold_embed` (returns local code, no network) |
129
134
 
130
135
  `idempotentHint: false` is set on every create-style tool that produces a new
131
- persona or conversation ID.
136
+ pal or conversation ID.
132
137
 
133
138
  ## Adding the connector in Gemini Enterprise
134
139
 
@@ -160,7 +165,7 @@ persona or conversation ID.
160
165
  | Production | `https://mcp.tavus.io/mcp` | `https://tavusapi.com/v2` | `https://platform.tavus.io` | provided privately |
161
166
 
162
167
  Each env has a dedicated `gemini-enterprise-test@tavus.io` account pre-seeded
163
- with eval personas, replicas, and documents. Credentials and the golden query
168
+ with eval pals, faces, and documents. Credentials and the golden query
164
169
  set ship out-of-band to the Gemini Enterprise reviewer.
165
170
 
166
171
  ## Support
@@ -6,18 +6,18 @@ intake. Edit here; ship the final values to the Gemini Enterprise admin.
6
6
  ## Short description (≤ 140 chars)
7
7
 
8
8
  > Create, configure, and run Tavus Conversational Video Interface (CVI)
9
- > personas and conversations from inside Gemini Enterprise.
9
+ > pals and conversations from inside Gemini Enterprise.
10
10
 
11
11
  ## Long description (1–2 paragraphs)
12
12
 
13
13
  > Tavus is the Conversational Video Interface (CVI) platform powering real-time
14
- > AI video agents — replica avatars that hear, see, and respond on a Daily WebRTC
15
- > call. This connector lets a Gemini Enterprise agent author Tavus personas
16
- > (prompt, replica, voice, knowledge base, guardrails, objectives, perception
14
+ > AI video agents — face avatars that hear, see, and respond on a Daily WebRTC
15
+ > call. This connector lets a Gemini Enterprise agent author Tavus pals
16
+ > (prompt, face, voice, knowledge base, guardrails, objectives, perception
17
17
  > layers) and spin up live conversations entirely through MCP.
18
18
  >
19
- > Typical agent tasks: "Create a tutor persona for our onboarding flow and start
20
- > a conversation," "rename persona X and swap its replica," "list all personas
19
+ > Typical agent tasks: "Create a tutor pal for our onboarding flow and start
20
+ > a conversation," "rename pal X and swap its face," "list all pals
21
21
  > tagged as customer-support and end any active conversations on them," or
22
22
  > "scaffold the React snippet I need to embed conversation Y in our portal."
23
23
  > Every write tool declares a destructive hint, every read tool declares a
@@ -74,7 +74,7 @@ API keys.** Tavus will share them via Google's secure intake channel.
74
74
 
75
75
  ## Marketplace tags
76
76
 
77
- `conversational-video`, `ai-agents`, `webrtc`, `avatars`, `cvi`, `personas`,
77
+ `conversational-video`, `ai-agents`, `webrtc`, `avatars`, `cvi`, `pals`,
78
78
  `mcp`.
79
79
 
80
80
  ## Outstanding before submission
@@ -84,7 +84,7 @@ API keys.** Tavus will share them via Google's secure intake channel.
84
84
  mirroring [README.md](./README.md).
85
85
  - [ ] Stand up `mcp-connectors@tavus.io` distribution list.
86
86
  - [ ] Mint the three `gemini-enterprise-test+<env>@tavus.io` accounts and
87
- seed each with the personas/replicas listed in
87
+ seed each with the pals/faces listed in
88
88
  [test-queries.md](./test-queries.md).
89
89
  - [ ] Reserve a final marketing-approved short + long description (the copy
90
90
  above is a starting point, not a sign-off).
@@ -0,0 +1,161 @@
1
+ # Tavus MCP — Gemini Enterprise eval query set
2
+
3
+ This is the "golden" query set Gemini Enterprise's review team runs against
4
+ each test environment. Each query lists the natural-language prompt, the tool
5
+ the agent is expected to call, the expected response shape, and the pass/fail
6
+ criteria.
7
+
8
+ Each test-env Tavus account is pre-seeded with at least:
9
+
10
+ - 3 pals (`customer-support-demo`, `interviewer-demo`, `tutor-demo`)
11
+ - 5 system faces
12
+ - 2 documents
13
+ - 1 guardrail set
14
+ - 1 objective tree
15
+
16
+ Credentials and exact pal/face IDs are delivered out-of-band per
17
+ [README.md → Test environments](./README.md#test-environments).
18
+
19
+ ## Tool coverage matrix
20
+
21
+ | # | Query intent | Tool exercised | Scope required |
22
+ | --- | --- | --- | --- |
23
+ | 1 | List pals | `tavus_pal_list` | `tavus.personas.read` |
24
+ | 2 | Get a pal | `tavus_pal_get` | `tavus.personas.read` |
25
+ | 3 | Describe pal options | `tavus_describe_pal_options` | `tavus.personas.read` |
26
+ | 4 | Create a pal | `tavus_pal_create` | `tavus.personas.write` |
27
+ | 5 | Create pal from template | `tavus_pal_from_template` | `tavus.personas.write` |
28
+ | 6 | Patch a pal | `tavus_patch_pal` | `tavus.personas.write` |
29
+ | 7 | Delete a pal | `tavus_pal_delete` | `tavus.personas.write` |
30
+ | 8 | List faces | `tavus_face_list` | `tavus.resources.read` |
31
+ | 9 | List voices | `tavus_resource_list` | `tavus.resources.read` |
32
+ | 10 | Scaffold embed code | `tavus_scaffold_embed` | `tavus.resources.read` |
33
+ | 11 | Quickstart end-to-end | `tavus_quickstart` | `tavus.personas.write` + `tavus.conversations.write` |
34
+ | 12 | Create + end a conversation | `tavus_conversation_create`, `tavus_conversation_end` | `tavus.conversations.write` |
35
+
36
+ ## Queries
37
+
38
+ ### 1 — List pals
39
+
40
+ > "Show me the first ten pals in my Tavus account."
41
+
42
+ - **Expected tool call:** `tavus_pal_list({ "limit": 10 })`
43
+ - **Expected response shape:**
44
+ ```jsonc
45
+ { "data": [ { "pal_id": "p…", "pal_name": "…", "created_at": "…" } ] }
46
+ ```
47
+ - **Pass criteria:** `data.length >= 3`; every entry has a `pal_id` and a
48
+ `pal_name`.
49
+
50
+ ### 2 — Get a pal
51
+
52
+ > "What's the system prompt on pal `customer-support-demo`?"
53
+
54
+ - **Expected tool call:** `tavus_pal_get({ "pal_id": "<id>", "include_settings": true })`
55
+ - **Pass criteria:** response includes `system_prompt` matching the seed value
56
+ `"You are a warm, concise customer support specialist…"`.
57
+
58
+ ### 3 — Describe pal options
59
+
60
+ > "What faces, voices, and guardrails can I attach to pal `customer-support-demo`?"
61
+
62
+ - **Expected tool call:** `tavus_describe_pal_options({ "pal_id": "<id>" })`
63
+ - **Pass criteria:** response includes `available.faces`, `available.voices`,
64
+ `available.guardrails`, and `schemas.patchable_paths`.
65
+
66
+ ### 4 — Create a pal
67
+
68
+ > "Create a new pal named `Gemini-eval-create` with the system prompt
69
+ > `You are a Gemini Enterprise eval bot. Answer questions briefly.`"
70
+
71
+ - **Expected tool call:** `tavus_pal_create({ "pal_name": "Gemini-eval-create", "system_prompt": "You are a Gemini Enterprise eval bot…" })`
72
+ - **Pass criteria:** response contains a `pal_id`; a follow-up
73
+ `tavus_pal_get` on that ID returns the same prompt.
74
+ - **Cleanup:** call `tavus_pal_delete` on the returned `pal_id`.
75
+
76
+ ### 5 — Create pal from template
77
+
78
+ > "Spin up an interviewer pal biased for a senior backend role."
79
+
80
+ - **Expected tool call:** `tavus_pal_from_template({ "template": "interviewer", "business_context": "Senior backend interview." })`
81
+ - **Pass criteria:** `pal_id` returned; system prompt contains the literal
82
+ string `"Business context:"` followed by the supplied context.
83
+ - **Cleanup:** delete the created pal.
84
+
85
+ ### 6 — Patch a pal
86
+
87
+ > "Rename pal `customer-support-demo` to `customer-support-demo-renamed`."
88
+
89
+ - **Expected tool call:** `tavus_patch_pal({ "pal_id": "<id>", "ops": [ { "op": "replace", "path": "/pal_name", "value": "customer-support-demo-renamed" } ] })`
90
+ - **Pass criteria:** subsequent `tavus_pal_get` returns the new name.
91
+ - **Cleanup:** patch the name back to `customer-support-demo`.
92
+
93
+ ### 7 — Delete a pal
94
+
95
+ > "Delete pal `<temp-id>`." (use the pal created in query 4)
96
+
97
+ - **Expected tool call:** `tavus_pal_delete({ "pal_id": "<id>" })`
98
+ - **Pass criteria:** subsequent `tavus_pal_get` returns 404.
99
+
100
+ ### 8 — List faces
101
+
102
+ > "What stock faces are available?"
103
+
104
+ - **Expected tool call:** `tavus_face_list({ "stock": true })`
105
+ - **Pass criteria:** `data.length >= 5`; each entry has a `face_id` and a
106
+ `face_name`.
107
+
108
+ ### 9 — List voices
109
+
110
+ > "Show me 25 voices on the account."
111
+
112
+ - **Expected tool call:** `tavus_resource_list({ "resource": "voices", "limit": 25 })`
113
+ - **Pass criteria:** `data` is an array of objects with `voice_id` (or
114
+ equivalent ID field).
115
+
116
+ ### 10 — Scaffold embed code
117
+
118
+ > "Give me the React iframe snippet for conversation
119
+ > `https://tavus.daily.co/example`."
120
+
121
+ - **Expected tool call:** `tavus_scaffold_embed({ "conversation_url": "https://tavus.daily.co/example", "target": "iframe" })`
122
+ - **Pass criteria:** response contains a `files[0].content` string with the
123
+ conversation URL embedded inside an `<iframe>` tag.
124
+
125
+ ### 11 — Quickstart end-to-end
126
+
127
+ > "Make me a tutor pal that explains gradient descent and start a
128
+ > conversation with it."
129
+
130
+ - **Expected tool call:** `tavus_quickstart({ "system_prompt": "<tutor prompt>", "pal_name": "Gradient descent tutor" })`
131
+ - **Pass criteria:** response contains both `pal.pal_id` and
132
+ `conversation.conversation_id`, plus a `conversation_url` on the
133
+ conversation object.
134
+ - **Cleanup:** call `tavus_conversation_end` on the conversation, then
135
+ `tavus_pal_delete` on the pal.
136
+
137
+ ### 12 — Create + end a conversation
138
+
139
+ > "Create a conversation with pal `customer-support-demo`."
140
+
141
+ - **Expected tool call:** `tavus_conversation_create({ "pal_id": "<id>" })`
142
+ - **Pass criteria:** response contains a `conversation_id` and a
143
+ `conversation_url`.
144
+
145
+ > "End that conversation."
146
+
147
+ - **Expected tool call:** `tavus_conversation_end({ "conversation_id": "<id>" })`
148
+ - **Pass criteria:** 2xx response; a subsequent `tavus_conversation_create`
149
+ against the same pal succeeds (i.e. the pal is not locked).
150
+
151
+ ## Failure handling
152
+
153
+ For every query, Gemini Enterprise's tester should:
154
+
155
+ - Confirm the bearer token survives in `Authorization: Bearer …` on every
156
+ follow-up MCP call.
157
+ - Confirm the tool's `annotations.destructiveHint` matches the spec table in
158
+ the [README](./README.md#tool-annotations) — destructive tools should prompt
159
+ the user before invocation.
160
+ - Capture any non-2xx Tavus API response in the eval log; Tavus support will
161
+ triage based on the embedded `status` + `body` fields.
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "tavus-cli"
3
- version = "0.1.1"
4
- description = "Tavus CLI and MCP server for agentic persona creation and editing."
3
+ version = "0.3.0"
4
+ description = "Tavus CLI and MCP server for agentic PAL creation and editing."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
7
7
  dependencies = [