Skip to content
Skills Library
Programming · Conversion & formats

plugin-package

/plugin-package

Build the two store packages for one MCP server from a single listing source - the ChatGPT plugin ZIP (plugin.json with the com.openai interface, review test cases and publication blocks, mcp.json with the OAuth settings, an onboarding skill, icons) and Claude's plugin bundle and connector-portal text - and check the ZIP for the mistakes the OpenAI upload rejects. Use when preparing a ChatGPT plugin ZIP or a Claude plugin, when the OpenAI portal says "Invalid plugin package" or "Update the MCP authentication settings", when a brand-colour or contrast finding appears, or when listing text needs

Licence
MIT
Last repository change
07.11.2026

Assessment and security

100/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
3
Scripts
1
HTML comments
0
URLs in SKILL.md
3
Deprecation

No signals detected. Repository changed on 07.11.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What to check before installing
  • 1 scripts in this package. Review them before installing, as Claude may execute them.

Scripts: scripts/check_chatgpt_package.py

What it does and when to use it

Build the two store packages for one MCP server from a single listing source - the ChatGPT plugin ZIP (plugin.json with the com.openai interface, review test cases and publication blocks, mcp.json with the OAuth settings, an onboarding skill, icons) and Claude's plugin bundle and connector-portal text - and check the ZIP for the mistakes the OpenAI upload rejects. Use when preparing a ChatGPT plugin ZIP or a Claude plugin, when the OpenAI portal says "Invalid plugin package" or "Update the MCP authentication settings", when a brand-colour or contrast finding appears, or when listing text needs

Triggers from the description

Invalid plugin packageUpdate the MCP authentication settings
Original author description

Build the two store packages for one MCP server from a single listing source - the ChatGPT plugin ZIP (plugin.json with the com.openai interface, review test cases and publication blocks, mcp.json with the OAuth settings, an onboarding skill, icons) and Claude's plugin bundle and connector-portal text - and check the ZIP for the mistakes the OpenAI upload rejects. Use when preparing a ChatGPT plugin ZIP or a Claude plugin, when the OpenAI portal says "Invalid plugin package" or "Update the MCP authentication settings", when a brand-colour or contrast finding appears, or when listing text needs

How it works

  1. The ChatGPT ZIP
  2. Claude
  3. Words that fit both
Original SKILL.md headings · 67 lines, 501 words
SKILL.md preview
---
name: plugin-package
description: Build the two store packages for one MCP server from a single listing source - the ChatGPT plugin ZIP (plugin.json with the com.openai interface, review test cases and publication blocks, mcp.json with the OAuth settings, an onboarding skill, icons) and Claude's plugin bundle and connector-portal text - and check the ZIP for the mistakes the OpenAI upload rejects. Use when preparing a ChatGPT plugin ZIP or a Claude plugin, when the OpenAI portal says "Invalid plugin package" or "Update the MCP authentication settings", when a brand-colour or contrast finding appears, or when listing text needs to fit each store's limits.
license: MIT
metadata:
  author: Saurabh Yadav
  version: "0.1.0"
---

# Two packages from one listing source

Keep every word of the listing (names, descriptions, prompts, test cases, URLs, colours) in one
file, for example `plugin/listing.json`, and generate both packages from it with a script. Put
the store's name in the shared description as a placeholder (`{app}` → "ChatGPT" or "Claude").
Re-run the generator in CI with a `--check` flag that fails when a package is out of date.

## The ChatGPT ZIP

Upload at platform.openai.com/plugins. The ZIP's root holds:

```
plugin.json                 $schema https://agent-plugins.org/schemas/1.0.0/plugin.schema.json
mcp.json                    the server and its auth
skills/get-started/SKILL.md an onboarding skill (name must match the folder)
assets/icon.png icon-dark.png logo.png
```

Shapes and limits are in `references/chatgpt-package.md`. The checks that the upload enforces
and that bit us, all caught by `scripts/check_chatgpt_package.py`:

- `review.test_cases.positive[].tools_triggered` is **one string**, names joined by `", "`,
  not a list ("Input should be a valid string").
- `mcp.json` `auth` needs **`authorizationUrl` and `tokenUrl`** beside `client: {mode: "cimd"}`
  ("Declare both authorizationUrl and tokenUrl for OAuth"), even though discovery gives them.
