Agent Tools / app-submit
CLI Docs

app-submit: one manifest for every agent store

app-submit checks an MCP tool against each store's published submission rules. Then it submits the listing where a store has a safe path, and reads the review status.

You write one app-submit.json with the package, the listing text, the MCP server URL, the tool hints and the review test cases. Each store reads the fields it needs from that one file, so the name, the descriptions and the URLs never drift between stores.

Stores

Each store has an adapter, and each adapter says how it submits. An api adapter calls a real HTTP endpoint. A browser adapter drives the store's web form in a signed-in browser. A manual adapter prints the exact steps and every value to paste, because the store has no safe automatic path.

StoreIdKindSign-in
ChatGPT plugin directorychatgptapiAn OpenAI key with api.apps.write, or a signed-in browser
Official MCP registrymcp-registryapiA GitHub token, or an Ed25519 key proved by DNS or HTTP
SmitherysmitheryapiA Smithery API key for a namespace you own
GlamaglamamanualA Glama account
PulseMCPpulsemcpmanualNone: it copies the official MCP registry
mcp.somcp-somanualA GitHub account
Claude connector directoryclaudemanualA paid claude.ai plan
Meta Muse connectorsmusebrowserA Meta account in an ego-browser task space
Vercel Connectvercel-connectmanualA Vercel team; the server must use OAuth
Uneed launch directoryuneedapiA token from an emailed 6-digit code

Every rule has an id, a severity (error or warn) and a link to the store guideline it comes from. A failure says what to fix and where the rule is written.

Quick start

app-submit init my-tool --name my-tool      # writes my-tool/app-submit.json
app-submit validate my-tool                 # offline rules for every store
app-submit validate my-tool --live          # also calls the MCP server and every public URL
app-submit submit chatgpt my-tool --dry     # shows what would be sent
app-submit submit chatgpt my-tool           # uploads a draft, never a review request
app-submit status all my-tool               # listing and review state in every store

Every command prints one JSON object on stdout and nothing else, so an agent can read the result without parsing text. Without --full, validate shows only the failed and warned rules.

Exit codes

CodeMeaning
0ok
1a rule failed, or a store answered with a failure
2usage: a bad argument, a missing manifest or a missing consent flag
3the store refused the request: sign-in or permission
4network: the store could not be reached
5internal error

With all in place of a store id, the exit code is the highest one among the stores.

MCP server mode

app-submit-mcp speaks MCP over stdio. Its tools are list_stores, validate_manifest, import_submission_json, init_manifest, build_package, submit_listing and review_status, and each result is in structuredContent.

{ "mcpServers": { "app-submit": { "command": "app-submit-mcp" } } }

What it never does

It never sends a listing to a store review on its own. ChatGPT review needs both --for-review and --accept-terms, because the second flag accepts the submission terms for the owner. In a browser form it never ticks a consent box and never selects Submit. A store whose rules fail is skipped unless you pass --force.

Keys come from environment variables only. app-submit never prints them and never writes them to its state file, which holds only the ids each store assigned.

Get it

app-submit needs Node 22 and has no other dependencies. The source lives in packages/app-submit of the Agent Tools repository and is not on npm yet. After a clone, npm link puts app-submit and app-submit-mcp on your PATH. To list a tool from this catalog, see the MCP install guides.

Source: each store's submission docs, linked from app-submit stores. As of 2026-10-06.