RFC: Aligning the Foundation for the Meshery MCP Server

Hi everyone! I’m Yatharth Katta

Over the last couple of days I’ve been studying the Meshery ecosystem, the MCP specification, and the initial roadmap for meshery-mcp-server. Rather than just reading Issues #4 - #17 independently, I tried to understand them as parts of a single system. One thing that stood out to me is that many of the implementation issues share a small number of architectural dependencies, and I think aligning on those early will make later feature work much smoother.

From my current understanding, the project naturally fits into something like this:

My current interpretation is that the MCP server should primarily provide an AI-native interface to Meshery rather than exposing REST endpoints directly. Ideally, the server core remains transport-agnostic while domain functionality is implemented through Tools, Resources, and Prompts on top of a shared Meshery client.

While reading through the roadmap, a few cross-cutting questions came up that seem to affect several issues at once.

1. MCP SDK

Issue #5 mentions both mark3labs/mcp-go and the official Go SDK. Since this decision affects tool registration, resources, prompts, testing, and transport support, has the project already settled on one? If not, I’d be happy to compare both SDKs against the project’s requirements and document the trade-offs.

2. Shared registration model

Several issues describe Tools, Resources, and Prompts, but I couldn’t find a common registration contract yet. It feels like establishing a shared interface early would make it much easier for multiple contributors to implement features consistently instead of each introducing their own pattern.

3. Session and context

Issues around workspaces, multiple Meshery instances, authentication, and cluster context all seem related. Before implementing higher-level tools, it would be helpful to understand the intended session model—for example, how active context, workspace, and authentication state should be managed throughout an MCP session.

4. REST vs GraphQL responsibilities

My understanding is that some capabilities are naturally request/response, while others (especially anything related to MeshSync or live state) may eventually benefit from subscriptions or streaming. Is there already a preferred direction for how those responsibilities should be divided between REST and GraphQL within the client layer?

My intention isn’t to redesign the roadmap—quite the opposite. I’d like to make sure the foundational contracts are aligned before more feature-specific implementations begin, so that later work builds on consistent abstractions rather than different assumptions.

I’m planning to start with the foundational work (repository scaffolding and MCP server infrastructure), and if it’s useful, I’d also be happy to draft a small RFC describing a shared registration interface for Tools, Resources, and Prompts that other issues can build upon.

I’d really appreciate any feedback from the maintainers on whether my understanding aligns with the intended direction, or if there are existing design decisions I should build around before opening PRs.

Looking forward to contributing!
@Lee @cooper

Hi Yatharth, thoughtful framing, and I agree with the direction: transport-agnostic core, Tools/Resources/Prompts on top of a shared Meshery client.

I’ll save the community some cycle-time here: most of these questions are already answered and shipped in PR #28:

  1. MCP SDK → decided: mark3labs/mcp-go v0.57.0. First-class Tools/Resources/Prompts support, and critically, in-process client testing — PR #28 includes an end-to-end server_test.go (Initialize → ListTools → CallTool) that proves the choice works rather than just describing it.
  2. Registration model → the seam already exists in the scaffold: internal/server owns the transport-agnostic core + tool registration; internal/tools holds implementations (server_info is the reference pattern). A shared registration interface plugs into this — it doesn’t need to be designed from scratch.
  3. Session/context → deliberately kept thin: internal/config, env-driven (MESHERY_SERVER_URL, MESHERY_API_TOKEN). Sessions/context layer on without rework — that’s the point of starting minimal.
  4. REST vs GraphQL → request/response via a Meshery REST client (Issue #6, starting with /api/system/version ping + httptest coverage); MeshSync-style streaming slots in later without touching the core.

The fastest way to land a shared registration RFC is to build it on what’s already in the repo rather than in parallel. Reviews on PR #28 are welcome and will shape that interface. Curious what @Lee @cooper think.