#1629·registry

server.json: no way to select a specific bin when an npm package exposes multiple executables

Author: ErwanRauloCreated Sep 8, 2026Updated Sep 15, 2026

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:

json
"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:

json
{
  "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