diff --git a/CHANGELOG.md b/CHANGELOG.md
index 75cf55112e3a..82043c029b3b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
+
+
+# 20.3.13 (2025-12-03)
+
+### @angular/cli
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------- |
+| [cfbb61602](https://github.com/angular/angular-cli/commit/cfbb61602daf32c5b942ea84702fc3638aa111e7) | fix | update `@modelcontextprotocol/sdk` to v1.24.0 |
+
+
+
# 20.3.12 (2025-11-25)
diff --git a/package.json b/package.json
index a4d839e71740..3a070036b09b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@angular/devkit-repo",
- "version": "20.3.12",
+ "version": "20.3.13",
"private": true,
"description": "Software Development Kit for Angular",
"keywords": [
diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json
index 26e1186925ee..38a2e6e30394 100644
--- a/packages/angular/cli/package.json
+++ b/packages/angular/cli/package.json
@@ -27,7 +27,7 @@
"@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER",
"@inquirer/prompts": "7.8.2",
"@listr2/prompt-adapter-inquirer": "3.0.1",
- "@modelcontextprotocol/sdk": "1.17.3",
+ "@modelcontextprotocol/sdk": "1.24.0",
"@schematics/angular": "workspace:0.0.0-PLACEHOLDER",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.35.0",
@@ -39,7 +39,7 @@
"resolve": "1.22.10",
"semver": "7.7.2",
"yargs": "18.0.0",
- "zod": "3.25.76"
+ "zod": "4.1.13"
},
"ng-update": {
"migrations": "@schematics/angular/migrations/migration-collection.json",
diff --git a/packages/angular/cli/src/commands/mcp/tools/tool-registry.ts b/packages/angular/cli/src/commands/mcp/tools/tool-registry.ts
index 340ec3f0c81d..f68db548f662 100644
--- a/packages/angular/cli/src/commands/mcp/tools/tool-registry.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/tool-registry.ts
@@ -7,11 +7,10 @@
*/
import type { McpServer, ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
-import { ZodRawShape } from 'zod';
+import type { ToolAnnotations } from '@modelcontextprotocol/sdk/types';
+import type { ZodRawShape } from 'zod';
import type { AngularWorkspace } from '../../../utilities/config';
-type ToolConfig = Parameters[1];
-
export interface McpToolContext {
workspace?: AngularWorkspace;
logger: { warn(text: string): void };
@@ -26,7 +25,7 @@ export interface McpToolDeclaration;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 52eca2c2f2ad..927032edd4ae 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -48,7 +48,7 @@ importers:
version: 20.2.10(72d1932aa29c0670c8359e3ed8a5ff55)
'@angular/ng-dev':
specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#b69a61793bd6ba935af262297688408d0b48252e
- version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b69a61793bd6ba935af262297688408d0b48252e
+ version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b69a61793bd6ba935af262297688408d0b48252e(@modelcontextprotocol/sdk@1.24.0(zod@4.1.13))
'@angular/platform-browser':
specifier: 20.3.7
version: 20.3.7(@angular/animations@20.3.7(@angular/core@20.3.7(@angular/compiler@20.3.7)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@20.3.7(@angular/core@20.3.7(@angular/compiler@20.3.7)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.3.7(@angular/compiler@20.3.7)(rxjs@7.8.2)(zone.js@0.15.1))
@@ -472,8 +472,8 @@ importers:
specifier: 3.0.1
version: 3.0.1(@inquirer/prompts@7.8.2(@types/node@24.9.1))(@types/node@24.9.1)(listr2@9.0.1)
'@modelcontextprotocol/sdk':
- specifier: 1.17.3
- version: 1.17.3
+ specifier: 1.24.0
+ version: 1.24.0(zod@4.1.13)
'@schematics/angular':
specifier: workspace:0.0.0-PLACEHOLDER
version: link:../../schematics/angular
@@ -508,8 +508,8 @@ importers:
specifier: 18.0.0
version: 18.0.0
zod:
- specifier: 3.25.76
- version: 3.25.76
+ specifier: 4.1.13
+ version: 4.1.13
packages/angular/pwa:
dependencies:
@@ -2541,9 +2541,15 @@ packages:
cpu: [x64]
os: [win32]
- '@modelcontextprotocol/sdk@1.17.3':
- resolution: {integrity: sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==}
+ '@modelcontextprotocol/sdk@1.24.0':
+ resolution: {integrity: sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==}
engines: {node: '>=18'}
+ peerDependencies:
+ '@cfworker/json-schema': ^4.1.1
+ zod: ^3.25 || ^4.0
+ peerDependenciesMeta:
+ '@cfworker/json-schema':
+ optional: true
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
@@ -6349,6 +6355,9 @@ packages:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
+ jose@6.1.3:
+ resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==}
+
js-base64@3.7.8:
resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
@@ -9193,14 +9202,17 @@ packages:
resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
engines: {node: '>=18'}
- zod-to-json-schema@3.24.6:
- resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==}
+ zod-to-json-schema@3.25.0:
+ resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==}
peerDependencies:
- zod: ^3.24.1
+ zod: ^3.25 || ^4
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+ zod@4.1.13:
+ resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==}
+
zone.js@0.15.1:
resolution: {integrity: sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==}
@@ -9387,11 +9399,11 @@ snapshots:
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b69a61793bd6ba935af262297688408d0b48252e':
+ '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b69a61793bd6ba935af262297688408d0b48252e(@modelcontextprotocol/sdk@1.24.0(zod@4.1.13))':
dependencies:
'@actions/core': 1.11.1
'@google-cloud/spanner': 8.0.0(supports-color@10.2.2)
- '@google/genai': 1.26.0(bufferutil@4.0.9)(supports-color@10.2.2)(utf-8-validate@6.0.5)
+ '@google/genai': 1.26.0(@modelcontextprotocol/sdk@1.24.0(zod@4.1.13))(bufferutil@4.0.9)(supports-color@10.2.2)(utf-8-validate@6.0.5)
'@inquirer/prompts': 7.9.0(@types/node@24.9.1)
'@inquirer/type': 3.0.9(@types/node@24.9.1)
'@octokit/auth-app': 8.1.1
@@ -10726,10 +10738,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@google/genai@1.26.0(bufferutil@4.0.9)(supports-color@10.2.2)(utf-8-validate@6.0.5)':
+ '@google/genai@1.26.0(@modelcontextprotocol/sdk@1.24.0(zod@4.1.13))(bufferutil@4.0.9)(supports-color@10.2.2)(utf-8-validate@6.0.5)':
dependencies:
google-auth-library: 10.4.0(supports-color@10.2.2)
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ optionalDependencies:
+ '@modelcontextprotocol/sdk': 1.24.0(zod@4.1.13)
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -11128,9 +11142,10 @@ snapshots:
'@lmdb/lmdb-win32-x64@3.4.2':
optional: true
- '@modelcontextprotocol/sdk@1.17.3':
+ '@modelcontextprotocol/sdk@1.24.0(zod@4.1.13)':
dependencies:
- ajv: 6.12.6
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
content-type: 1.0.5
cors: 2.8.5
cross-spawn: 7.0.6
@@ -11138,10 +11153,11 @@ snapshots:
eventsource-parser: 3.0.6
express: 5.1.0
express-rate-limit: 7.5.1(express@5.1.0)
+ jose: 6.1.3
pkce-challenge: 5.0.0
raw-body: 3.0.1
- zod: 3.25.76
- zod-to-json-schema: 3.24.6(zod@3.25.76)
+ zod: 4.1.13
+ zod-to-json-schema: 3.25.0(zod@4.1.13)
transitivePeerDependencies:
- supports-color
@@ -15484,6 +15500,8 @@ snapshots:
jiti@1.21.7: {}
+ jose@6.1.3: {}
+
js-base64@3.7.8: {}
js-tokens@4.0.0: {}
@@ -18772,10 +18790,12 @@ snapshots:
yoctocolors-cjs@2.1.3: {}
- zod-to-json-schema@3.24.6(zod@3.25.76):
+ zod-to-json-schema@3.25.0(zod@4.1.13):
dependencies:
- zod: 3.25.76
+ zod: 4.1.13
zod@3.25.76: {}
+ zod@4.1.13: {}
+
zone.js@0.15.1: {}