I've been working with MCPs and building MCP servers for a while now. Here are my thoughts on the missing pieces in it.

While MCPs (Modular Component Protocols) present an exciting frontier in modularizing and streamlining server functionality, their current design and implementation still leave room for improvement. The key areas of dependency handling, versioning, and conflict resolution highlight the challenges we face as we aim to optimize MCP systems for more complex and interconnected use cases.

Dependency

I think soon we will need MCPs built on top of other MCPs. For example, if I want to provide a service that takes lat/lon as input, and Google Maps has an MCP that gets an address and returns the lat/lon, it would be much more convenient if I could create an MCP assuming the client already has the dependent MCP (Google Maps for addresses).

MyMCP (v0.1.2)
|
+--+ GeoMCP (v0.0.5)
|  |
|  +-- GoogleMapMCP (v0.1.5)
+--+ OrganizerMCP (v0.6.8)
   | 
   +-- SlackMCP (v0.6.8)
   +-- TeamsMCP (v0.6.8)
   +-- CalendarMCP (v0.6.8)

The ability to build MCPs on top of other MCPs could revolutionize how developers create layered, collaborative systems. However, it also introduces significant challenges, such as ensuring compatibility between dependencies, managing updates across interconnected modules, and avoiding circular dependencies. A robust framework for managing these dependencies efficiently will be vital as the ecosystem grows.

Versioning

It currently has some versioning, but we need a more workable standard. Something like Semantic Versioning, but optimized for semantic components like MCP.

Current versioning practices are not sufficient to address the nuanced needs of semantic component systems like MCPs. Introducing an MCP-specific versioning standard, akin to Semantic Versioning but tailored to MCPs, could resolve ambiguities, streamline compatibility checks, and ensure smoother integration of updates.

Conflict Resolution (Priority)

At the moment, if multiple tools are available for a specific task, there's no way to indicate which one should be given higher priority.
For instance, consider two MCP servers that have tools for getting the time:

CalendarMCP
  - GetCurrentTime()

TimeMCP
  - GetNow()

Which one should be used now?

As MCPs proliferate, conflicts will inevitably arise when multiple modules offer overlapping functionalities. A standardized mechanism for prioritizing tools, perhaps guided by metadata, user preferences, or usage context, could provide clarity and prevent execution errors. Incorporating intelligent arbitration methods or user-defined priorities could further enhance system reliability.

Other missing pieces?

What other missing pieces do you think we have?

What are your thoughts on these challenges? Are there other aspects of MCPs you believe need attention? Let’s continue the conversation and explore how we can shape the future of MCP development together.