tavus-cli 0.4.4__tar.gz → 0.4.5__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.4.5/.release-please-manifest.json +3 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/CHANGELOG.md +7 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/PKG-INFO +1 -1
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/packages/tavus/pyproject.toml +2 -2
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/packages/tavus-mcp/pyproject.toml +2 -2
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/pyproject.toml +1 -1
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/__init__.py +1 -1
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/uv.lock +1 -1
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/package-lock.json +2 -2
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/package.json +1 -1
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/src/oauth.ts +14 -1
- tavus_cli-0.4.5/workers/tavus-mcp/src/version.ts +1 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/test/tavus.test.ts +41 -0
- tavus_cli-0.4.4/.release-please-manifest.json +0 -3
- tavus_cli-0.4.4/workers/tavus-mcp/src/version.ts +0 -1
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.env.example +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.github/workflows/ci.yml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.github/workflows/deploy-cloudflare-worker.yml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.github/workflows/pr-reviews.yml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.github/workflows/pypi-cli.yml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.github/workflows/tail-cloudflare-worker.yml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.github/workflows/validate-staging-deployment.yml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/.gitignore +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/AGENTS.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/README.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/docs/gemini-enterprise/README.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/docs/gemini-enterprise/listing.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/docs/gemini-enterprise/test-queries.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/docs/usage-observability.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/packages/tavus/README.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/packages/tavus-mcp/README.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/release-please-config.json +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/scripts/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/scripts/check_release_versions.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/SKILL.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/agents/openai.yaml +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/references/build-and-verify.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/references/builder-workflow.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/references/chat-mode.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/references/examples.md +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/cli/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/cli/main.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/auth/session.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/client/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/client/http.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/daily_transport.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/env.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/errors.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/pal_urls.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/patch.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/build_and_verify.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/capabilities.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/carrier_builder.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/knowledge.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/options.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/quickstart.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/templates.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/recipes/tool_reuse.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/__init__.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/pal.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/src/tavus_mcp/server.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/conftest.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/integration/test_cli.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/integration/test_client.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/integration/test_mcp_server.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/integration/test_oauth.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_auth.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_build_and_verify.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_builder.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_capabilities.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_daily_transport.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_env.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_guardrail_schema.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_objective_schema.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_pal_schema.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_patch.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_pronunciation_schema.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_release_versions.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_scaffold_embed.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_tool_reuse.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/tests/unit/test_tool_schema.py +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/.dev.vars.example +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/src/index.ts +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/src/oauth-grant.ts +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/src/tavus.ts +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/test/parity.test.ts +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/tsconfig.json +0 -0
- {tavus_cli-0.4.4 → tavus_cli-0.4.5}/workers/tavus-mcp/wrangler.jsonc +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.4.5](https://github.com/Tavus-Engineering/tavus-mcp/compare/v0.4.4...v0.4.5) (2026-09-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* accept Cursor and IPv6 loopback DCR callbacks ([#49](https://github.com/Tavus-Engineering/tavus-mcp/issues/49)) ([8c9d9f3](https://github.com/Tavus-Engineering/tavus-mcp/commit/8c9d9f3a0cd42bb51080a84b0982a9c4ad64f175))
|
|
9
|
+
|
|
3
10
|
## [0.4.4](https://github.com/Tavus-Engineering/tavus-mcp/compare/v0.4.3...v0.4.4) (2026-09-10)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tavus"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.5" # x-release-please-version
|
|
4
4
|
description = "Official alias for tavus-cli, the Tavus CLI and MCP server."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
dependencies = [
|
|
8
|
-
"tavus-cli==0.4.
|
|
8
|
+
"tavus-cli==0.4.5", # x-release-please-version
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
[project.urls]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tavus-mcp"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.5" # x-release-please-version
|
|
4
4
|
description = "Official alias for tavus-cli, which provides the tavus-mcp MCP server."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
dependencies = [
|
|
8
|
-
"tavus-cli==0.4.
|
|
8
|
+
"tavus-cli==0.4.5", # x-release-please-version
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
[project.urls]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tavus/tavus-mcp-worker",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@tavus/tavus-mcp-worker",
|
|
9
|
-
"version": "0.4.
|
|
9
|
+
"version": "0.4.5",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
12
12
|
"agents": "^0.12.2",
|
|
@@ -712,7 +712,10 @@ function isAllowedResource(rawResource: string, expectedResource: string): boole
|
|
|
712
712
|
function isLoopbackUrl(raw: string): boolean {
|
|
713
713
|
try {
|
|
714
714
|
const url = new URL(raw);
|
|
715
|
-
return
|
|
715
|
+
return (
|
|
716
|
+
url.protocol === "http:" &&
|
|
717
|
+
(url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "[::1]")
|
|
718
|
+
);
|
|
716
719
|
} catch {
|
|
717
720
|
return false;
|
|
718
721
|
}
|
|
@@ -764,6 +767,16 @@ function trustedRemoteClientName(raw: string): string | undefined {
|
|
|
764
767
|
) {
|
|
765
768
|
return "ChatGPT";
|
|
766
769
|
}
|
|
770
|
+
// Cursor registers its hosted callback rather than a loopback listener when
|
|
771
|
+
// its loopback-redirect flag is off, so DCR fails without this entry.
|
|
772
|
+
if (
|
|
773
|
+
url.protocol === "https:" &&
|
|
774
|
+
(url.hostname === "cursor.com" || url.hostname === "www.cursor.com") &&
|
|
775
|
+
url.pathname === "/agents/mcp/oauth/callback" &&
|
|
776
|
+
!url.search
|
|
777
|
+
) {
|
|
778
|
+
return "Cursor";
|
|
779
|
+
}
|
|
767
780
|
return undefined;
|
|
768
781
|
}
|
|
769
782
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const VERSION = "0.4.5"; // x-release-please-version
|
|
@@ -718,6 +718,47 @@ describe("Cloudflare Tavus MCP helpers", () => {
|
|
|
718
718
|
});
|
|
719
719
|
});
|
|
720
720
|
|
|
721
|
+
it("allows Cursor DCR callbacks and canonicalizes the client name", async () => {
|
|
722
|
+
const response = await handleOAuthRequest(
|
|
723
|
+
new Request("https://mcp.tavus-preview.io/register", {
|
|
724
|
+
method: "POST",
|
|
725
|
+
headers: { "Content-Type": "application/json" },
|
|
726
|
+
body: JSON.stringify({
|
|
727
|
+
redirect_uris: ["https://www.cursor.com/agents/mcp/oauth/callback"],
|
|
728
|
+
client_name: "Attacker-controlled label",
|
|
729
|
+
}),
|
|
730
|
+
}),
|
|
731
|
+
{ MCP_OAUTH_SIGNING_SECRET: "s".repeat(32) },
|
|
732
|
+
"/mcp",
|
|
733
|
+
);
|
|
734
|
+
|
|
735
|
+
expect(response?.status).toBe(201);
|
|
736
|
+
await expect(response?.json()).resolves.toMatchObject({
|
|
737
|
+
client_name: "Cursor",
|
|
738
|
+
redirect_uris: ["https://www.cursor.com/agents/mcp/oauth/callback"],
|
|
739
|
+
});
|
|
740
|
+
});
|
|
741
|
+
|
|
742
|
+
it("allows IPv6 loopback DCR callbacks", async () => {
|
|
743
|
+
const response = await handleOAuthRequest(
|
|
744
|
+
new Request("https://mcp.tavus-preview.io/register", {
|
|
745
|
+
method: "POST",
|
|
746
|
+
headers: { "Content-Type": "application/json" },
|
|
747
|
+
body: JSON.stringify({
|
|
748
|
+
redirect_uris: ["http://[::1]:53117/oauth/callback"],
|
|
749
|
+
client_name: "MCP Client",
|
|
750
|
+
}),
|
|
751
|
+
}),
|
|
752
|
+
{ MCP_OAUTH_SIGNING_SECRET: "s".repeat(32) },
|
|
753
|
+
"/mcp",
|
|
754
|
+
);
|
|
755
|
+
|
|
756
|
+
expect(response?.status).toBe(201);
|
|
757
|
+
await expect(response?.json()).resolves.toMatchObject({
|
|
758
|
+
redirect_uris: ["http://[::1]:53117/oauth/callback"],
|
|
759
|
+
});
|
|
760
|
+
});
|
|
761
|
+
|
|
721
762
|
it("rejects arbitrary HTTPS dynamic client callbacks", async () => {
|
|
722
763
|
const response = await handleOAuthRequest(
|
|
723
764
|
new Request("https://mcp.tavus-preview.io/register", {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const VERSION = "0.4.4"; // x-release-please-version
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/references/build-and-verify.md
RENAMED
|
File without changes
|
{tavus_cli-0.4.4 → tavus_cli-0.4.5}/skills/tavus-agentic-pals/references/builder-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|