- **Brand colours need contrast**: dark vs `#212121` at least 2:1 ("Dark brand color must have at
  least 2:1 contrast against #212121"); check the light one against white too.
- **The demo video is required to submit for review.** Leave an empty `demo_recording_url` out
  (the upload rejects it), and tell the user they still need the video link before submitting:
  in `plugin.json`, or pasted in the portal's Supporting content step.
- Exactly five positive and three negative test cases for submission; `developerName` equal to
  your verified identity; `displayName` and `shortDescription` at most 30 characters; up to three
  `defaultPrompt`s of at most 128.
- No `commerce` in the plugin: purchases stay on your website.

```
python3 scripts/check_chatgpt_package.py upsc-grade-chatgpt.zip           # or a folder
python3 scripts/check_chatgpt_package.py dist/chatgpt --server https://api.example.com
```

`--server` also fetches your authorization-server metadata and checks the ZIP's
`authorizationUrl` and `tokenUrl` match it.

## Claude

Claude has two listings that can point at the same server:

- **The connector** (claude.ai/directory/manage → Submit → MCP connector): typed into the
  portal. Generate its text (one-liner, description, use cases, test steps) from the listing
  source into a markdown file you copy from; see `submit-to-claude`.
- **A plugin bundle** (optional): a public GitHub repo with `.claude-plugin/plugin.json`,
  `.mcp.json` (`{"mcpServers": {"<name>": {"type": "http", "url": "https://…/mcp"}}}`), a skill,
  a README of at least 40 words that says what it does, how to use it and what data it sends,
  and a LICENSE. No symlinks, no secrets.

## Words that fit both

- ChatGPT: `shortDescription` 30 characters ("Your exam second brain"), `longDescription` up to
  4,000, capabilities up to 20 lines of 120.
- Claude: one-liner up to 200, but the directory card shows about 90 before cutting it;
  description up to 2,000.
- Claims must match what the tools do: reviewers compare them. Count things on real data (a
  "20,000 answers" claim that counts empty rows is wrong), and say where data comes from
  ("from the official key wherever one is published").
- Leave affiliation disclaimers and marketing superlatives out of the one-liner; keep facts.
Files in this package (3)
  • SKILL.md 4 KB
  • references/chatgpt-package.md 3 KB
  • scripts/check_chatgpt_package.py 9 KB

Versions

The database has no other skills named plugin-package.

Database snapshot: 13.11.2026 · package version 6e50fe93414b (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 90submit-to-chatgpt
    Walk through publishing an MCP server as a ChatGPT plugin at platform.openai.com/plugins, step by step - testing it first as a custom MCP server in ChatGPT, uploading the ZIP, connecting the server, the domain-verification token at /.well-known/openai-apps-challenge, reviewer…
  • 90submit-to-claude
    Walk through listing a remote MCP server in Claude's connector directory at claude.ai/directory/manage - testing it first as a custom connector, letting Anthropic's servers through bot protection, the portal's ten steps (connection, tools, listing copy that fits the directory…
  • 100package-author
    当用户要把手头的工具打包/标准化成 pinvou 插件包时使用——包括纯技能(SKILL.md)、纯 MCP 服务或它们的组合包。用户说"打包/做成插件包/标准化这个工具/给我一个能上传的标准包/写 plugin.json/加个图标"等,或给了散乱脚本/目录要整理成可上传 zip 时,用本技能把内容规范成 plugin-protocol 标准包(补 plugin.json、补 mcp/manifest.json、补 SKILL.md、补图标、校验命名)。
  • 90submit-plugin
    Submit an AI plugin to the ChatGPT, Claude or Cursor stores: a store-ready kit with first-listing copy, assets, reviewer answers and the choices that can't change later, such as MCP origin, slug and countries. Use when preparing a plugin for submission, checking a repo is ready…
  • 100wp-plugin-zip
    Builds and checks WordPress plugin and theme .zip packages so they install and activate cleanly. Use it whenever you package a WordPress plugin or theme for upload, a release or a client, and whenever the user reports "Plugin file does not exist", "The package could not be…
  • 90prepare-plugin-submission
    Guide a user through preparing an existing plugin for public submission, including review and publication metadata, listing, examples, demo, and reviewer access. Use when the user wants to get ready to submit, create a submission-ready ZIP, submit, or publicly release a plugin.

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.