server.json: no way to select a specific bin when an npm package exposes multiple executables
Problem
server.json's npm package schema has no field for selecting which bin to invoke when a package exposes multiple entries in its package.json bin field. Clients following identifier + runtimeHint: "npx" will resolve to whichever bin matches the package name -- there's no way to point at a different, non-default bin.
Concrete example
Package sumlyzer publishes two bins:
"bin": {
"sumlyzer": "bin/sumlyzer.mjs",
"sumlyzer-mcp-server": "bin/sumlyzer-mcp-server.mjs"
}sumlyzer-mcp-server is the actual MCP server; sumlyzer is an unrelated CLI. A server.json entry like:
{
"registryType": "npm",
"identifier": "sumlyzer",
"version": "1.0.0",
"runtimeHint": "npx",
"transport": { "type": "stdio" }
}resolves (via npx sumlyzer) to the wrong bin. The only working invocation is npx -p sumlyzer sumlyzer-mcp-server -- but that's an npx-level flag (-p), not something representable via packageArguments/runtimeArguments, since those only append arguments to the already-resolved command rather than influencing bin resolution itself.
I checked the Argument type (PositionalArgument / NamedArgument) in server.schema.json (2025-12-11) and neither has a field for this.
Question
Is this a known limitation? If so, would a dedicated field (e.g. bin on the npm package entry, or documented support for an -p-style runtime argument) be in scope, or is the intended workaround to always publish the MCP server as its own dedicated npm package (one bin per package)? Happy to open a PR if there's an agreed direction.
Source: modelcontextprotocol/registry