
Mcp Multi Poc Beta
io.github.nithishrPublished by GitHub account nithishrv0.1.0Updated Oct 24, 2026
PoC beta server - extras-gated deps, subcommand selection, same PyPI package as alpha.
Overview
A proof-of-concept PyPI package that serves multiple MCP servers from one install, selected by subcommand, with optional extras for dependencies.
- What you can do
- Run one of several bundled MCP servers by choosing a subcommand (alpha or beta) from a single package install, with a bare command defaulting to alpha for backward compatibility. Install optional extras on demand so the beta server's dependencies are only pulled in when needed. Exercise the alpha server's echo tool and the beta server's make_table tool as smoke tests of the packaging approach. Test how registry metadata and clients construct the run command, including extras and runtime arguments.
- When to use it
- Only for evaluating how a single PyPI package can publish multiple MCP registry entries and how clients run subcommand-based servers. It is a proof of concept, not a general-purpose tool for real work.
- Requirements
- Runs locally over stdio as a Python package installed from PyPI, typically launched with uvx. The beta server needs the optional beta extra installed; without it, it fails with a message telling you to install the extra. No accounts, API keys, or environment variables are declared.
Installation
In SourceWeft
- Open Mcp Multi Poc Beta in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
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
Findings so far (2026-07-31)
- Q1 — multiple entries per PyPI package: YES.
mcp-multi-poc-alphapublished against the shared package. - Q2 — multiple
mcp-namecomments in one README: YES (alpha validated with three comments present). - Q3 — extras in
identifier: NO, but expressible viaruntimeArguments. Extras in the identifier fail the literal PyPI lookup —PyPI package 'mcp-multi-poc[beta]' not found (status: 404). Fallback works:mcp-multi-poc-betapublished successfully with plainidentifier: mcp-multi-poc+runtimeArguments: --from "mcp-multi-poc[beta]"(live in the registry, verified via the/v0/serversAPI). - Q5a — differently-named console script as identifier: NO (confirmed on
publish). Same 404 mechanism (
'mcp-multi-poc-beta' not found) — the registry validates the identifier as a real PyPI package before anything else. - Q5b — script name as positional
runtimeArgument: YES, published.io.github.nithishr/mcp-multi-poc-beta-scriptis live (published 2026-07-31, after trimmingdescriptionto the 100-char limit — the only validation hiccup). Locally,uvx --from 'mcp-multi-poc[beta]' mcp-multi-poc-beta mcp-multi-poccompletes the MCP initialize handshake — the trailing identifier is silently ignored becausemain()never parses argv. Caveats: only safe when the entrypoint tolerates stray argv (click needsignore_unknown_options+allow_extra_argsor a dummy optional argument); depends on clients preservingruntimeArgumentsorder — the least-exercised metadata path; registry UIs show the identifier as the runnable. For production script-per-server, prefer a shim package per script (identifier == script name, no runtimeArguments at all). - Registry validation limits discovered:
description≤ 100 chars;identifiermust be a literal, existing PyPI package (extras rejected);runtimeArguments/packageArgumentscontents are NOT validated.
Local smoke test (before publishing anything)
uvx behavior (after publishing to PyPI):
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.
Q4 — testing the published entries from a client
Most clients don't install directly from the official registry yet, so Q4
splits in two: (a) does the spec-mandated command construction
(uvx <runtimeArguments> <identifier> <packageArguments>) produce a working
server, and (b) does a registry-consuming client reproduce that construction.
- Fetch what was actually published and check the
packagesblock:curl "https://registry.modelcontextprotocol.io/v0/servers?search=mcp-multi-poc" - MCP Inspector — interactive tool calls against the hand-assembled command:
- Claude Code — same commands as stdio servers, then call
echo/make_table: (For Claude Desktop, the equivalentclaude_desktop_config.jsonentries:) - Registry-native install (the real (b) test): VS Code's MCP server
gallery is backed by the official registry — search for
mcp-multi-pocthere and install; this exercises whether a client assemblesruntimeArguments + identifier + packageArgumentson its own. Entries may lag or be curated before appearing.
Steps 2–3 only prove (a); only step 4 (or another registry-consuming client) proves (b), which is what the beta/beta-script entries actually depend on.
Source: README.md at commit c9f1363
Tools
0Version history
1- v0.1.0LatestSep 16, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.