mcp-multi-poc
PoC for serving multiple MCP servers from a single PyPI package, using subcommands for server selection and optional extras for on-demand dependencies. Stands in for the Couchbase MCP monorepo question (alpha = operational, beta = analytics, tabulate = the analytics SDK — chosen because it is outside fastmcp's transitive dependency tree; httpx and pyyaml are not, and silently defeat the extras guard).
What this PoC must answer
| # | Question | Where it's tested |
|---|---|---|
| 1 | Can two MCP registry entries point at the same PyPI package? | Publish both server.alpha.json and server.beta.json |
| 2 | Does registry ownership validation accept multiple mcp-name comments in one package README? |
The two HTML comments above |
| 3 | Does the registry schema/validator accept extras syntax in identifier (mcp-multi-poc[beta])? |
server.beta.json — if rejected, fall back to plain identifier and record that extras can't be expressed |
| 4 | Do clients run the subcommand form correctly from registry metadata (uvx mcp-multi-poc alpha)? |
Install both servers from a client (Claude Desktop / MCP Inspector) |
| 5 | Is there any schema-legal way to run a console script named differently than the package (mcp-multi-poc-beta)? |
server.beta-script.json: identifier = script name + runtimeArguments: --from mcp-multi-poc[beta]. Expected failure mode: ownership validation rejects the identifier because mcp-multi-poc-beta is not a real PyPI package. If it fails, the fallback for script-per-server is a shim package published under the script's name |
Local smoke test (before publishing anything)
cd mcp-registry-poc
uv venv && uv pip install -e .
mcp-multi-poc alpha # starts alpha on stdio (Ctrl+C to exit)
mcp-multi-poc beta # must FAIL with the friendly extras message
uv pip install -e ".[beta]"
mcp-multi-poc beta # now starts
mcp-multi-poc # bare command runs alpha (backward-compat check)
mcp-multi-poc-beta # Option 1 script works locally once extra installed
uvx behavior (after publishing to PyPI):
uvx mcp-multi-poc alpha # base only
uvx "mcp-multi-poc[beta]" beta # extras via uvx — key UX under test
uvx --from "mcp-multi-poc[beta]" mcp-multi-poc-beta # Option 1 fallback form
Publish steps (manual, in order)
- If
mcp-multi-pocis taken on PyPI, pick another name and rename consistently (pyprojectname,[project.scripts], both server.json identifiers). - Build and publish to real PyPI (registry validation fetches from pypi.org;
TestPyPI will not work):
uv build && uv publish. - Install mcp-publisher and log in:
mcp-publisher login github(interactive) — must match theio.github.<username>namespace. - Publish the entries:
mcp-publisher publish server.alpha.json,... server.beta.json, and... server.beta-script.json— the last one is expected to fail validation; record the exact error (if the CLI expects the file at./server.json, copy each into place first). - Verify via the registry API:
curl "https://registry.modelcontextprotocol.io/v0/servers?search=mcp-multi-poc" - Configure both servers in a client from the registry metadata and call
echo(alpha) andmake_table(beta). - Record results per question above, then deprecate/delete the PoC entries.
MCP client config for manual testing (pre-registry)
{
"mcpServers": {
"poc-alpha": { "command": "uvx", "args": ["mcp-multi-poc", "alpha"] },
"poc-beta": { "command": "uvx", "args": ["mcp-multi-poc[beta]", "beta"] }
}
}
Metadata
Release files for mcp-multi-poc 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mcp_multi_poc-0.1.0.tar.gz | 3.8 kB | Without provenance | Details for mcp_multi_poc-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mcp_multi_poc-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for mcp_multi_poc-0.1.0-py3-none-any.whl |
Total release size: 8.3 kB
Release files / mcp_multi_poc-0.1.0.tar.gz
| Download URL | mcp_multi_poc-0.1.0.tar.gz |
|---|---|
| Size | 3.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1e74ffb61e4c46a2ccaec802619c3fb203bb8d3e70e3f7f1cfe5d0c9c860ea6d
|
|
BLAKE2b-256 checksum How to use checksums |
a145c589648b3c2bbf784be79cc1ffa3ab5acf510e1b055369f422cdba75e553
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcp_multi_poc-0.1.0-py3-none-any.whl
| Download URL | mcp_multi_poc-0.1.0-py3-none-any.whl |
|---|---|
| Size | 4.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b5ba577d6404d268d23e05e995f3b7e4f9c394ace75b3eca6ab13d3809e37ba2
|
|
BLAKE2b-256 checksum How to use checksums |
2fcd736128edf9cf379fc7b769e0b87634c653e110c15775968c0643a5b9f5e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for mcp-multi-poc 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.