From 5620499019e10249d1a63f9d0c9159c3f4aab4a1 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 20 Jul 2026 11:34:03 -0700 Subject: [PATCH 1/2] fix(keycardai-mcp): raise mcp floor to >=1.28.1 to propagate GHSA fixes The Socket security bumps (#199 etc.) only edited uv.lock, which is not published to PyPI. Consumers of keycardai-mcp resolve mcp against the declared floor in pyproject.toml, which was >=1.13.1 and still allowed versions vulnerable to three HIGH advisories fixed in mcp 1.28.1: - GHSA-jpw9-pfvf-9f58: HTTP transports serve session requests without verifying the authenticated principal (auth bypass) - GHSA-hvrp-rf83-w775: experimental task handlers cross-client access - GHSA-vj7q-gjh5-988w: WebSocket transport missing Host/Origin validation Raising the floor to >=1.28.1 (a minor bump within mcp 1.x) makes the fix propagate to downstream consumers. The lock already resolves 1.28.1. --- packages/mcp/pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mcp/pyproject.toml b/packages/mcp/pyproject.toml index fe74db6..73f0677 100644 --- a/packages/mcp/pyproject.toml +++ b/packages/mcp/pyproject.toml @@ -9,7 +9,7 @@ authors = [{ name = "Keycard", email = "support@keycard.ai" }] dependencies = [ "keycardai-oauth>=0.9.0", "keycardai-starlette>=0.6.0", - "mcp>=1.13.1", + "mcp>=1.28.1", "pydantic>=2.11.7", "httpx>=0.27.2", "nanoid>=2.0.0", diff --git a/uv.lock b/uv.lock index 0235934..a2e5bd2 100644 --- a/uv.lock +++ b/uv.lock @@ -2263,7 +2263,7 @@ requires-dist = [ { name = "keycardai-starlette", editable = "packages/starlette" }, { name = "langchain", marker = "extra == 'test'", specifier = ">=1.0.5" }, { name = "langchain-openai", marker = "extra == 'test'", specifier = ">=1.0.2" }, - { name = "mcp", specifier = ">=1.13.1" }, + { name = "mcp", specifier = ">=1.28.1" }, { name = "nanoid", specifier = ">=2.0.0" }, { name = "nest-asyncio", marker = "extra == 'crewai'", specifier = ">=1.6.0" }, { name = "openai-agents", marker = "extra == 'test'", specifier = ">=0.5.1" }, From 01b836af8c47e9291cb4bb4ab8a4975eed178c4f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 20 Jul 2026 11:54:54 -0700 Subject: [PATCH 2/2] fix(keycardai-starlette): raise starlette floor to >=1.0.1 for GHSA-86qp Same class of gap as the mcp bump. Socket PR #126 (May) patched the starlette lock to 1.0.1 for GHSA-86qp-5c8j-p5mr (missing Host header validation poisons request.url.path), but the published floor stayed >=0.47.3, so consumers could still resolve a vulnerable starlette (0.47.3-1.0.0) through keycardai-starlette. starlette never backported the fix to the 0.x line (patched only in 1.0.1), so >=1.0.1 is the minimum non-vulnerable floor. Our code already runs and tests against starlette 1.x (lock resolves 1.3.1). This drops starlette-0.x support, acceptable for a 0.x alpha package. --- packages/starlette/pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/starlette/pyproject.toml b/packages/starlette/pyproject.toml index fb5d5e3..f8ed2cd 100644 --- a/packages/starlette/pyproject.toml +++ b/packages/starlette/pyproject.toml @@ -8,7 +8,7 @@ license = { text = "MIT" } authors = [{ name = "Keycard", email = "support@keycard.ai" }] dependencies = [ "keycardai-oauth>=0.13.0", - "starlette>=0.47.3", + "starlette>=1.0.1", "pydantic>=2.11.7", "httpx>=0.27.2", ] diff --git a/uv.lock b/uv.lock index a2e5bd2..c0f5550 100644 --- a/uv.lock +++ b/uv.lock @@ -2368,7 +2368,7 @@ requires-dist = [ { name = "pydantic", specifier = ">=2.11.7" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=8.4.1" }, { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=1.1.0" }, - { name = "starlette", specifier = ">=0.47.3" }, + { name = "starlette", specifier = ">=1.0.1" }, ] provides-extras = ["test"]