How should the registry handle MCP servers embedded in apps/CLIs? #274
-
Pre-submission Checklist
Question Category
Your QuestionContextThe server.json schema in this registry is designed to describe MCP servers that are distributed through installable artifacts — packages on npm/PyPI/NuGet, container images, downloadable binaries, etc. This works well when the MCP server has its own distribution channel. But more MCP servers are now embedded inside other applications or CLI tools without a standalone MCP-specific package or repo. Examples: Figma Desktop — ships with a built-in MCP server. Snyk CLI — includes an MCP server in the CLI binary. If you have the host app installed, you already have the MCP server — but there’s no separate MCP package to point to in the registry. The GapThe current schema/examples don’t explicitly show how to represent:
Especially if the registry is re-used for an internal enterprise setting, it seems like it would be desirable to be able to register and expose this type of servers as well. Questions
I went through the current server.json schema/examples, and I searched existing discussions and issues, but was not able to find specific guidance on this. Sorry if it has been covered somewhere else. Current Schema Re-use ApproachIf the host app/CLI is installed via a known package registry (npm, PyPI, NuGet, etc.): Use that registry in registry_name. Use the official package name in name. Use runtime_hint and package_arguments to specify how to start MCP mode. If the embedded MCP server exposes a local HTTP/SSE endpoint (rather than stdio): Use the existing remotes shape, as in the Remote Server example. ExamplesExample 1 – Snyk CLI installed via npm {
"name": "snyk-cli-mcp",
"description": "MCP server provided by the Snyk CLI",
"status": "active",
"version_detail": { "version": ">=1.1298.0" },
"packages": [
{
"registry_name": "npm",
"name": "snyk",
"version": ">=1.1298.0",
"runtime_hint": "snyk",
"package_arguments": [
{ "type": "positional", "value": "mcp" },
{ "type": "positional", "value": "-t" },
{ "type": "positional", "value": "stdio" }
]
}
]
}Example 2 – Figma Dev Mode MCP exposed via SSE {
"name": "figma-dev-mode-mcp",
"description": "Figma Dev Mode MCP server exposed by the Figma Desktop app",
"status": "active",
"remotes": [
{
"transport_type": "sse",
"url": "http://127.0.0.1:3845/mcp"
}
]
}Discussion Points
GoalAgree on whether and how embedded MCP servers should be represented using the existing packages/remotes shapes, or whether the schema should add explicit semantics for this case. |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 7 replies
-
|
Thanks for raising this @KalleBylin ! It's a very good callout.
I would say yes. At least for the purpose of discovery. We may want to consider "installation" of some of these variants as out of scope.
One escape hatch I think we could lean on is the concept of a website_url: #183 So for some of the cases you called out, it may make sense to have a fairly light entry that doesn't include much more than top level metadata + a For other cases, like your Snyk example, it seems close enough to the model for starting standalone servers, and fits the schema with CLI args, etc, that we can encourage that approach.
Absolutely should document this well somewhere. It's probably a server.json-level concern that extends beyond the Registry, worth documenting in here.
What do you mean by this exactly? We already have the ability to declare server-level versions and package-level versions, so that mapping exists in a given instance of
We do already have this notion of a reverse-DNS namespace that forms the foundation for this. However you're right that we should plan to introduce some notion of "author" that is separate from the top level server name's namespace (have discussed this with @domdomegg and @felixweinberger). Issue here: #29 |
Beta Was this translation helpful? Give feedback.
-
|
Thanks @tadasant for looking into this. This sounds like a good path forward. Concretely, for the two examples I mentioned:
On version mapping, I was probably getting ahead of myself. I was thinking about the case where there might be an embedded server and an independent server (similar to how some providers like Github have an open source version and a remote version). I was wondering if there needed to be some explicit mapping between these, but don’t think there would be much value. This can be solved by registering them as separate servers and/or providing more information in docs (providing something like
For vendor identity I was thinking more in line with the issue you linked, and I think this would be satisfied if we could do something like a reverse DNS lookup of the name. Examples can be updated once that is also closed. Next steps I can:
Would that help? |
Beta Was this translation helpful? Give feedback.
-
|
In summary:
For the latest instructions / best practices refer to the docs and examples. |
Beta Was this translation helpful? Give feedback.
In summary:
packagesand specifying required arguments, etc.For the latest instructions / best practices refer to the docs and examples.