Skip to content

Slicing the SDK into Multiple Packages #489

Description

@chr-hertel

Package slicing

It was discussed already before and we should get this sorted before tagging v1.0: Slicing the monolithic mcp/sdk package into multiple packages.

At least the following packages make sense to me:

  • mcp/client
  • mcp/schema
  • mcp/server

Unclear to me right now: how to deal with extensions? But that's not blocking.

Namespaces

In my understanding this comes with some major shifts in namespaces:
everything that is under Mcp\* needs to go into one of those:

  • Mcp\Client\*
  • Mcp\Schema\*
  • Mcp\Server\*

Exceptions would get distributed into three namespaces below that - with one central interface each.

Monorepo + Subtree Splits

Development (incl. issues and PRs), docs, examples and releases would still happen via the main repository https://github.com/modelcontextprotocol/php-sdk, but the tree packages split into read-only subtrees:

=> meaning PRs only hit modelcontextprotocol/php-sdk and versioning across all packages is synced.

Cross Dependencies
Decoupling namespaces might be the annoying change here, but we should slice cleanly and enforce proper inter-dependencies:

  • Client can use Schema, but not Server
  • Server can use Schema, but not Client
  • Schema mustn't use Client nor Server

Maybe deptrac or similar to enforce.


This is a maintainer issue - community contributions won't be accepted but closed.

Metadata

Metadata

Assignees

Labels

needs confirmationNeeds confirmation that the PR is actually required or needed.needs maintainer actionPotentially serious issue - needs proactive fix and maintainer attention

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions