> ## 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.

# Tool justification template

> A copy-pasteable template for the ChatGPT Plugin Store tool-annotation step: list every tool, its read-only / open-world / destructive values, and the written justification reviewers require.

The tool-annotation step is the most common reason a ChatGPT submission is rejected. For **every tool** your MCP server exposes, OpenAI requires three annotation values and a written justification for each. This page gives you a template to lay them all out before you open the form, and a reference for what each value means.

<Note>
  For managed Waniwani apps, the annotations are already set in the server code and you receive these justifications pre-filled to review and paste. This template is for laying them out yourself or for checking that the prepared values match what your app actually does.
</Note>

## How to use this

1. Add one row per tool to the table below.
2. Fill the Yes/No values to match how each tool behaves (use the reference at the bottom if unsure).
3. Write a one or two sentence justification for each value, stating plainly why it is accurate.
4. When the form scans your server, confirm the values it shows match this table, then paste your justifications.

## Tool annotations

Copy this table and fill one row per tool:

| Tool name     | Read Only | Read Only justification    | Open World | Open World justification   | Destructive | Destructive justification  |
| ------------- | --------- | -------------------------- | ---------- | -------------------------- | ----------- | -------------------------- |
| `tool_name_1` | Yes / No  | Why this value is accurate | Yes / No   | Why this value is accurate | Yes / No    | Why this value is accurate |
| `tool_name_2` | Yes / No  | Why this value is accurate | Yes / No   | Why this value is accurate | Yes / No    | Why this value is accurate |
| `tool_name_3` | Yes / No  | Why this value is accurate | Yes / No   | Why this value is accurate | Yes / No    | Why this value is accurate |

Add or remove rows so the count matches your server exactly.

## CSP metadata

If any tool interacts with external services, list its domains:

| Tool name     | Connect domains       | Resource domains      |
| ------------- | --------------------- | --------------------- |
| `tool_name_1` | `api.yourcompany.com` | `cdn.yourcompany.com` |

## What each annotation means

| Annotation      | Question                                                                                 | Set to **Yes** when                                                                              | Set to **No** when                                                                                                             |
| --------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| **Read Only**   | Does this tool only read data without modifying anything?                                | The tool only fetches or displays data; nothing is created, updated, or deleted.                 | The tool creates, updates, or deletes any data.                                                                                |
| **Open World**  | Does the tool interact with an open world of external entities, or is its domain closed? | The tool calls an external API or service the user defines (a web search, an arbitrary backend). | The tool only uses local data, renders UI with no external calls, or uses pre-approved internal APIs fully under your control. |
| **Destructive** | Can this tool delete, overwrite, or irreversibly modify data?                            | The tool can delete records, overwrite data, or cause irreversible changes.                      | The tool only reads or creates new data without modifying or deleting existing records.                                        |

<Note>
  If the annotations are not set, OpenAI assumes the worst defaults: `readOnlyHint = false`, `openWorldHint = true`, `destructiveHint = true`. That is why setting and justifying them accurately matters. For more background, see the [MCP tool annotations post](https://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/).
</Note>

<CardGroup cols={2}>
  <Card title="Back to ChatGPT submission" icon="store" href="/platform/guides/chatgpt">
    Where this template fits in the full checklist.
  </Card>

  <Card title="Test cases template" icon="list-check" href="/platform/guides/templates/test-cases">
    The other section reviewers check hardest.
  </Card>
</CardGroup>
