Repository navigation
Closed as duplicate
Closed as duplicate
Copy link
Description
Summary
mcp-publisher publish returns 403 for an organization namespace (io.github.librocat/librocat) even though both documented prerequisites in docs/modelcontextprotocol-io/authentication.mdx are met: I am the sole Owner of the librocat GitHub org (not just a member), and org membership visibility is Public (confirmed independently via the unauthenticated GitHub API: GET /orgs/librocat/public_members/JohnCari → 204).
Error
Error: publish failed: server returned status 403: {"title":"Forbidden","status":403,"detail":"You do not have permission to publish this server. You have permission to publish: io.github.JohnCari/*. Attempting to publish: io.github.librocat/librocat. If you're trying to publish to a GitHub organization, you may need to make your organization membership public in your GitHub settings: ..."}
What I checked/tried (5 attempts across 2 browser sessions)
mcp-publisher init→ generatedserver.jsonwith"name": "io.github.librocat/librocat";mcp-publisher validate server.jsonpasses.mcp-publisher login github(interactive device flow) → succeeds, confirms identity asJohnCari.mcp-publisher publish→ 403 as above. Repeated with a fresh login each time (5 times total), including after:- Flipping org membership from Private to Public in GitHub org settings (
github.com/orgs/librocat/people), verified via the public API as above. - A several-minute wait for possible propagation delay.
- A full browser restart, to rule out stale cookies/session cache client-side.
- Flipping org membership from Private to Public in GitHub org settings (
- Ruled out the org's classic OAuth App access-restriction policy (
Third-party access→OAuth app policy) — that governs classic OAuth Apps, and the registry's login uses a GitHub App (MCP Registry Login (Prod), client idIv23liUydBbI7Z2Q9bOZ), not a classic OAuth App. - Noted that
MCP Registry Login (Prod)is not installed on thelibrocatorg (only personally authorized via the device flow) —github.com/organizations/librocat/settings/installationsshows only an unrelated app (Vercel) installed.authentication.mdxdoesn't document org installation as a requirement for the interactive login path (only for CI-style Personal Access Tokens needingread:org/ fine-grainedMembers: Read-only), so I didn't want to grant broader org access speculatively without knowing it's actually needed — flagging this as a possible missing requirement/doc gap if it turns out to be the real cause.
Expected
Given I'm the org's sole Owner with public membership, mcp-publisher publish should succeed for io.github.librocat/*, per the documented rules in authentication.mdx.
Environment
mcp-publisherversion: 1.8.1 (commitf52dc852, built 2026-08-06)- Auth method: GitHub (interactive device flow)
- Target namespace:
io.github.librocat/librocat - Personal namespace that does work:
io.github.JohnCari/*
Happy to provide more detail (org id, timestamps of attempts, etc.) if useful.
Reacted by Dr. Thomas Jansen and Emerson Sklar
Metadata
Metadata
Assignees
Labels
No labels
Activity
Publish to the MCP Registry from GitHub Actions via OIDC
4hmetuyar commentedon Sep 28, 2026
Same issue, adding a data point since I hit the exact same 403 today (mcp-publisher 1.8.1).
Setup: sole admin of a GitHub org (
GuardBee), org membership flipped from private to public, confirmed independently via the unauthenticated API:Error (identical shape to OP's):
Retried with a fresh
mcp-publisher login github(fresh device-flow auth, confirmed "Successfully authenticated!") several hours after making membership public — same 403, no change.I also checked the hypothesis from the OP's point 5 (that the login app isn't installed on the org, only personally authorized): confirmed the same here.
gh api orgs/GuardBee/installationsshows no MCP Registry Login app installed (only an unrelated app). I tried to find an install page for it to test that theory directly, but the app doesn't appear to be listed on the public GitHub Marketplace/App search, so I couldn't self-serve an install to rule this in or out. If org installation actually is a requirement for the token to carry org-publish permission, that's not currently documented inauthentication.mdxas far as I can tell, and there's no accessible way for an org owner to add the installation.Environment:
mcp-publisher1.8.1, GitHub device-flow auth, target namespaceio.github.GuardBee/*.loyderhy2 commentedon Oct 1, 2026
Additional data point from
trekmail(GitHub accountloyderhy2, active organization Owner).I am using official
mcp-publisher1.8.1 (commitf52dc852) and the GitHub AppMCP Registry Login (Prod)(client IDIv23liUydBbI7Z2Q9bOZ). A successful device login, while my membership was private, returned Registry publish permission only forio.github.loyderhy2/*, notio.github.trekmail/*. I stopped before publishing.I have now made my membership public: unauthenticated
GET /orgs/trekmail/public_members/loyderhy2returned204on 2026-10-01. No post-change login has occurred, so I am not claiming the problem persists after that change. The app is personally authorized and shows zero organization installations.What is the supported procedure to obtain the organization namespace? If installation is required for this official app, could you provide its supported installation URL and exact minimum permissions?
Publish the hosted server to the MCP Registry
jcolvin1056 commentedon Oct 11, 2026
Root Cause Identified + Working Workaround
I hit the same 403 and traced it to a specific root cause with a confirmed workaround.
Root Cause: Device-flow token lacks
read:orgscopeThe
mcp-publisher login githubdevice flow uses the GitHub AppMCP Registry Login (Prod)(client IDIv23liUydBbI7Z2Q9bOZ). This app does not requestread:orgscope in the device-flow authorization. The resulting GitHub token therefore has no ability to query org memberships — even public ones are invisible to it.When the registry backend exchanges this token (via
POST /v0/auth/github-at), it calls GitHub'sGET /user/memberships/orgs?state=active(or equivalent) to discover org namespaces. Because the token lacksread:org, GitHub returns only the personal account — no orgs. The registry then mints a JWT with only the personal namespace:{ "permissions": [ {"action": "publish", "resource": "io.github.jcolvin1056/*"} ] }The org namespace (
io.github.aegisgatesecurity/*) is silently omitted.Evidence
mcp-publisher login github— only personal namespace present (see above).gh auth tokenhasread:org— confirmed viagh api -i /user→X-OAuth-Scopes: ..., read:org, ...{ "permissions": [ {"action": "publish", "resource": "io.github.jcolvin1056/*"}, {"action": "publish", "resource": "io.github.aegisgatesecurity/*"} ] }GET /orgs/aegisgatesecurity/public_members/jcolvin1056→ 204), org role isadmin(GET /user/memberships/orgs/aegisgatesecurity→role: admin).Workaround (confirmed working)
Exchange a token that does have
read:orgscope directly with the registry auth endpoint, bypassingmcp-publisher login:Result:
Why
mcp-publisher logout && logindoesn't fix itThe device flow always requests the same scopes from the same GitHub App. No amount of re-login changes the scopes — the token will always lack
read:org. The only way to get org permissions into the registry JWT is to provide a token that already hasread:org.Suggested Fix
The
MCP Registry Login (Prod)GitHub App should requestread:orgscope during the device flow authorization. This would allow the registry backend to see public org memberships and mint JWTs with org namespaces. Alternatively, the registry backend could use the unauthenticatedGET /orgs/{org}/public_members/{user}endpoint (returns 204/404, no auth needed) to verify public org membership without requiringread:orgon the token.This explains all the reported cases in this issue and the related ones (#1527, #1537, #1468, #1551) — the device flow token simply cannot see orgs.
Environment:
mcp-publisher1.8.1, orgaegisgatesecurity, userjcolvin1056, admin role, public membership confirmed.Dépôt GitHub du serveur MCP : publication sur le registre officiel MC…
rdimitrov commentedon Oct 23, 2026
Closing this as a duplicate of #1468, which tracks the same inability to publish to organization namespaces using interactive GitHub device login and is now linked from the authentication docs. I cross-linked this report there to preserve its diagnostics and workaround reports.
#1483 corrected the misleading error guidance and documented PAT/GitHub Actions OIDC alternatives; it did not fix interactive organization authentication. #1468 remains open for that underlying problem. Please continue tracking the fix there.