“annotations_required”
At least one tool the portal scanned does not set readOnlyHint, destructiveHint and openWorldHint to explicit true or false in its annotations. The three common causes: (1) A hint is simply unset: SDKs omit annotations unless you pass them, and the spec's defaults do not count. To tell: The doctor fails at tool-annotations and lists each tool with the hints it lacks. (2) The hints are in the wrong place or of the wrong type: under _meta instead of annotations, or the strings "true"/"false". To tell: The doctor fails at tool-annotations for tools you thought were annotated. (3) The server is fixed but the portal still holds the old scan: annotations are imported when you select Scan Tools. To tell: The doctor passes; select Scan Tools again in the portal and check the imported values. One command shows which: npx --allow-git=root github:agentwares/mcp-apps-doctor https://your-server.example/mcp --host chatgpt-directory.
Check your server now
npx --allow-git=root github:agentwares/mcp-apps-doctor https://your-server.example/mcp --host chatgpt-directory
Discovery only: no credential, no tool called. It prints the first broken step, whose it is, and the fix with its source, and shows the view in a sandboxed preview.
Who prints it
OpenAI's plugin submission portal, at final submission of a remote MCP plugin.
The three causes, and how to tell them apart
- Cause 1. A hint is simply unset: SDKs omit annotations unless you pass them, and the spec's defaults do not count.
The check flags it attool-annotations. The doctor fails at tool-annotations and lists each tool with the hints it lacks. - Cause 2. The hints are in the wrong place or of the wrong type: under _meta instead of annotations, or the strings "true"/"false".
The check flags it attool-annotations. The doctor fails at tool-annotations for tools you thought were annotated. - Cause 3. The server is fixed but the portal still holds the old scan: annotations are imported when you select Scan Tools.
The check cannot see this one from outside: it happens inside the host or the portal. The doctor passes; select Scan Tools again in the portal and check the imported values.
Sources and public reports
- annotations_required: every MCP tool must set readOnlyHint, openWorldHint, and destructiveHint accurately [source: OpenAI plugin submission errors, read 8 October 2026]
- explicit boolean values; the same page says annotation justifications are no longer required, while the errors page still lists justification_required [source: OpenAI plugin guidelines, MCP requirements, read 8 October 2026]
Keep checking
Other messages
- “MCP App renders blank”
- “Resource not found: ui://”
- “Tool has no UI”
- “Invalid ui.domain format”
- “ui.domain mismatch”
- “Refused to load the script”
- “domain_verification_required”
- “frame_domain_explanation_required”
- “screenshots_not_allowed”
- “Failed to fetch template”
Written 8 October 2026 from the sources above. The MCP Apps check · MCP Liveness · Terms · Privacy