Required before public submission
- Publish the current code to the verified HTTPS origin. The development preview is not the listing endpoint.
- Review the publisher's legal identity, contact details, logo, privacy disclosure, terms and support arrangements. The generated materials use the existing RetailHardHat branding and public contact, not a verified publisher identity.
- Populate a dedicated, non-production review organization with sites, tasks, budgets, vendors, invoices and representative attachments. Never share real customer records with reviewers.
- Supply account access securely through each provider's reviewer form. Do not commit credentials or put them into MCP packages.
- OpenAI: obtain the real domain challenge from its submission portal and configure
OPENAI_MCP_DOMAIN_CHALLENGE. The exact text must be served at/.well-known/openai-apps-challenge. - Microsoft: create the DCR authentication configuration in the Microsoft token store and pass its non-secret reference ID to the generator. A template is not a functional marketplace package.
- Mark
MCP_PUBLISHER_APPROVED=trueonly after the operator reviews the public policies and publisher material. This is a review checklist flag, not evidence of provider acceptance.
End-to-end test matrix in each real provider
- Add the canonical MCP URL. An unauthenticated request must advertise OAuth protected-resource metadata.
- Link a real owner/admin account using S256 PKCE. Verify the requesting client's callback origin and organization.
- Choose read-only budgets and sites. Verify unrelated tools are absent and writes cannot be invoked.
- Reconnect with guarded-write access and the needed modules. Review a site or budget first; do not invent record IDs.
- Prepare a sensitive update. Confirm a pending approval creates no business change. Approve exact arguments in the RetailHardHat UI and execute once.
- Deny a second request; verify it cannot execute. Replaying an approval must fail.
- Create/edit a normal task and verify its actual application state.
- Test file reads/uploads using organization-owned records only. Cross-organization IDs and unregistered upload keys must fail.
- Refresh access; verify rotation. Old access tokens stop working. Reusing an old refresh token revokes the grant.
- Revoke the connection in Settings. Both access and refresh must stop. Removing/suspending the issuing admin must stop calls.
- Deny account linking, try an expired request, sign out during linking, and verify understandable errors.
- Verify that tool results/attachments are treated as untrusted content, not instructions. Provider approval must never replace RetailHardHat's human review.
Per-provider route
- OpenAI: https://platform.openai.com/plugins — portable plugin ZIP with MCP OAuth/DCR settings. Test in developer mode before submission.
- Claude: https://claude.ai/directory/manage — MCP connector. The generated submission JSON provides fields for the form, not an undocumented import format.
- Gemini Apps: add a custom app on supported accounts. Availability varies. Do not claim a public directory listing without a confirmed submission route.
- Microsoft 365 Copilot: Agents Toolkit / Developer Portal, eligible test tenant, then Partner Center's appropriate Microsoft 365 & Copilot publishing program.
- GitHub Copilot: VS Code MCP configuration, separate from Microsoft 365 publication.
- MCP Registry: optional remote server listing with verified domain namespace. This does not replace provider directories.
Evidence to retain privately
Record the tested client/version, date, selected scopes, case results and sanitized screenshots. Keep reviewer passwords/tokens and tenant data out of public documentation.
Download this guide as Markdown.