Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

@ajevans99@aehlke@movetz@DePasqualeOrg@alainakafkes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

@ajevans99@aehlke@movetz@DePasqualeOrg@alainakafkes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

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

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

@ajevans99@aehlke@movetz@DePasqualeOrg@alainakafkes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

@ajevans99@aehlke@movetz@DePasqualeOrg@alainakafkes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

@ajevans99@aehlke@movetz@DePasqualeOrg@alainakafkes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

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

Support 2025-06-18 Spec - #167

Merged
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update
Jan 26, 2026
Merged

Support 2025-06-18 Spec#167
movetz merged 18 commits into
modelcontextprotocol:v0.11.xfrom
ajevans99:spec-update

Conversation

@ajevans99

@ajevans99ajevans99 commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Added/Changed

Not Handled

Motivation and Context

Support many changes in recent MCP spec update.
https://modelcontextprotocol.io/specification/2025-06-18/changelog

How Has This Been Tested?

  • New unit tests
  • MCP Inspector npx @modelcontextprotocol/inspector@latest

Breaking Changes

  • New case on public enum Tool.Content.resourceLink
  • Updated associated values on enum case Tool.Content.resource to include optional title and annoations properties

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

_meta is not a Swifty name but does map nicely to the spec. Open to suggestions

@alainakafkesalainakafkes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Base/Messages.swift Outdated
Comment threadSources/MCP/Server/Resources.swift Outdated
Comment threadSources/MCP/Base/GeneralFields.swift Outdated
Comment threadSources/MCP/Server/Tools.swift
Comment threadTests/MCPTests/ClientTests.swift
@ajevans99
ajevans99 marked this pull request as ready for review October 28, 2025 01:33
@ajevans99

Copy link
Copy Markdown
ContributorAuthor

hi there and thank you for taking a stab at supporting the latest MCP spec! i saw this PR because i am hoping to use Result's structuredOutput for a project. i have no special role in this repo but wanted to offer some feedback to help build interest in this work

Thanks for the early review. Implemented a bunch of your suggestions and re-thought the meta and general fields.

@aehlke

Copy link
Copy Markdown

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

@ajevans99

Copy link
Copy Markdown
ContributorAuthor

I see you had some changes last week. Is this ready to use as a fork until it gets reviewed? I hope this will be merged if it is ready. Thanks!

Ready on my side. @mattt could we get a review when you get a chance

@movetz

Copy link
Copy Markdown
Contributor

Hi folks! @ajevans99@aehlke@alainakafkes

Can we continue in the official Discord and swift-sdk-dev channel? You can find the link on the official site community section.

Actually, we (at @MacPaw) have made almost the same updates in our private fork and are planning the next changes for the latest version. It makes more sense to combine our work and move faster. And it will be great if we can discuss it 🙏.

@aehlke

Copy link
Copy Markdown

Just to note for those who find this here - on Discord the latest is that there will be an online meeting on Jan 9th where this project's maintenance status and stewardship may be discussed (by those here who are stepping up to raise the topic and make proposals)

@DePasqualeOrg

Copy link
Copy Markdown

Thanks for your contribution, @ajevans99. Since my PR #175, which I developed independently, overlaps with this one, I wanted to explain some of the differences between the two. If you think I've missed something, or if you have any feedback on my PR, please let me know.

My PR fully implements all the required _meta and extraFields support. I chose a simpler approach by omitting _meta key validation, which neither the TypeScript nor the Python SDK implements.

Comparison

FeatureSpecPR #167TS SDKPython SDKMy PR #175
_meta on Result typesRequired
_meta on RequestParamsRequired
_meta on NotificationParamsRequired
_meta on content typesRequired
_meta on entity typesRequired
extraFields on ResultsRequired
_meta key validationNot in schema
title fieldsRequired
outputSchema on ToolRequired
ResourceLinkRequired
Icons2025-11-25
Tasks2025-11-25
URL elicitation2025-11-25
Full elicitation implRequiredTypes only
Protocol version2025-06-182025-11-252025-11-252025-11-25

Differences in my PR #175

No _meta key validation: This PR adds ~200 lines to validate _meta key formats. I omitted this because the JSON Schema uses additionalProperties: {} with no format constraints, and the Python and TypeScript SDKs don't validate keys.

ResultWithExtraFields protocol: I use a protocol with default implementations for consistent extraFields decoding across all Result types, which reduces code duplication.

RequestMeta type: Captures progressToken plus arbitrary additional fields, matching how the TypeScript and Python SDKs handle request metadata.

Flattened Task results: GetTask.Result and CancelTask.Result flatten Task fields per the spec's allOf[Result, Task], matching TS (Result & Task) and Python (class GetTaskResult(Result, Task)).

2025-11-25 support: I support the latest protocol version, including Tasks, Icons, and URL elicitation.

@movetz
movetz changed the base branch from main to v0.11.xJanuary 26, 2026 13:03
@movetz
movetz merged commit 4b5726f into modelcontextprotocol:v0.11.xJan 26, 2026
@movetz

