Chatgpt App Submission
OpenAIOfficialCreated by OpenAIDistributed by OpenAI
- Skill
- Workflow
- Agent tooling
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill assists developers in preparing their MCP server for ChatGPT Apps submission. It inspects the codebase to extract metadata, verify tool annotations, and generate the required chatgpt-app-submission.json file. It ensures that tool hints (read-only, destructive, open-world) are explicitly defined and consistent with the actual code implementation, while also providing feedback on potential issues like missing output schemas, sensitive data solicitation, or broad CSP configurations.
What it does
- Inspects MCP server code to identify tools and their functional behaviors.
- Verifies that readOnlyHint, destructiveHint, and openWorldHint annotations match actual code logic.
- Generates a chatgpt-app-submission.json file formatted for the submission process.
- Identifies missing outputSchema definitions in tool descriptors.
- Flags potential security concerns such as sensitive data solicitation or overly broad CSP domains.
- Creates structured positive and negative test cases for submission review.
When to use it
- When preparing an MCP server for submission to the ChatGPT Apps platform.
- When you need to ensure tool annotations accurately reflect the underlying code behavior.
- When you need to generate test cases to demonstrate app functionality for reviewers.
- When you want to audit your codebase for missing output schemas or security-related configuration issues.
Advantages
- Ensures submission files are consistent with actual implementation details.
- Reduces manual effort in drafting submission metadata and test cases.
- Helps identify and resolve common submission blockers before they are flagged by reviewers.
- Promotes adherence to the Apps SDK requirements for tool hints and schema definitions.
Usage examples
- “Generate the submission file for my current MCP server project.”
- The agent inspects the local codebase, verifies tool hints, generates chatgpt-app-submission.json, and reports any findings or missing output schemas.
- “Review my MCP server and prepare it for ChatGPT Apps submission.”
- The agent analyzes the code, checks for sensitive data handling and CSP settings, and provides a summary of necessary updates before creating the submission JSON.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/openai/chatgpt-app-submission/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip chatgpt-app-submission.zip -d .agents/skills
Documentation by OpenAI
ChatGPT App Submission
Use this skill when a developer needs a chatgpt-app-submission.json file for a ChatGPT Apps submission. The file is uploaded in the Apps submission form to fill out parts of App Info, MCP Server, and Testing.
Workflow
Inspect the MCP server codebase from the current working directory.
Read repo metadata, package metadata, README files, app manifests, tool descriptors, resource templates, and widget metadata needed to understand the app.
Find every exposed MCP tool, its declared
readOnlyHint,openWorldHint, anddestructiveHintannotations, and whether it declaresoutputSchema.Read each tool implementation and any called helper functions needed to understand side effects.
Compare tool annotations, tool names, tool descriptions, and CSP values against actual behavior. If any value is missing, stale, misleading, or inconsistent, ask the developer for approval before updating source.
Generate concise review-facing app info suggestions, tool hint justifications, positive test cases, and negative test cases.
Write
chatgpt-app-submission.jsonin the current working directory.Print review-check findings and any missing
outputSchemawarnings in the final response, and explain what the developer should do with each finding before submission.
Do not infer behavior from the tool name alone. Use the real tool implementation and declared annotations. If a tool calls into another module or API client, inspect enough of that path to know whether it reads, writes, deletes, sends, publishes, or changes external state.
App Info Rules
Suggest app info from source-of-truth project metadata and the tool behavior you inspected. Keep it plain-language and submission-review-facing.
display_name: use the product or app name from repo metadata, package metadata, README, manifest, or existing configuration. Keep it short enough for the submission form.subtitle: summarize what the app does in one short functional phrase, not marketing copy. It must be 30 characters or less.description: describe concrete user value and the main workflows the tools support.category: choose one ofBUSINESS,COLLABORATION,DESIGN,DEVELOPER_TOOLS,EDUCATION,ENTERTAINMENT,FINANCE,FOOD,LIFESTYLE,NEWS,PRODUCTIVITY,SHOPPING, orTRAVEL.
Hint Rules
Use the Apps SDK review meanings:
readOnlyHint:trueonly when the tool strictly fetches, looks up, lists, retrieves, or computes data without changing state.falseif it can create, update, delete, send, enqueue, run jobs, write logs, start workflows, or otherwise mutate state.destructiveHint:trueif the tool can delete, overwrite, send irreversible messages or transactions, revoke access, or perform destructive admin actions, including via some modes or parameters. Otherwisefalse.openWorldHint:trueif the tool can change publicly visible internet state or external third-party systems, such as sending emails or messages, posting/publishing content, creating public tickets/issues, pushing code/content, or submitting external forms.falseif it only operates in closed/private systems.
ChatGPT Apps submissions require every tool to set all three hints explicitly. Missing or null hints are submission blockers, even if MCP clients may have protocol-level defaults.
If a hint is missing, null, or does not match the actual behavior you found in code, stop before writing the JSON and ask the developer for approval to update the MCP server source. In the approval request, list each affected tool, the missing/current hint value, the behavior you observed, and the recommended explicit hint value. If the developer approves, make the smallest source change that sets the correct hint explicitly, then generate JSON using the updated values. If the developer does not approve or the correct edit location is ambiguous, do not generate misleading JSON; report the mismatch and the blocked update.
Output Schema Warnings
While inspecting exposed MCP tools, record each tool whose descriptor or source definition omits outputSchema or sets it to null. Missing outputSchema is not a blocker for generating chatgpt-app-submission.json, and the submission JSON does not include output schemas.
Do not infer or invent output schemas for this warning. Use the actual MCP tool descriptor or source definition. In the final response, include a concise warning for any missing tools: Add an outputSchema so models can use this tool's results more reliably. See https://modelcontextprotocol.io/specification/draft/server/tools#tool. Include the affected tool names. If every tool declares outputSchema, do not include an outputSchema warning.
Tool Descriptor and CSP Rules
Check tool names, tool descriptions, and widget CSP metadata while inspecting the app.
Tool input schemas should not solicit sensitive data unless that data is strictly necessary for the app's stated user-facing workflow. Flag fields that ask for PHI, PCI, SSNs, credentials, MFA codes, government IDs, biometrics, or similarly sensitive identifiers.
Tool names should match the action the tool performs and should not imply capabilities the implementation does not provide.
Tool descriptions should accurately describe inputs, side effects, and user-visible results.
CSP values should be as narrow as the implementation supports. Flag wildcard domains, unused domains, broad resource/connect domains, and missing domains required by actual widget behavior.
If tool names, descriptions, or CSP values appear missing or inconsistent with actual behavior, prompt the developer for approval before editing source. If the developer declines or the correct edit is ambiguous, keep the generated JSON truthful and report the finding in the final response.
Test Case Rules
Generate exactly five positive test cases and exactly three negative test cases.
Positive test cases must use exact MCP action names in
tools_triggered.Positive prompts should cover the main tool-backed workflows and edge conditions that review should exercise.
Negative test cases should describe prompts where the app should not trigger, including nearby-but-out-of-scope requests.
Keep expected outputs review-facing and concise. Do not include secrets, credentials, source snippets, local paths, request IDs, stack traces, or private implementation details.
Output Contract
Write exactly one JSON file named chatgpt-app-submission.json:
{
"$schema": "https://developers.openai.com/apps-sdk/schemas/chatgpt-app-submission.v1.json",
"schema_version": 1,
"app_info": {
"display_name": "Example App",
"subtitle": "Find and update records",
"description": "Example App helps users find records, inspect details, and update workspace data through ChatGPT.",
"category": "PRODUCTIVITY"
},
"tools": {
"tool_name": {
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
},
"justifications": {
"read_only_justification": "Only retrieves matching records and does not modify data.",
"open_world_justification": "Does not write to public internet state or third-party systems.",
"destructive_justification": "Does not delete, overwrite, revoke access, or perform irreversible actions."
}
}
},
"test_cases": [
{
"description": "Find records that match a specific user request.",
"user_prompt": "Find my open records for this week.",
"file_attachment_urls": null,
"tools_triggered": "tool_name",
"expected_output": "Returns matching records with enough detail for the user to choose the next action.",
"expected_output_url": null
}
],
"negative_test_cases": [
{
"description": "Do not trigger for unrelated calendar requests.",
"user_prompt": "What meetings do I have tomorrow?",
"file_attachment_urls": null,
"tools_triggered": null,
"expected_output": "The app should not be invoked because the request is outside its supported workflows.",
"expected_output_url": null
}
]
}$schema identifies the import file shape for editors and importers; Codex does not need to fetch it. tools is required. app_info, test_cases, and negative_test_cases are optional in the schema, but generate them whenever the repo contains enough information. Do not include review-check findings in this JSON file.
Writing Justifications
Keep each justification to one sentence.
Be specific about the actual behavior, not the annotation itself.
For write tools, state what system is changed and whether the change is bounded/private or public/external.
For destructive tools, name the irreversible action and mention any real safeguard only if it exists in the code.
Do not include source snippets, secrets, tokens, request IDs, local paths, stack traces, or private implementation details in the JSON.
Good examples:
Only retrieves project metadata and returns it without creating or updating records.Creates a private task in the user's workspace and cannot publish content to public URLs.Deletes the selected workspace document, which cannot be recovered after confirmation.
Bad examples:
readOnlyHint is true because the tool is read-only.Probably safe.The function calls client.delete_item(...) in src/server.py.
Reporting Review Checks
Report these checks in the final response after writing chatgpt-app-submission.json. Do not write them into the JSON file.
Sensitive data solicitation: flag tool input schema fields that request PHI, PCI, SSNs, credentials, MFA codes, government IDs, biometrics, or similarly sensitive identifiers. Include the tool name and input field in the finding.
Tool data use: flag tools that collect, expose, mutate, or transmit sensitive data in a way the descriptor or tests do not clearly explain.
Tool naming: flag names or descriptions that are too vague, misleading, overbroad, or inconsistent with implementation behavior.
Weak CSPs: flag broad, wildcard, unused, or missing CSP domains in widget metadata.
For each finding, explain the practical next step: update source, update submission copy, narrow CSP, remove or justify a sensitive input, or manually review before submitting. If there are no findings, say that these checks did not find obvious issues from source inspection.
Final Response
After writing the file, summarize the app info fields generated, number of tools covered, positive test case count, and negative test case count. Then include a Review findings section with any sensitive data solicitation, tool data use, tool naming, weak CSP findings, or missing outputSchema warnings and what to do with each one. If generation is blocked, lead with the exact missing hints or source ambiguity.
Files
- ATTRIBUTION.mdAdded by AutoGineer959 B
- LICENSE.txt10.5 KiB
- SKILL.md11.0 KiB
LICENSE.txt
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf of
any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Requirements and compatibility
Written for: OpenAI Codex
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- OpenAI
- Publisher
- OpenAI (Official)
- Distributed by
- OpenAI
- Source
- openai/plugins · plugins/openai-developers/skills/chatgpt-app-submission · commit d420d13
- Licence
- Apache License 2.0 (redistribution allowed)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by OpenAI.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download chatgpt-app-submission.zip