From 4557b881a883b126a0bbad1bc04639663c1729be Mon Sep 17 00:00:00 2001 From: Rafael Richards Date: Mon, 11 May 2026 15:34:23 -0400 Subject: [PATCH] =?UTF-8?q?chore:=20README=20mcp-name=20marker=20+=20refre?= =?UTF-8?q?sh=20+=20bump=20v0.2.4=20=E2=80=94=20pass=20MCP=20registry=20ow?= =?UTF-8?q?nership?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v0.2.3 published to PyPI successfully but the MCP registry rejected with HTTP 400: PyPI package 'm-dev-tools-mcp' ownership validation failed. The server name 'io.github.m-dev-tools/m-dev-tools-mcp' must appear as 'mcp-name: io.github.m-dev-tools/m-dev-tools-mcp' in the package README The registry enforces proof-of-ownership tying each PyPI package back to its claimed namespace via a literal marker in the README that gets uploaded as PyPI's long-description. Fix: add the marker. Bump to v0.2.4 (PyPI versions 0.2.2 + 0.2.3 are now live and immutable). ### README.md — refresh + marker The README had become stale (still cited "Track A scaffold", "Distribution: GitHub Releases (not PyPI)", and a 404'd phase4-plan.md link from before the docs-reorg into the phases/ subfolder). Rewritten to reflect post-Phase-6 reality: * mcp-name marker line, with an HTML comment explaining "do not remove" so a future doc cleanup doesn't accidentally strip it * Install section now leads with `pip install m-dev-tools-mcp` + `uvx m-dev-tools-mcp`, with the GH-Release wheel URL as the third option * MCP-client config snippet pointing at the binary; registry-driven install path mentioned with the canonical io.github.m-dev-tools/m-dev-tools-mcp namespace * Removed "Track A scaffold" status sentence (Phase 4 closed) * "More" section links the architecture doc + phases/ subfolder (correct path) + summarizes the release.yml automation * Outbound links bumped to docs/ai-discoverability/ paths that actually exist on .github/main ### Version bumps * pyproject.toml: 0.2.3 → 0.2.4 * src/m_dev_tools_mcp/__init__.py: __version__ → "0.2.4" * server.json: top-level version + packages[0].version → "0.2.4" * dist/mcp-tools.json regen ### Verified locally * mcp-name marker present in README.md (grep -c → 1) * make check — ruff + mypy + 41/41 pytest + manifest + check-agents drift gates all clean * make build → wheel-out/m_dev_tools_mcp-0.2.4-py3-none-any.whl ### After merge Push v0.2.4 tag. release.yml fires; expected: 1. build wheel ✅ 2. gh release create ✅ 3. PyPI publish (Trusted Publisher OIDC) ✅ 4. install mcp-publisher ✅ 5. update server.json version ✅ 6. PUBLISH TO MCP REGISTRY ✅ — README marker now satisfies the ownership check; registry can tie pypi/m-dev-tools-mcp to the io.github.m-dev-tools/m-dev-tools-mcp namespace --- README.md | 40 +++++++++++++++++++++++++++------ dist/mcp-tools.json | 2 +- pyproject.toml | 2 +- server.json | 4 ++-- src/m_dev_tools_mcp/__init__.py | 2 +- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2db305e..10e78dc 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,38 @@ MCP server for the [m-dev-tools](https://github.com/m-dev-tools) org catalog. Exposes three first-class agent tools: - **`route_intent(query)`** — plain-English intent → typed IDs (e.g. `"parse JSON in M"` → `module:m-stdlib#STDJSON`) -- **`describe(typed_id)`** — typed ID → pointer-blob (manifest URL, AGENTS.md URL, verification commands, …) +- **`describe(typed_id)`** — typed ID → pointer-blob (manifest URL, `AGENTS.md` URL, verification commands, …) - **`verify(repo)`** — list a repo's declared verification commands (does not execute them) -The server reads the catalog at over the network at call time; it is a thin wrapper, not a cache. See [`AGENTS.md`](AGENTS.md) for the contract and [phase4-plan.md](https://github.com/m-dev-tools/.github/blob/main/docs/ai-discoverability/phase4-plan.md) for the broader plan. +The server reads the catalog at over the network at call time; it is a thin wrapper, not a cache. See [`AGENTS.md`](https://github.com/m-dev-tools/m-dev-tools-mcp/blob/main/AGENTS.md) for the contract and the [AI users guide](https://github.com/m-dev-tools/.github/blob/main/docs/ai-discoverability/ai-users-guide.md) for the full walk-through. -## Status + +mcp-name: io.github.m-dev-tools/m-dev-tools-mcp -Track A scaffold (Phase-0 contract + CI). The three tools are registered with the MCP framework but their bodies raise `NotImplementedError` until Track B lands. Distribution is GitHub Releases (not PyPI) per `phase4-plan.md` §0. - -## Install (Track B onward) +## Install ```bash -uvx --from git+https://github.com/m-dev-tools/m-dev-tools-mcp@main m-dev-tools-mcp +pip install m-dev-tools-mcp +# or: +uvx m-dev-tools-mcp +# or from a GitHub Release wheel: +pip install https://github.com/m-dev-tools/m-dev-tools-mcp/releases/download/v0.2.4/m_dev_tools_mcp-0.2.4-py3-none-any.whl +``` + +Point any MCP client at the `m-dev-tools-mcp` binary the install provides: + +```json +{ + "mcpServers": { + "m-dev-tools": { "command": "m-dev-tools-mcp" } + } +} +``` + +Or for clients that consult the public MCP registry: + +``` +io.github.m-dev-tools/m-dev-tools-mcp ``` ## Develop @@ -24,8 +43,15 @@ uvx --from git+https://github.com/m-dev-tools/m-dev-tools-mcp@main m-dev-tools-m make install # creates .venv and installs editable + dev deps make test # pytest make check # lint + mypy + test + check-manifest + check-agents +make build # → wheel-out/m_dev_tools_mcp--py3-none-any.whl ``` +## More + +- Architecture: [m-dev-tools/.github](https://github.com/m-dev-tools/.github)'s `docs/ai-discoverability/AI-discoverability-architecture.md` +- Plan + phases: `docs/ai-discoverability/phases/` +- Release process: tag `vX.Y.Z` on `main` → `.github/workflows/release.yml` builds the wheel, attaches it to a GitHub Release, publishes to PyPI via Trusted Publisher OIDC, and updates the MCP registry record via GitHub OIDC. + ## License [AGPL-3.0](LICENSE). Same license as every other m-dev-tools repo. diff --git a/dist/mcp-tools.json b/dist/mcp-tools.json index e78f870..3842742 100644 --- a/dist/mcp-tools.json +++ b/dist/mcp-tools.json @@ -2,7 +2,7 @@ "$schema": "https://raw.githubusercontent.com/m-dev-tools/.github/main/profile/repo.meta.schema.json", "kind": "m-dev-tools-mcp.tools", "package": "m_dev_tools_mcp", - "version": "0.2.3", + "version": "0.2.4", "tool_count": 3, "tools": [ { diff --git a/pyproject.toml b/pyproject.toml index 4a8132a..ba72d33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "m-dev-tools-mcp" -version = "0.2.3" +version = "0.2.4" description = "MCP server wrapping the m-dev-tools catalog: route_intent, describe, verify." readme = "README.md" license = { text = "AGPL-3.0" } diff --git a/server.json b/server.json index d0363f6..2deea46 100644 --- a/server.json +++ b/server.json @@ -8,13 +8,13 @@ "url": "https://github.com/m-dev-tools/m-dev-tools-mcp", "source": "github" }, - "version": "0.2.3", + "version": "0.2.4", "packages": [ { "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "m-dev-tools-mcp", - "version": "0.2.3", + "version": "0.2.4", "runtimeHint": "uvx", "transport": { "type": "stdio" diff --git a/src/m_dev_tools_mcp/__init__.py b/src/m_dev_tools_mcp/__init__.py index 612edb0..996ae51 100644 --- a/src/m_dev_tools_mcp/__init__.py +++ b/src/m_dev_tools_mcp/__init__.py @@ -1,3 +1,3 @@ """m-dev-tools-mcp — MCP server wrapping the m-dev-tools org catalog.""" -__version__ = "0.2.3" +__version__ = "0.2.4"