Copy link
Copy Markdown
Contributor

@ajevans99 Big thx! You covered many things, and the changes are aligned with the current architecture. We decided to merge it and reuse it for the next changes. We open for any help and contributions and will mention you in the official Discord channel.

@movetzmovetz linked an issue Jan 27, 2026 that may be closed by this pull request
yehorsobko-mac pushed a commit that referenced this pull request Feb 17, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
yehorsobko-mac pushed a commit that referenced this pull request Feb 18, 2026
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
movetz added a commit that referenced this pull request Feb 19, 2026
* Support 2025-06-18 Spec (#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
Velly69 added a commit to MacPaw/mcp-swift-sdk that referenced this pull request Mar 2, 2026
* Enable building with the Swift Linux SDK (modelcontextprotocol#151)
* Update README to document support for Alpine Linux (modelcontextprotocol#153)
* Adopt strict concurrency for project (modelcontextprotocol#157)
* Adopt strict concurrency for project
* Fix one warning related to that
* Add version-specific manifest for Swift 6.0
---------
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Mattt Zmuda <mattt@me.com>
* Make `Tool.description` optional (modelcontextprotocol#160)
* Make Tool.description optional
* Make description parameter in Tool initializer optional
* fix: allow description field to be absent from `Tool` (modelcontextprotocol#159)
* fix: allow description field to be absent from `Tool`
* description field is not a requried field of Tool
* Apply suggestions from code review
* Update Tests/MCPTests/ToolTests.swift
---------
Co-authored-by: Mattt <mattt@me.com>
* Add Mac Catalyst to target dependencies for EventSource. (modelcontextprotocol#163)
* chore: update licensing to Apache 2.0 for new contributions (modelcontextprotocol#177)
* Add SECURITY.md with GitHub Security Advisories guidance (modelcontextprotocol#200)
* V0.11.x (modelcontextprotocol#199)
* Support 2025-06-18 Spec (modelcontextprotocol#167)
* Support OpenAI _meta for Tool
* Update init
* Add title and outputSchema
* Concurreny issue
* General fields
* Add Generate Fields to Server elements
* 4 tab spacing
* Update Version
* Elicitation
* Format
* More tests and inits
* Elicitation in README
* Fix orphaned test
* Add title to more structs
* Public init
* Fix meta validation and make tests more generic
* Format and make Result properties public again
* Revert more visibility changes
* feat: 2025-11-25 phase 1, includes Version, Icon, Progress (modelcontextprotocol#181)
* chore: fixed unit tests
* feat: added icon and progess base structs
* feat: added progress notification and meta to callTool
* feat: added tests
* feat: simplified RequestMeta encoding/decoding
* tests: added unit test to track progress
* chore: rebased v0.11.x
* feat: implemented cancellation
* feat: added overloaded callTool method
* fix: encoding Response _meta fix
* chore: added old version to the versions list
* feat: 2025-11-25 phase 2; added Logging and Completions (modelcontextprotocol#196)
* feat: added Logging and Completions
* feat: updated EmbeddedResource for the latest spec
* chore: changed encoding of meta in Prompts to encodeIfPresent
* feat: compliance tests + http server transport (modelcontextprotocol#197)
* feat: http server transport
* feat: added http server transport
* feat: removed unused files
* feat: added conformance tests
* feat: improved conformace testing
* chore: removed redundant files
* feat/2025-11-25: sampling, elicitation, roots (modelcontextprotocol#198)
* feat: Roots implementation
* feat: added unit testing
* feat: improved unit tests and fixed NetworkTransport crash
* feat: implemented sampling and elicitation
* feat: improved sampling tests
* feat: improved elicitation tests
* feat: improved confirmance tests
* feat: improved Prompts unit tests
* feat: removed test code
* feat: updated conformance tests
* chore: removed redundant commas
* chore: removed 6.0.3 swift version from ci
* chore: improved unit tests a little bit
* chore: update README.md
* chore: add server progress tracking example to README.md
* chore: updated README.md
* chore: updated transports table formatting
* chore: updated MockNetworkConnection
---------
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
---------
Co-authored-by: Tobias <t089@users.noreply.github.com>
Co-authored-by: Mattt <mattt@me.com>
Co-authored-by: Alexey Ivashko <mcivashko@gmail.com>
Co-authored-by: Alexey Ivashko <a_ivashko@apple.com>
Co-authored-by: Yifan Liu <liuyf1117@hotmail.com>
Co-authored-by: Semen Kudriavtsev <sam@kudr.me>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
Co-authored-by: Den Delimarsky <53200638+localden@users.noreply.github.com>
Co-authored-by: Maksym Mova <maks.mova@gmail.com>
Co-authored-by: Austin Evans <austinjevans@me.com>
Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
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.

Update to latest version of spec (2025-06-XX)

5 participants

@ajevans99@aehlke@movetz@DePasqualeOrg@alainakafkes