Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first by ccreighton-apptio · Pull Request #1084 · modelcontextprotocol/typescript-sdk · GitHub
Skip to content

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first - #1084

Closed
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial
Closed

Test Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed first#1084
ccreighton-apptio wants to merge 3 commits into
modelcontextprotocol:mainfrom
ccreighton-apptio:fix/SEP-1319-partial

Conversation

@ccreighton-apptio

@ccreighton-apptioccreighton-apptio commented Nov 5, 2025

Copy link
Copy Markdown

SEP-1319 breaks out params into individual types. Arbitrary parameters were fixed for several types in the process.

Motivation and Context

Tests are failing

How Has This Been Tested?

Tests are passing

Breaking Changes

From draft schema changes, yes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

This is incomplete - modelcontextprotocol/modelcontextprotocol#1770 must be merged first and then the fetch:spec-types change must be reverted.

This does not implement SEP-1319 here, only:

  • Adjusts types for the breaking changes (removal of arbitrary params)
  • Ignores the new types

If there is a desire to implement SEP-1319 here, the params types would need separate definitions and test coverage. I do not intend to complete that refactor. These changes will unblock the current build failures pending a complete implementation.

@ccreighton-apptio
ccreighton-apptio requested a review from a team as a code ownerNovember 5, 2025 22:09

@ccreighton-apptioccreighton-apptio left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 18 new types have been ignored in tests, rather than implementing SEP-1319 in this PR.

Comment threadpackage.json Outdated
],
"scripts": {
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/draft/schema.ts",
"fetch:spec-types": "curl -o spec.types.ts https://raw.githubusercontent.com/ccreighton-apptio/modelcontextprotocol/refs/heads/fix/tool-call-arguments-regression/schema/draft/schema.ts",

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a temporary change until modelcontextprotocol/modelcontextprotocol#1770 is merged to fix a regression.

expect(specTypes).toContain('JSONRPCNotification');
expect(specTypes).toContain('ElicitResult');
expect(specTypes).toHaveLength(94);
expect(specTypes).toHaveLength(112);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests and types are still needed... tests currently fail without them.

Comment threadsrc/types.ts
Comment on lines -30 to +32
const BaseRequestParamsSchema = z
.object({
_meta: z.optional(RequestMetaSchema)
})
.passthrough();
const BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

passthrough() behavior on base params has been removed from the spec.

Comment threadsrc/types.ts
Comment on lines 34 to 37
export const RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of RequestSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
_meta: z.optional(z.object({}).passthrough())
})
.passthrough();
const NotificationsMetaSchema = z.object({}).passthrough();

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if splitting this out will be necessary in the end, but was following the style set by having RequestMetaSchema defined separately from BaseRequestParamsSchema

Comment threadsrc/types.ts
Comment on lines 49 to 52
export const NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
params: z.optional(z.record(z.any()))
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base classes in the spec enable new extensions of NotificationSchema by NOT using the broken-out types in their param definitions

Comment threadsrc/types.ts
Comment on lines 395 to 398
export const InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/initialized')
method: z.literal('notifications/initialized'),
params: z.optional(BaseNotificationParamsSchema)
});

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Individual types are now where Base params are applied, where previously they were included from extending

Comment threadsrc/types.ts
Comment on lines -413 to +426
export const ProgressSchema = z
.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
})
.passthrough();
export const ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
});

@ccreighton-apptioccreighton-apptioNov 5, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is from lint:fix

E: Actually, looks like I removed a passthrough() here (resulting in the lint change) because it causes ServerNotification not to be spec-compliant.

Comment on lines +454 to +473
// Params types are not exported as standalone types in the SDK (they're inferred from Zod schemas):
'RequestParams',
'NotificationParams',
'CancelledNotificationParams',
'InitializeRequestParams',
'ProgressNotificationParams',
'PaginatedRequestParams',
'ResourceRequestParams',
'ReadResourceRequestParams',
'SubscribeRequestParams',
'UnsubscribeRequestParams',
'SetLevelRequestParams',
'GetPromptRequestParams',
'CompleteRequestParams',
'CallToolRequestParams',
'CreateMessageRequestParams',
'LoggingMessageNotificationParams',
'ResourceUpdatedNotificationParams',
'ElicitRequestParams',

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, if the path @ksinder was taking is acceptable, then the only pending change here is getting modelcontextprotocol/modelcontextprotocol#1770 merged so that the fetch:spec-types change can be reverted.

@ccreighton-apptioccreighton-apptio changed the title Partial fixes for SEP-1319 changesTest Fixes for draft SEP-1319 changes - modelcontextprotocol/modelcontextprotocol#1770 needed firstNov 6, 2025
@KKonstantinov

Copy link
Copy Markdown
Contributor

Hi, FYI have opened #1086, which resolves the spec issues (apart from modelcontextprotocol/modelcontextprotocol#1770). However, it contains removal of .passthrough() as well and needs review/acceptance. Depending on decisions, could open it without the passthrough removals.

@ccreighton-apptio

Copy link
Copy Markdown
Author

Cool! At a glance, that looks like a much more complete implementation of the SEP. I can't speak to the desires of the typescript-sdk maintainers, but note that in this PR I've only removed passthrough behavior from the specific places it needed to be to comply with the removal of passthrough behavior in the draft spec.

Comment threadpackage.json Outdated
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ccreighton-apptio@KKonstantinov@pcarleton