mcp-server-for-plugins
Skill1 starsChanged 7 days agoMITView on GitHub
Design or review the tools of a remote MCP server so both ChatGPT's plugin review and Claude's connector review accept it and both models actually call it - Streamable HTTP at /mcp, verb_first tool names, titles, all four annotation hints set explicitly, output schemas with structured content, error results that say what to do, a per-result size budget, and server instructions that make ChatGPT use your tool instead of its own built-in features. Use when building or auditing an MCP server for ChatGPT or Claude, when a test prompt gets answered without your tool being called, when a review flags annotations or descriptions, or when tool results are too large.
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- mcp-app-cardsSkill
- plugin-oauthSkill
- plugin-packageSkill
- plugin-prerequisitesSkill
- publish-mcp-serverSkill
- submit-to-chatgptSkill
- submit-to-claudeSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
Every request needs a bearer token (see plugin-oauth).
- Distinctive: line 63
Write test prompts that name the thing only your tool has ("5 of our past questions"), and test them in ChatGPT without @-mentioning the …
- Distinctive: line 69
Run each review test prompt against the deployed server in both hosts.
- Distinctive: line 70
Keep a catalogue page (a docs URL) generated from the same registry.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
An MCP server both stores accept
Both reviews read your tool list (names, titles, descriptions, annotations, schemas) and run the
test prompts you give them. Most findings come from the tool list itself, so get it right before
packaging. Detailed rules with examples: references/tool-design.md.
Transport and shape
- Streamable HTTP at one URL, for example
https://api.example.com/mcp. Both stores connect server-to-server; neither needs your server to be reachable from the user's browser except the sign-in pages. - Every request needs a bearer token (see
plugin-oauth). Unauthenticated calls get 401 with aWWW-Authenticateheader that points at your protected-resource metadata. - Allow only your own public host in the
Hostcheck (DNS-rebinding protection) and keep a health endpoint that reports the deployed version.
Each tool
Audit every tool against this list. A script that walks your registry and asserts it is cheap and catches regressions (see the reference for one).
- Name: verb first, lowercase snake_case, under 64 characters, unique:
get_marked_answer,search_questions,mark_pasted_answer. No product prefix. - Title: short and human, shown in both UIs ("A marked answer").
- Description: what it does and what it returns, in plain words. Don't steer ("use this first", "start here") - reviewers flag it and it belongs in server instructions.
- All four annotations, set explicitly:
readOnlyHint,destructiveHint,idempotentHint,openWorldHint. A missing hint is read as the cautious value. Anything that spends the user's money or credits isdestructiveHint: trueso hosts ask before running it. - Inputs: minimal, each with a description. A tool that takes nothing declares
{"type":"object","properties":{},"additionalProperties":false}. - Output schema +
structuredContent, plus the same data as text for clients that don't read structured output. Links are wholehttps://URLs, never paths. - Errors: return
isError: truewith a sentence that says what to do next ("Choose one option: a, b, c or d."), not a stack trace. - Size: hold every result under a budget (about 20,000 characters is a good ceiling). Measure on real data, not seeded tests: a list of ten real items can be several times the size of ten test items. When a field pushes a list over, return it only from the single-item tool.
- No generic executor ("run_query", "call_api"); one tool per job.
Make the model call you
ChatGPT has built-in features (quizzes, web search, canvases). A prompt like "give me 5 practice questions" can be answered by ChatGPT itself even with your plugin connected, and a reviewer sees your test case fail. Two fixes, both needed:
- Server instructions (the
instructionsfield at initialize): say when to use which tool and what never to do instead, for example "When the user asks for practice questions, start a quiz with start_quiz, which gives our own past questions; never write questions of your own." - A description that leads with the job: "Gives the user practice questions: our own past questions, as a quiz..." rather than leading with mechanics.
Write test prompts that name the thing only your tool has ("5 of our past questions"), and test them in ChatGPT without @-mentioning the plugin as well as with it.
Before packaging
- Snapshot the tool list (names, descriptions, schemas) in a test so every change is visible.
- Run each review test prompt against the deployed server in both hosts.
- Keep a catalogue page (a docs URL) generated from the same registry; Claude asks for one.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

