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.
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/PKG-INFO +41 -16
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/README.md +39 -14
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/docs/gemini-enterprise/README.md +21 -16
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/docs/gemini-enterprise/listing.md +8 -8
- tavus_cli-0.3.0/docs/gemini-enterprise/test-queries.md +161 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/pyproject.toml +2 -2
- tavus_cli-0.3.0/skills/tavus-agentic-pals/SKILL.md +245 -0
- tavus_cli-0.3.0/skills/tavus-agentic-pals/agents/openai.yaml +4 -0
- {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
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/builder-workflow.md +37 -37
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/chat-mode.md +19 -19
- {tavus_cli-0.1.1/skills/tavus-agentic-personas → tavus_cli-0.3.0/skills/tavus-agentic-pals}/references/examples.md +23 -23
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/cli/main.py +809 -160
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/session.py +19 -1
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/client/http.py +230 -44
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/patch.py +3 -3
- tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/__init__.py +6 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/build_and_verify.py +83 -71
- tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/capabilities.py +397 -0
- tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/knowledge.py +221 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/options.py +37 -13
- tavus_cli-0.3.0/src/tavus_mcp/sdk/recipes/quickstart.py +50 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/templates.py +9 -9
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/tool_reuse.py +4 -4
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/__init__.py +5 -5
- 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
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/server.py +522 -99
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/integration/test_cli.py +38 -6
- tavus_cli-0.3.0/tests/integration/test_client.py +269 -0
- tavus_cli-0.3.0/tests/integration/test_mcp_server.py +26 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_build_and_verify.py +57 -49
- tavus_cli-0.3.0/tests/unit/test_capabilities.py +175 -0
- tavus_cli-0.1.1/tests/unit/test_persona_schema.py → tavus_cli-0.3.0/tests/unit/test_pal_schema.py +14 -14
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_patch.py +5 -5
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_tool_reuse.py +2 -2
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/uv.lock +1 -1
- tavus_cli-0.3.0/workers/tavus-mcp/src/tavus.ts +1949 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/test/tavus.test.ts +72 -8
- tavus_cli-0.1.1/docs/gemini-enterprise/test-queries.md +0 -161
- tavus_cli-0.1.1/skills/tavus-agentic-personas/SKILL.md +0 -208
- tavus_cli-0.1.1/skills/tavus-agentic-personas/agents/openai.yaml +0 -4
- tavus_cli-0.1.1/src/tavus_mcp/sdk/recipes/__init__.py +0 -6
- tavus_cli-0.1.1/src/tavus_mcp/sdk/recipes/quickstart.py +0 -48
- tavus_cli-0.1.1/tests/integration/test_client.py +0 -138
- tavus_cli-0.1.1/tests/integration/test_mcp_server.py +0 -15
- tavus_cli-0.1.1/workers/tavus-mcp/src/tavus.ts +0 -936
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.env.example +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/ci.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/deploy-cloudflare-worker.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/pr-reviews.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.github/workflows/pypi-cli.yml +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/.gitignore +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/cli/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/client/__init__.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/env.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/errors.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/conftest.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/integration/test_oauth.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_auth.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_builder.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_conversation_chat.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_env.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_guardrail_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_objective_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_pronunciation_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_scaffold_embed.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/tests/unit/test_tool_schema.py +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/.dev.vars.example +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/package-lock.json +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/package.json +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/src/index.ts +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/src/oauth.ts +0 -0
- {tavus_cli-0.1.1 → tavus_cli-0.3.0}/workers/tavus-mcp/tsconfig.json +0 -0
- {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.
|
|
4
|
-
Summary: Tavus CLI and MCP server for agentic
|
|
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
|
|
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.**
|
|
28
|
-
- **CLI.** Scripted
|
|
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
|
|
31
|
+
## Why standalone (not under PAL Maker)
|
|
32
32
|
|
|
33
|
-
The
|
|
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
|
-
-
|
|
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
|
|
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
|
|
64
|
-
uv run tavus --env TEST
|
|
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
|
|
91
|
-
uv run tavus
|
|
92
|
-
uv run tavus
|
|
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-
|
|
188
|
-
It documents the CLI and MCP workflows, safe
|
|
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
|
|
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.**
|
|
8
|
-
- **CLI.** Scripted
|
|
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
|
|
11
|
+
## Why standalone (not under PAL Maker)
|
|
12
12
|
|
|
13
|
-
The
|
|
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
|
-
-
|
|
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
|
|
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
|
|
44
|
-
uv run tavus --env TEST
|
|
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
|
|
71
|
-
uv run tavus
|
|
72
|
-
uv run tavus
|
|
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-
|
|
168
|
-
It documents the CLI and MCP workflows, safe
|
|
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
|
|
93
|
-
| `tavus.personas.write` | Create, patch, delete
|
|
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
|
|
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
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
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/
|
|
115
|
-
| `
|
|
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` | `
|
|
127
|
-
| `destructiveHint: true` | `
|
|
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
|
-
|
|
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
|
|
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
|
-
>
|
|
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 —
|
|
15
|
-
> call. This connector lets a Gemini Enterprise agent author Tavus
|
|
16
|
-
> (prompt,
|
|
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
|
|
20
|
-
> a conversation," "rename
|
|
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`, `
|
|
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
|
|
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.
|
|
4
|
-
description = "Tavus CLI and MCP server for agentic
|
|
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 = [
|