Skip to content

Commit 801111e

Browse files
fix(packaging): inline the fast-uri URIComponent type; drop stale typesVersions (#2394)
1 parent 14160f7 commit 801111e

10 files changed

Lines changed: 117 additions & 12 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@modelcontextprotocol/server': patch
3+
'@modelcontextprotocol/client': patch
4+
'@modelcontextprotocol/node': patch
5+
---
6+
7+
Fix the published declaration files for consumers compiling with `skipLibCheck: false`: the bundled `.d.mts` no longer leaves a dangling `URIComponent` reference (ajv's published types import it from `fast-uri`, whose export-assigned namespace the dts bundler cannot link — the type is now inlined via a dts-only path mapping), and no longer imports `json-schema-typed` from an undeclared dependency (it is inlined via `dts.resolve`). `@modelcontextprotocol/node` and `@modelcontextprotocol/server` drop stale `typesVersions` entries pointing at subpaths that never shipped. Package READMEs note that TypeScript >=6.0 requires `"types": ["node"]` since the published declarations reference `Buffer`.

.github/workflows/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ jobs:
3131
- run: pnpm install
3232
- run: pnpm run check:all
3333
- run: pnpm run build:all
34+
- run: node scripts/smoke-dist-types.mjs
3435

3536
test:
3637
runs-on: ubuntu-latest

packages/client/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ The MCP (Model Context Protocol) TypeScript client SDK. Build MCP clients that c
1616
npm install @modelcontextprotocol/client@alpha
1717
```
1818

19+
TypeScript ≥6.0 no longer auto-includes `@types/*` — add `"types": ["node"]` to your `tsconfig.json` `compilerOptions` (the published `.d.mts` references `Buffer`).
20+
1921
## Documentation
2022

2123
- **[Repository README](https://github.com/modelcontextprotocol/typescript-sdk#readme)** — overview, package layout, examples

packages/client/tsdown.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ export default defineConfig({
2020
shims: true,
2121
dts: {
2222
resolver: 'tsc',
23-
resolve: ['ajv', 'ajv-formats'],
23+
resolve: ['ajv', 'ajv-formats', 'json-schema-typed'],
2424
compilerOptions: {
2525
baseUrl: '.',
2626
paths: {
27+
'fast-uri': ['../core-internal/src/validators/fastUriShim.d.ts'],
2728
'@modelcontextprotocol/core-internal': ['../core-internal/src/index.ts'],
2829
'@modelcontextprotocol/core-internal/public': ['../core-internal/src/exports/public/index.ts'],
2930
'@modelcontextprotocol/core-internal/validators/ajv': ['../core-internal/src/validators/ajvProvider.ts'],
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* dts-bundling shim for `fast-uri`.
3+
*
4+
* ajv@8.18.0's published .d.ts does `import { URIComponent } from "fast-uri"`,
5+
* but fast-uri ships its types as `export = namespace`, which rolldown's dts
6+
* bundler can't destructure into a named import — it drops the import and
7+
* leaves a dangling `URIComponent` reference in the bundled .d.mts (TS2304 for
8+
* downstream consumers with `skipLibCheck: false`).
9+
*
10+
* The server/client tsdown configs map `fast-uri` to this file via
11+
* `dts.compilerOptions.paths` so the type is inlined as a plain named export.
12+
* Runtime code is unaffected (this is a `.d.ts`; the path mapping is dts-only).
13+
*/
14+
// Field-for-field copy of fast-uri@3.1.0's URIComponent (types/index.d.ts).
15+
// Keep in sync when bumping fast-uri/ajv.
16+
export interface URIComponent {
17+
scheme?: string;
18+
userinfo?: string;
19+
host?: string;
20+
port?: number | string;
21+
path?: string;
22+
query?: string;
23+
fragment?: string;
24+
reference?: string;
25+
nid?: string;
26+
nss?: string;
27+
resourceName?: string;
28+
secure?: boolean;
29+
uuid?: string;
30+
error?: string;
31+
}

packages/middleware/node/package.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@
2727
}
2828
},
2929
"types": "./dist/index.d.mts",
30-
"typesVersions": {
31-
"*": {
32-
"sse": [
33-
"dist/sse.d.mts"
34-
]
35-
}
36-
},
3730
"files": [
3831
"dist"
3932
],

