ChatGPT app directory package
What OpenAI's plugin portal (platform.openai.com/plugins, "With MCP") takes to list MapleStats in the ChatGPT app directory. Requirements were read from OpenAI's submission, review and packaging pages on 2026-11-07.
| File | What it is |
|---|---|
plugin.json | Listing (extensions.com.openai.interface) and review test cases (extensions.com.openai.review). No version and an empty demo_recording_url: the build fills both. |
mcp.json | The hosted server, streamable-http, auth none. |
build_zip.py | Writes build/chatgpt/maplestats-chatgpt-<version>.zip: the two JSON files at the root and site/assets/icon-512.png as assets/logo.png. |
check_test_cases.py | Runs each test case's tool calls against the live server and fails on any case that would not pass. |
DEMO_VIDEO_SCRIPT.md | Shot list and narration for the review video. |
tests/test_chatgpt_plugin.py checks the field limits, the 5 + 3 test cases
and the ZIP layout without the network.
Steps
uv run python distribution/chatgpt/check_test_cases.py(all eight PASS).- Record the video from
DEMO_VIDEO_SCRIPT.md; host it unlisted. uv run python distribution/chatgpt/build_zip.py --demo-url <video URL>.- In the portal: verify the organization's identity (individual) first, then upload the ZIP, add the server, and copy the domain-verification token.
- Set the token as
MAPLE_OPENAI_APPS_CHALLENGEon the Azure app; checkhttps://mcp.maplestats.danielstats.io/.well-known/openai-apps-challengereturns exactly the token, then finish the challenge in the portal. - Scan tools, review the form (the category must be one of the dashboard's;
Researchis a guess) and submit.
Review risks
- The guidelines ask that each model-callable operation be its own tool and
disallow generic executors. MapleStats exposes
search_tools,call_toolandplan_query, andcall_toolruns any of several hundred data tools by name. A reviewer may readcall_toolas a generic executor; be ready to explain the design, or to list the data tools directly for this client. openWorldHintisfalseonsearch_toolsandplan_query(they read the server's own catalogue) andtrueoncall_tool(public data from outside publishers); the submission form asks for a justification of each.