> ## Documentation Index
> Fetch the complete documentation index at: https://docs.waniwani.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit to the ChatGPT Plugin Store

> A tab-by-tab checklist for listing your Waniwani-built MCP server as a plugin in the ChatGPT Plugin Store: account setup, MCP server, tool justification, test cases, starter prompts, screenshots, and policy compliance.

This guide covers everything you need to prepare to list your MCP server as a plugin in the ChatGPT Plugin Store. We recommend submitting from **your own OpenAI account**, so the listing and its Developer name belong to your organization; if you prefer, Waniwani can handle the submission on your behalf. Either way, most of the engineering work (server, versioning, tool annotations) is already handled. Your job is to prepare the assets and decisions below, then they go into the form.

You create the plugin at [platform.openai.com/plugins](https://platform.openai.com/plugins) and fill in a form split across tabs — **Info → MCP → Skills → Prompts → Testing → Global → Submit**. This guide follows that order, with a short setup section first. OpenAI's own walkthrough is at [Submit plugins](https://learn.chatgpt.com/docs/submit-plugins).

<Note>
  Submitting the form does not guarantee a listing. OpenAI reviews every plugin, and the **Tool justification** and **Test cases** sections are where most rejections happen, so give them the most attention.
</Note>

## Before you start: OpenAI account and access

Sort these out before you open the form, or you will be blocked at the first tab.

* **Apps Management role.** The account that submits needs the **"Apps Management"** permission set to **"Write"** in your organization role. Check it under [Platform → organization roles](https://platform.openai.com/settings/organization/people/roles).
* **Verified identity.** You need a **verified developer or business identity** in the OpenAI Platform. Complete individual or business verification in your organization settings first; verification can take time, so start early.
* **Public URLs live.** Website, support contact, privacy policy, and terms of service must be publicly reachable (see [Plugin info](#3-info-tab-plugin-info) below).
* **Reviewer credentials.** If your plugin requires sign-in, prepare **demo credentials** that work for a reviewer **without MFA, SMS, email confirmation, or private-network access**. Reviewers cannot complete an auth flow that has extra confirmation steps.

<Note>
  If Waniwani submits on your behalf, we handle the account, role, and identity verification. If you submit from your own OpenAI account, these are your responsibility.
</Note>

### Creating the plugin

1. Go to [platform.openai.com/plugins](https://platform.openai.com/plugins) and select **Create plugin**.
2. Choose a submission type:

   * **Skills only** — a package of reusable workflows, no MCP server.
   * **With MCP** — a plugin backed by your MCP server (MCP-only, or MCP-plus-skills).

   For a Waniwani-built plugin, choose **With MCP**. Skills are optional (see the [Skills tab](#5-skills-tab-optional)).

## 1. MCP tab: server, versioned and deployed

The form requires a stable production MCP Server URL, entered on the **MCP** tab.

1. Go to [app.waniwani.ai/mcp](https://app.waniwani.ai/mcp) and confirm your app is listed.
2. Use the dropdown next to your app to copy its production MCP URL.
3. Verify it follows the versioned pattern, for example `https://v1.<your-app>.mcp.waniwani.run/mcp`.
4. On the MCP tab, enter the URL, configure authentication, set the content security policy, then complete domain verification and select **Scan Tools** so OpenAI can read your tool definitions.

<Warning>
  **Domain verification is a common blocker.** OpenAI generates a verification token that must be served at a specific well-known path on your challenge host:

  `https://<challenge-base-host>/.well-known/openai-apps-challenge`

  Plan for this step in advance rather than discovering it mid-form. If you are a managed Waniwani customer, coordinate the timing with us so we can host the token at that path together.
</Warning>

<Note>
  Before you run **Scan Tools**, make sure tool responses contain no secrets, undisclosed user fields, or unnecessary personal data — reviewers inspect the scanned tool output. For managed Waniwani apps this is handled in the server code.
</Note>

## 2. Logo: light and dark versions

Provide two versions of your plugin's icon.

* **Format:** PNG.
* **Shape:** square. Do not add borders or rounded corners; ChatGPT applies circular cropping automatically.
* One **light mode** version and one **dark mode** version.

## 3. Info tab: plugin info

Prepare these fields in advance. Use the **customer-facing product or workflow name**, and make sure every URL matches your verified publisher identity.

| Field                    | Requirements                                                                                                                                                                                                               | Example                           |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
| **Name**                 | Your plugin's display name. How users find and recognize it. Keep it short and on-brand.                                                                                                                                   | `Your Plugin Name`                |
| **Subtitle**             | Short, plain-language phrase. **30 characters max** (the limit is strict, count carefully). Focus on function and value, not marketing.                                                                                    | `Find the best deals near you`    |
| **Description**          | Clear description of what the plugin does and why people want it. Concrete value, no exaggerated or misleading claims. Appears publicly.                                                                                   | See guidance below                |
| **Category**             | One of ChatGPT's predefined categories. Pick the one matching your primary function.                                                                                                                                       | `Finance`                         |
| **Developer**            | Your company name when you submit from your own OpenAI account (recommended). OpenAI verifies this against the submission account, so it must match whoever submits: if Waniwani submits on your behalf, it is `WaniWani`. | `Your Company`                    |
| **Website URL**          | Your main company or product website. Use the top-level URL, not a deep link, and make sure it loads cleanly.                                                                                                              | `https://yourcompany.com`         |
| **Support URL or Email** | A working, monitored channel. Reviewers may test it.                                                                                                                                                                       | `support@yourcompany.com`         |
| **Privacy Policy URL**   | A live, publicly accessible page. Confirm it in a private window: if it 404s or needs a login, it is rejected.                                                                                                             | `https://yourcompany.com/privacy` |
| **Terms of Service URL** | A live, publicly accessible page (same check as above).                                                                                                                                                                    | `https://yourcompany.com/terms`   |
| **Demo Recording URL**   | A video showing your plugin working across all main use cases and tools.                                                                                                                                                   | A public YouTube or Loom link     |

### Writing the description

Structure it like this:

1. **Opening paragraph:** what the plugin does and the value it provides (two to three sentences).
2. **"What you can do with \[Plugin Name]":** three to five bullet points of key capabilities.
3. Keep it factual and user-centric, and avoid hype.

For tone and length, study how live plugins write theirs, for example [Compare the Market](https://chatgpt.com/apps/compare-the-market/asdk_app_69a41e8393c48191bf5b3ecfb7963af9), [Aviva](https://chatgpt.com/apps/aviva/asdk_app_69a6eb598b4c8191b10712ed489e8e11), and [Tuio](https://chatgpt.com/apps/tuio/asdk_app_6970fc7c958881918cfa39d58fc37e82).

### Recording the demo

The video must cover all main use cases and tools across every platform you support (web, iOS, Android). A practical recipe:

1. Record several runs of the plugin working across different scenarios.
2. Stitch them into one video, one scenario after another.
3. Speed it up to at least 2x. The point is for a reviewer to see what the plugin does quickly.

### If your plugin involves commerce

You will be asked to confirm your purchasing flow and to describe the products you intend to sell. For regulated products such as insurance, be transparent that you help users get a **quote estimate**: if they like it, they are redirected to your website to finalize. Do not present a "final price" inside the chat.

## 4. Tool justification (critical step)

This is the hardest part and the most common reason for rejection. For **every tool** your MCP server exposes, OpenAI requires three annotation hints, each with a written justification. If they are not set, OpenAI assumes the worst defaults: `readOnlyHint = false`, `openWorldHint = true`, `destructiveHint = true`.

| Annotation      | Question it answers                                                  | Values   |
| --------------- | -------------------------------------------------------------------- | -------- |
| **Read Only**   | Does this tool only read data without modifying anything?            | Yes / No |
| **Open World**  | Does this tool call an external API or service outside your control? | Yes / No |
| **Destructive** | Can this tool delete, overwrite, or irreversibly modify data?        | Yes / No |

For each annotation on each tool, the form wants a short written justification explaining why the value is accurate. Tools that touch external services may also need CSP metadata (`connect_domains`, `resource_domains`).

Use the [Tool justification template](/platform/guides/templates/tool-justification) to lay out every tool, its annotation values, and the justification text before you open the form. For managed Waniwani apps, the annotations and CSP metadata are set in the server code for you, and you receive the justifications pre-filled to review and paste.

## 5. Skills tab (optional)

Skills are self-contained, reusable workflow packages. You can submit **skills only** (no MCP server) or bundle skills alongside your plugin. If you have no skills to ship, leave this tab empty.

* Upload the final **skill bundle** with a tested file structure.
* Confirm the bundle works end to end before uploading — a broken bundle is a rejection.

For most Waniwani-built plugins you can skip this tab; talk to us if you want to package workflows as skills.

## 6. Prompts tab: starter prompts

Provide specific **starter prompts** that demonstrate your plugin's key workflows. These are the example prompts ChatGPT surfaces to users.

* Make each prompt concrete and adaptable, not generic ("Find pet insurance for a 3-year-old labrador," not "Help me with insurance").
* Cover your main tools and use cases, aligning with your positive test cases below.

## 7. Testing tab: 5 positive and 3 negative test cases

OpenAI reviewers run these to validate your plugin, and they are reviewed carefully.

* **At least 5 positive cases:** scenarios where the plugin should trigger and work. For each, the form asks for the scenario, the user prompt, which tools fire, and the expected output.
* **At least 3 negative cases:** prompts where the plugin should **not** trigger. For each, the form asks for the scenario and the prompt.

Lay them out first with the [Test cases template](/platform/guides/templates/test-cases).

<Note>
  If your plugin requires sign-in, provide the **reviewer demo credentials** here (or where the form asks for them). They must let a reviewer complete every test case **without MFA, SMS, email confirmation, or private-network access**.
</Note>

## 8. Global tab: regional availability

Decide whether the plugin is worldwide or restricted.

* **All countries:** available in every [ChatGPT-supported country](https://help.openai.com/en/articles/7947663-chatgpt-supported-countries).
* **Specific countries:** list them. Restrict if your service only operates in certain regions or the content is only relevant there.

## 9. Translations and locale

Parts of the form must be in English.

* **English (US)** is always required as the base locale.
* You can add other locales (for example français, español, Deutsch). For each, provide a translated **Subtitle** and **Description**.
* ChatGPT may auto-translate some fields, but your own translations ensure quality.

## 10. Screenshots

Provide screenshots of your plugin's widgets in action.

* **Format:** PNG.
* **Width:** 706px. **Height:** minimum 400px, recommended maximum 860px.
* At least 1 screenshot at 2x (retina quality), maximum 4.
* Each screenshot needs an example user message that would produce what's shown.
* The first three appear on install views and are reused across sizes and locales, so lead with your strongest states.

## 11. Submit tab: policy compliance and release notes

On the final **Submit** tab you confirm that your plugin:

* Complies with [OpenAI's Terms](https://openai.com/policies/connectors-actions-terms/) and [Submission Guidelines](https://developers.openai.com/apps-sdk/app-developer-guidelines), which you have reviewed.
* Complies with applicable industry laws and regulations.
* Does **not** initiate or execute money, crypto, or investment transfers.
* Does **not** serve or display advertisements.
* Uses third-party content and API endpoints you have the rights to.
* Is **not** designed for or marketed to children under 13, and you confirm it is suitable for 13+ or 18+.

You also provide **Release Notes**, a required field that may be shown publicly, then attest that everything is accurate.

<Note>
  Approval is not the same as going live. After OpenAI approves your plugin, you choose **when to publish** from the plugins portal; the listing appears in the ChatGPT Plugin Store only once you publish it.
</Note>

## Summary checklist

* [ ] "Apps Management" role set to Write, and developer/business identity verified
* [ ] Reviewer demo credentials that work without MFA/SMS/email confirmation
* [ ] Versioned MCP server deployed and reachable
* [ ] Domain verified at `/.well-known/openai-apps-challenge`, tools scanned
* [ ] Light and dark PNG logos (square, no borders)
* [ ] All plugin info fields prepared (mind the 30-character subtitle limit)
* [ ] Tool annotations set in the server with written justifications
* [ ] Skill bundle uploaded, if applicable
* [ ] Starter prompts written
* [ ] 5 positive and 3 negative test cases written
* [ ] Regional availability decided
* [ ] English base locale, plus translations if needed
* [ ] Screenshots (PNG, 706px wide, 400 to 860px tall, max 4)
* [ ] Demo recording ready
* [ ] Privacy Policy and Terms of Service URLs live
* [ ] Commerce disclosures prepared, if applicable

<CardGroup cols={2}>
  <Card title="Tool justification template" icon="shield-check" href="/platform/guides/templates/tool-justification">
    Lay out every tool's annotations and justification text before you open the form.
  </Card>

  <Card title="Test cases template" icon="list-check" href="/platform/guides/templates/test-cases">
    The 5 positive and 3 negative cases, ready to fill in.
  </Card>

  <Card title="Claude submission" icon="plug" href="/platform/guides/claude">
    Listing the same app in Claude's Connectors Directory.
  </Card>

  <Card title="After you submit" icon="chart-line" href="/platform/guides/post-submission">
    Drive traffic to your listing once it is live.
  </Card>
</CardGroup>