packages/server/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ The MCP (Model Context Protocol) TypeScript server SDK. Build MCP servers that e
1616
npm install @modelcontextprotocol/server@alpha
1717
```
1818

19+
TypeScript ≥6.0 no longer auto-includes `@types/*` — add `"types": ["node"]` to your `tsconfig.json` `compilerOptions` (the published `.d.mts` references `Buffer`).
20+
1921
Optional framework adapters: [`@modelcontextprotocol/express`](https://www.npmjs.com/package/@modelcontextprotocol/express), [`@modelcontextprotocol/hono`](https://www.npmjs.com/package/@modelcontextprotocol/hono),
2022
[`@modelcontextprotocol/node`](https://www.npmjs.com/package/@modelcontextprotocol/node).
2123

packages/server/package.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@
6464
"validators/cf-worker": [
6565
"dist/validators/cfWorker.d.mts"
6666
],
67-
"zod-schemas": [
68-
"dist/zodSchemas.d.mts"
69-
],
7067
"stdio": [
7168
"dist/stdio.d.mts"
7269
]

packages/server/tsdown.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ export default defineConfig({
1919
shims: true,
2020
dts: {
2121
resolver: 'tsc',
22-
resolve: ['ajv', 'ajv-formats'],
22+
resolve: ['ajv', 'ajv-formats', 'json-schema-typed'],
2323
compilerOptions: {
2424
baseUrl: '.',
2525
paths: {
26+
'fast-uri': ['../core-internal/src/validators/fastUriShim.d.ts'],
2627
'@modelcontextprotocol/core-internal': ['../core-internal/src/index.ts'],
2728
'@modelcontextprotocol/core-internal/public': ['../core-internal/src/exports/public/index.ts'],
2829
'@modelcontextprotocol/core-internal/validators/ajv': ['../core-internal/src/validators/ajvProvider.ts'],

scripts/smoke-dist-types.mjs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Compiles a small consumer against the BUILT declaration files with
2+
// `skipLibCheck: false`, catching dangling type references that the dts
3+
// bundler emits only as non-fatal warnings (its failOnWarn does not fail on
4+
// MISSING_EXPORT). Run after `pnpm build:all`.
5+
import { execFileSync } from 'node:child_process';
6+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
7+
import { tmpdir } from 'node:os';
8+
import path from 'node:path';
9+
10+
const repo = path.resolve(import.meta.dirname, '..');
11+
const dir = mkdtempSync(path.join(tmpdir(), 'dist-types-smoke-'));
12+
try {
13+
writeFileSync(
14+
path.join(dir, 'consumer.ts'),
15+
[
16+
"import { Client } from '@modelcontextprotocol/client';",
17+
"import type { AjvJsonSchemaValidator as ClientAjv } from '@modelcontextprotocol/client';",
18+
"import { AjvJsonSchemaValidator } from '@modelcontextprotocol/client/validators/ajv';",
19+
"import { CfWorkerJsonSchemaValidator as ClientCf } from '@modelcontextprotocol/client/validators/cf-worker';",
20+
"import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';",
21+
"import { McpServer } from '@modelcontextprotocol/server';",
22+
"import { AjvJsonSchemaValidator as ServerAjv } from '@modelcontextprotocol/server/validators/ajv';",
23+
"import { CfWorkerJsonSchemaValidator as ServerCf } from '@modelcontextprotocol/server/validators/cf-worker';",
24+
"import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';",
25+
"export const c = new Client({ name: 'smoke', version: '1.0.0' });",
26+
"export const s = new McpServer({ name: 'smoke', version: '1.0.0' });",
27+
'export type T = ClientAjv;',
28+
'export { AjvJsonSchemaValidator, ServerAjv, ClientCf, ServerCf, StdioClientTransport, StdioServerTransport };',
29+
''
30+
].join('\n')
31+
);
32+
writeFileSync(
33+
path.join(dir, 'tsconfig.json'),
34+
JSON.stringify(
35+
{
36+
compilerOptions: {
37+
strict: true,
38+
noEmit: true,
39+
skipLibCheck: false,
40+
module: 'esnext',
41+
moduleResolution: 'bundler',
42+
target: 'es2022',
43+
types: ['node'],
44+
typeRoots: [path.join(repo, 'node_modules', '@types')],
45+
paths: {
46+
'@modelcontextprotocol/client': [path.join(repo, 'packages/client/dist/index.d.mts')],
47+
'@modelcontextprotocol/client/validators/ajv': [path.join(repo, 'packages/client/dist/validators/ajv.d.mts')],
48+
'@modelcontextprotocol/client/validators/cf-worker': [
49+
path.join(repo, 'packages/client/dist/validators/cfWorker.d.mts')
50+
],
51+
'@modelcontextprotocol/client/stdio': [path.join(repo, 'packages/client/dist/stdio.d.mts')],
52+
'@modelcontextprotocol/server': [path.join(repo, 'packages/server/dist/index.d.mts')],
53+
'@modelcontextprotocol/server/validators/ajv': [path.join(repo, 'packages/server/dist/validators/ajv.d.mts')],
54+
'@modelcontextprotocol/server/validators/cf-worker': [
55+
path.join(repo, 'packages/server/dist/validators/cfWorker.d.mts')
56+
],
57+
'@modelcontextprotocol/server/stdio': [path.join(repo, 'packages/server/dist/stdio.d.mts')]
58+
}
59+
},
60+
include: ['consumer.ts']
61+
},
62+
null,
63+
2
64+
)
65+
);
66+
execFileSync('pnpm', ['exec', 'tsc', '-p', dir], { cwd: repo, stdio: 'inherit' });
67+
console.log('dist-types smoke: clean (skipLibCheck: false)');
68+
} finally {
69+
rmSync(dir, { recursive: true, force: true });
70+
}

0 commit comments

Comments
 (0)