Skip to content

Enable building with the Swift Linux SDK#151

Merged
mattt merged 8 commits intomodelcontextprotocol:mainfrom
t089:musl
Aug 14, 2025
Merged

Enable building with the Swift Linux SDK#151
mattt merged 8 commits intomodelcontextprotocol:mainfrom
t089:musl

Conversation

@t089
Copy link
Contributor

@t089 t089 commented Aug 6, 2025

This adds support for compiling against the Swift Linux SDK.

Motivation and Context

Building portable mcp servers for linux is great.

How Has This Been Tested?

Used this patch to build, compile and deploy a stdio mcp server on linux.

Breaking Changes

No.

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

I think with this change we could remove the !os(Linux) in Package.swift which anyhow does make much sense in the scope of cross-compilation.

@mattt
Copy link
Contributor

mattt commented Aug 10, 2025

Hi @t089. Thanks for opening this PR! Sorry for not responding sooner.

I previously opened #63, which I believe makes equivalent changes. My blocker there was not having a way to provide test coverage. Can you think of a way to make that work?

@t089
Copy link
Contributor Author

t089 commented Aug 14, 2025

@mattt Ah, yes, sorry didn't see this before. I've added a CI step that builds the project using the Static Linux SDK. It is reusing work from this PR: swiftlang/github-workflows#142

@t089
Copy link
Contributor Author

t089 commented Aug 14, 2025

I See that you tried to run tests with the musl SDK. Yes, that is not supported. I think we can for now only enable the "building" part. I would say this is fine, as we are testing on linux in the other CI job.

@mattt
Copy link
Contributor

mattt commented Aug 14, 2025

Oh hey, CI is passing. Nice work, @t089!

Anything else to do here? Or is this ready to merge?

Edit for simultaneous response 😂

I See that you tried to run tests with the musl SDK. Yes, that is not supported. I think we can for now only enable the "building" part. I would say this is fine, as we are testing on linux in the other CI job.

I agree. More important to get this into the hands of folks with assurance that things at least build, than to get full test coverage from the jump.

@t089
Copy link
Contributor Author

t089 commented Aug 14, 2025

fine with me!

@mattt mattt merged commit e019cb6 into modelcontextprotocol:main Aug 14, 2025
5 checks passed
@mattt
Copy link
Contributor

mattt commented Aug 14, 2025

Awesome. Thanks again for your help with this, @t089! I'll cut a new patch release now.

@mattt
Copy link
Contributor

mattt commented Aug 14, 2025

This is now live in 0.10.1 🎉

@t089 t089 deleted the musl branch August 14, 2025 12:27
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 free to 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.

2 participants