diff --git a/src/sdk-runner/known-sdks.ts b/src/sdk-runner/known-sdks.ts index 528bfd8c..fd1cd53c 100644 --- a/src/sdk-runner/known-sdks.ts +++ b/src/sdk-runner/known-sdks.ts @@ -45,6 +45,21 @@ export const KNOWN_SDKS: Record = { command: './.conformance-server -http=:3000', url: 'http://localhost:3000' } + }, + // uv workspace: the `mcp` (client) and `mcp-everything-server` (server) + // packages are both members, so one `uv sync --all-packages` covers both + // modes. Fixtures live in the python-sdk repo (.github/actions/conformance/ + // and examples/servers/everything-server). `--port 3000` matches the url and + // the 3000 convention used above; the server's own default is 3001. + 'python-sdk': { + build: 'uv sync --frozen --all-extras --all-packages', + client: { + command: 'uv run --frozen python .github/actions/conformance/client.py' + }, + server: { + command: 'uv run --frozen mcp-everything-server --port 3000', + url: 'http://localhost:3000/mcp' + } } }; diff --git a/src/sdk-runner/sdk-runner.test.ts b/src/sdk-runner/sdk-runner.test.ts index fbfa7fb9..2b8abfaa 100644 --- a/src/sdk-runner/sdk-runner.test.ts +++ b/src/sdk-runner/sdk-runner.test.ts @@ -77,6 +77,13 @@ describe('lookupBuiltinConfig', () => { expect(lookupBuiltinConfig('rust-sdk')).toBeNull(); }); + it('exposes python-sdk with both client and server commands', () => { + const py = lookupBuiltinConfig('python-sdk'); + expect(py?.client?.command).toContain('client.py'); + expect(py?.server?.command).toContain('mcp-everything-server'); + expect(py?.server?.url).toBe('http://localhost:3000/mcp'); + }); + it('exposes the typescript-sdk-v1 alias with repo + defaultRef', () => { const v1 = lookupBuiltinConfig('typescript-sdk-v1'); expect(v1?.repo).toBe('typescript-sdk');