# RetailHardHat MCP provider review

## 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=true` only 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

1. Add the canonical MCP URL. An unauthenticated request must advertise OAuth protected-resource metadata.
2. Link a real owner/admin account using S256 PKCE. Verify the requesting client's callback origin and organization.
3. Choose read-only budgets and sites. Verify unrelated tools are absent and writes cannot be invoked.
4. Reconnect with guarded-write access and the needed modules. Review a site or budget first; do not invent record IDs.
5. Prepare a sensitive update. Confirm a pending approval creates no business change. Approve exact arguments in the RetailHardHat UI and execute once.
6. Deny a second request; verify it cannot execute. Replaying an approval must fail.
7. Create/edit a normal task and verify its actual application state.
8. Test file reads/uploads using organization-owned records only. Cross-organization IDs and unregistered upload keys must fail.
9. Refresh access; verify rotation. Old access tokens stop working. Reusing an old refresh token revokes the grant.
10. Revoke the connection in Settings. Both access and refresh must stop. Removing/suspending the issuing admin must stop calls.
11. Deny account linking, try an expired request, sign out during linking, and verify understandable errors.
12. 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.
