Build your extension
Everything you see in the marketplace was published by someone. It could be you. The road has five stretches: create → test → package → publish → maintain, and the app walks all of them with you.
The whole road
Section titled “The whole road”-
Create
Section titled “Create”The extensions gallery has a creation tab. Start by picking the kind: MCP server, skill, plugin, agent or team.
You don’t start from a blank page: each kind starts from a template that already works. On top of it you fill in the name, description, icon and the credentials your extension will need.
And the model helps: describe in your own words what you want it to do and it generates the whole skeleton, manifest included. You review it and adjust.
-
Test before publishing
Section titled “Test before publishing”The extension is installed locally and runs right there. You see its tools, you see what it returns and you see its errors with the full text.
-
Package
Section titled “Package”Packaging writes the manifest: version, requirements, supported platforms, declared permissions and the names of the credentials it asks for. The package’s SHA-256 checksum is added too, so whoever installs it can check they are getting exactly what you published.
If you package an agent you already have configured (the option to publish this agent, from its own card), the app strips your credentials: the names of what has to be connected travel with it, never their values. Your API key stays on your machine.
-
Publish
Section titled “Publish”You identify yourself with your Context Code account — the same one you sign into the app with; there is no separate publishing account.
The entry stays under review until an administrator approves it. Once approved it becomes published and shows up in everyone’s gallery. If it is rejected, it goes back to draft with the reason written down, which you get to read.
draft ──▶ under review ──▶ published ──▶ withdrawn│└──▶ draft (rejected, with the reason) -
Update and withdraw
Section titled “Update and withdraw”Publishing a new version puts it back under review: every version gets looked at. You can withdraw your extension whenever you want; it stops being offered for new installs.
Your listing shows how many installs it has racked up. It is a rough counter, just to give you a sense of the reach.
The manifest
Section titled “The manifest”The manifest is the document that describes your extension. It is what the gallery reads to draw the listing, and what the app reads to install it.
An agent’s manifest
Section titled “An agent’s manifest”This agent writes financial reports. Note three things: modeloRecomendado is the model its author considers best, alternativas includes at least one local option ("local": true, with the context-forge provider) so it can be used at no cost, and under mcp only the names of the credentials travel, never their values.
{ "formato": 1, "permisos": ["lectura-archivos", "red"], "agente": { "rol": "Financial report analyst", "instrucciones": "Read the quarter's figures, compare them with the previous quarter and write a report with an executive summary, a table of figures and three conclusions. Never invent a number: if data is missing, say so.", "tono": "Sober and direct, no spare adjectives.", "queSabeHacer": [ "Compare two periods and explain the variances", "Write the executive summary for management", "Spot figures that don't add up and flag them" ], "modeloRecomendado": { "proveedor": "anthropic", "modelo": "claude-sonnet-4-5", "local": false }, "alternativas": [ { "proveedor": "openai", "modelo": "gpt-5", "local": false }, { "proveedor": "context-forge", "modelo": "qwen3-27b-instruct", "local": true } ], "herramientas": ["leer_archivo", "escribir_archivo", "buscar"], "permisos": ["lectura-archivos"], "habilidades": ["redaccion-informes"], "mcp": [ { "id": "postgres", "credenciales": ["POSTGRES_URL"] }, { "id": "hoja-calculo", "credenciales": ["SHEETS_TOKEN"] } ], "planPrevio": true, "delegaEnSubagentes": false, "limiteGastoSugerido": "2.00", "ejemplos": [ "Prepare the third-quarter report from the data in the database", "Compare this month's sales with the same month last year", "Review this report and tell me which figures don't add up" ] }}rol,instruccionesandtonoare the agent’s identity: who it is and how it speaks.queSabeHaceris the list shown on the listing, so it can be grasped at a glance.herramientas,permisos,habilidadesandmcpare what it needs in order to work. All of it is shown to the user before installing.planPreviosays whether it proposes a plan before acting;delegaEnSubagentes, whether it opens helper agents;limiteGastoSugerido, how much it is sensible to let it spend per task.ejemplosare the requests shown on the listing to fire off with one click.
A team’s manifest
Section titled “A team’s manifest”A social media team: a campaign coordinator hands out the work and each agent writes for its own network.
{ "formato": 1, "equipo": { "coordinador": { "nombre": "Campaign coordinator", "rol": "Takes the campaign message, decides what goes out on each network, hands out the work and checks that everything tells the same story before signing off." }, "agentes": [ { "id": "redes-instagram", "nombre": "Instagram agent", "rol": "Writes short, visual captions, suggests the image and picks the hashtags." }, { "id": "redes-x", "nombre": "X agent", "rol": "Condenses the message into very short posts and prepares a thread when something needs developing." }, { "id": "redes-linkedin", "nombre": "LinkedIn agent", "rol": "Writes in a professional register, with the reasoning behind the announcement and a restrained call to action." } ], "repartoTareas": "The coordinator creates one task per network from the campaign message, sends it to its agent, collects the drafts, checks they don't contradict each other and returns the package ready for review." }}Publishing rules
Section titled “Publishing rules”- Identifier in lowercase with hyphens:
redes-instagram, notRedes Instagramorredes_instagram. - An agent must always offer a local model alternative. Nobody should need a subscription just to try your agent.
- Never upload credentials. The names of what has to be connected travel with the package; the values stay on each user’s machine. A package with a key inside is rejected.
OfficialandVerifiedare granted only by the Context Code team, never by the author. Don’t put them in your manifest.- Everything from outside goes through review before becoming public. No exceptions, and on every new version.