[Go to site: main page, start]

Skip to main content

Command Palette

Search for a command to run...

Comenzar

Referencia de plugins

Documentación de referencia para crear, estructurar y enviar plugins de Cursor. Los plugins agrupan reglas, skills, agentes de programación, comandos, servidores MCP y hooks en paquetes distribuibles compatibles con el IDE de Cursor.

Si empiezas desde cero, usa el repositorio de plantilla de plugins.

Formatos de plugin compatibles

Cursor carga plugins en dos formatos, identificados por la ubicación de su manifiesto:

FormatoUbicación del manifiestoComponentes
Agent Plugins (estándar abierto)plugin.json en la raíz del pluginSkills, servidores MCP
Plugins de Cursor.cursor-plugin/plugin.jsonSkills, servidores MCP, reglas, agentes de programación, comandos, hooks, variables

Un plugin que cumple con la especificación de Agent Plugins se carga en Cursor sin cambios. El resto de esta referencia documenta el formato de plugin de Cursor, que se desarrolla en paralelo con el estándar y admite el conjunto completo de componentes de Cursor.

Estructura del plugin

Un plugin es un directorio que contiene un archivo de manifiesto y los recursos del plugin:

my-plugin/├── plugin.json            # Obligatorio: manifiesto de Agent Plugins├── skills/                # Agent Skills│   └── code-reviewer/│       └── SKILL.md└── mcp.json               # Definiciones de servidores MCP

El estándar Agent Plugins define skills y servidores MCP portables. Consulta la guía para crear Agent Plugins para ver la referencia completa del paquete y el esquema.

Manifiesto del plugin de Cursor

Todo plugin de Cursor requiere un archivo de manifiesto .cursor-plugin/plugin.json. Las siguientes secciones documentan los campos, componentes y funciones del marketplace de los plugins de Cursor. Para consultar el manifiesto raíz de Agent Plugins, usa la referencia del manifiesto del estándar.

Campos obligatorios

CampoTipoDescripción
namestringIdentificador del plugin. En minúsculas y formato kebab-case (caracteres alfanuméricos, guiones y puntos). Debe comenzar y terminar con un carácter alfanumérico. Ejemplos: my-plugin, prompts.chat

Campos opcionales

CampoTipoDescripción
descriptionstringBreve descripción del plugin
versionstringVersión semántica (p. ej., 1.0.0)
authorobjectInformación del autor: name (obligatorio), email (opcional)
homepagestringURL de la página principal del plugin
repositorystringURL del repositorio del plugin
licensestringIdentificador de licencia (p. ej., MIT)
keywordsarrayEtiquetas para su descubrimiento y categorización
logostringRuta relativa a un archivo de logotipo en el repositorio (p. ej., assets/logo.svg) o una URL absoluta. Las rutas relativas se resuelven como URL de raw.githubusercontent.com. Se recomienda incluir el logotipo en el repositorio y usar una ruta relativa.
rulesstring or arrayRuta(s) a archivos o directorios de reglas
agentsstring or arrayRuta(s) a archivos o directorios de agentes de programación
skillsstring or arrayRuta(s) a directorios de skills
commandsstring or arrayRuta(s) a archivos o directorios de comandos
hooksstring or objectRuta al archivo de configuración de hooks o configuración de hooks en línea
mcpServersstring, object, or arrayRuta al archivo de configuración de MCP, configuración de servidor MCP en línea o un array de cualquiera de las dos. Anula el descubrimiento predeterminado de mcp.json.
variablesobjectJSON Schema que declara los nombres de las variables (tokens, cadenas de conexión). El plugin no almacena valores secretos; los usuarios los establecen en el panel de control (Pluginsconfigurar). Se sustituyen en los marcadores de posición ${VAR}. Consulta Variables.

Ejemplo de manifiesto

{  "name": "enterprise-plugin",  "version": "1.2.0",  "description": "Enterprise development tools with security scanning and compliance checks",  "author": {    "name": "ACME DevTools",    "email": "devtools@acme.com"  },  "keywords": ["enterprise", "security", "compliance"],  "logo": "assets/logo.svg"}

Variables

Usa variables para declarar los nombres (y tipos/descripciones) de la configuración proporcionada por el usuario; por ejemplo, un token de API para un servidor MCP HTTP. El plugin solo define el esquema; no incluye los valores secretos.

Los administradores de equipo establecen los valores reales en el panel de control, en Plugins (durante la instalación o posteriormente mediante Configurar en el plugin).

No incluyas valores secretos en el repo del plugin. En mcp.json y otra configuración del plugin, incluye solo marcadores de posición ${VAR} que coincidan con los nombres de las propiedades del esquema.

.cursor-plugin/plugin.json
{  "name": "example-plugin",  "variables": {    "type": "object",    "properties": {      "API_TOKEN": {        "type": "string",        "title": "API token",        "description": "Bearer token for the example HTTP MCP"      }    },    "required": ["API_TOKEN"]  }}
mcp.json
{  "mcpServers": {    "example-api": {      "url": "https://mcp.example.com/mcp",      "headers": {        "Authorization": "Bearer ${API_TOKEN}"      }    }  }}

El nivel superior debe ser { "type": "object", "properties": { ... } }. Solo se acepta un conjunto fijo de palabras clave de JSON Schema (type, title, description, default, enum, const, properties, required, items y restricciones habituales de longitud y valores numéricos).

Descubrimiento de componentes del plugin de Cursor

Cuando el manifiesto no especifica rutas explícitas para un tipo de componente, el analizador utiliza el descubrimiento automático basado en carpetas:

ComponenteUbicación predeterminadaCómo se detecta
Skillsskills/Cada subdirectorio que contiene un archivo SKILL.md
Reglasrules/Todos los archivos .md, .mdc o .markdown
Agentes de programaciónagents/Todos los archivos .md, .mdc o .markdown
Comandoscommands/Todos los archivos .md, .mdc, .markdown o .txt
Hookshooks/hooks.jsonSe analiza para obtener los nombres de eventos de hook
Servidores MCPmcp.jsonSe analiza para obtener las entradas de servidor
Skill raízSKILL.md en la raíz del pluginSe trata como un plugin con una sola skill (solo si no existe el directorio skills/ ni el campo skills en el manifiesto)

Si se especifica un campo en el manifiesto (p. ej., "skills": "./my-skills/"), este reemplaza el descubrimiento basado en carpetas para ese componente. La carpeta predeterminada no se analiza adicionalmente.

Formato de las reglas

Las reglas son archivos .mdc que proporcionan instrucciones persistentes a la IA. Colócalas en el directorio rules/.

Las reglas requieren frontmatter YAML con metadatos:

rules/prefer-const.mdc
---description: Prefer const over let for variables that are never reassignedalwaysApply: true---prefer-const: Always use `const` for variables that are never reassigned.Only use `let` when the variable needs to be reassigned. Never use `var`.

Campos del frontmatter de las reglas

CampoTipoDescripción
descriptionstringBreve descripción de lo que hace la regla
alwaysApplybooleanSi es true, la regla se aplica a todos los archivos. Si es false, la regla está disponible previa solicitud.
globsstring o arrayPatrones de archivos a los que se aplica la regla (p. ej., "**/*.ts")

Para consultar la documentación completa, consulta Reglas.

Formato de skills

Los skills son capacidades especializadas definidas en archivos SKILL.md. Cada skill se encuentra en su propio directorio dentro de skills/.

Los skills requieren frontmatter de YAML con metadatos:

skills/api-designer/SKILL.md
---name: api-designerdescription: Design RESTful APIs following OpenAPI 3.0 specification.  Use when designing new API endpoints, reviewing API contracts,  or generating API documentation.---# API Designer Skill## When to use- Designing new API endpoints- Reviewing API contracts- Generating API documentation## Instructions1. Follow REST conventions for resource naming2. Use appropriate HTTP methods (GET, POST, PUT, DELETE, PATCH)3. Include proper error responses with standard HTTP status codes4. Document all endpoints with OpenAPI 3.0 specification5. Use consistent naming conventions (kebab-case for URLs, camelCase for JSON)

Campos de frontmatter de las skills

CampoTipoDescripción
namestringIdentificador de la skill (en minúsculas y kebab-case)
descriptionstringDescripción de lo que hace la skill y cuándo usarla

Para obtener la documentación completa, consulta Skills.

Formato de los agentes de programación

Los agentes de programación son archivos Markdown que definen el comportamiento y las instrucciones de agentes de programación personalizados. Colócalos en el directorio agents/.

Los agentes de programación requieren frontmatter YAML con metadatos:

agents/security-reviewer.md
---name: security-reviewerdescription: Security-focused code reviewer that checks for  vulnerabilities and proven approaches---# Security ReviewerYou are a security-focused code reviewer. When reviewing code:1. Check for injection vulnerabilities (SQL, XSS, command injection)2. Verify proper authentication and authorization3. Look for sensitive data exposure (API keys, passwords, PII)4. Ensure secure cryptographic practices5. Review dependency security and known vulnerabilities6. Check for proper input validation and sanitization

Campos del frontmatter del agente

CampoTipoDescripción
namestringIdentificador del agente (en minúsculas y formato kebab-case)
descriptionstringBreve descripción de la finalidad del agente

Formato de comandos

Los comandos son archivos Markdown o de texto que definen acciones que los agentes pueden ejecutar. Colócalos en el directorio commands/.

Los comandos admiten las extensiones .md, .mdc, .markdown y .txt. Pueden incluir frontmatter YAML:

commands/deploy-staging.md
---name: deploy-stagingdescription: Deploy the current branch to the staging environment---# Deploy to stagingSteps to deploy to staging:1. Run tests2. Build the project3. Push to staging branch

Campos del frontmatter de los comandos

CampoTipoDescripción
namestringIdentificador del comando (en minúsculas y formato kebab-case)
descriptionstringBreve descripción de lo que hace el comando

Formato de los hooks

Los hooks son scripts de automatización que se activan mediante eventos del agente, Tab o el espacio de trabajo. Defínelos en hooks/hooks.json:

hooks/hooks.json
{  "hooks": {    "afterFileEdit": [      {        "command": "./scripts/format-code.sh"      }    ],    "beforeShellExecution": [      {        "command": "./scripts/validate-shell.sh",        "matcher": "rm|curl|wget"      }    ],    "sessionEnd": [      {        "command": "./scripts/audit.sh"      }    ]  }}

Eventos de hook disponibles

  • Hooks del agente: sessionStart, sessionEnd, preToolUse, postToolUse, postToolUseFailure, subagentStart, subagentStop, beforeShellExecution, afterShellExecution, beforeMCPExecution, afterMCPExecution, beforeReadFile, afterFileEdit, beforeSubmitPrompt, preCompact, stop, afterAgentResponse, afterAgentThought
  • Hooks de Tab: beforeTabFileRead, afterTabFileEdit
  • Hooks del ciclo de vida de la app: workspaceOpen

Para consultar la documentación completa, consulta Hooks.

Servidores MCP

Ambos formatos colocan mcp.json en la raíz del plugin. Agent Plugins usan el esquema del estándar y declaran el transporte de cada servidor. Los plugins de Cursor pueden usar variables de Cursor e inferir el transporte a partir de command o url.

mcp.json
{  "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",  "mcpServers": {    "code-review": {      "type": "stdio",      "command": "./bin/code-review",      "cwd": "${PLUGIN_ROOT}"    }  }}

Consulta la referencia de MCP de Agent Plugins para conocer los transportes, rutas y directorios de datos compatibles.

Para obtener la documentación completa, consulta MCP.

Logotipos

Incluye los logotipos en tu repositorio y haz referencia a ellos mediante una ruta relativa:

{  "name": "my-plugin",  "logo": "assets/logo.svg"}

Las rutas relativas se resuelven en URL de raw.githubusercontent.com según el repositorio y el SHA del commit. Por ejemplo, assets/logo.svg en el repositorio acme/plugins en el commit abc123 se resuelve en:

https://raw.githubusercontent.com/acme/plugins/abc123/my-plugin/assets/logo.svg

También se aceptan las URL absolutas de contenido de usuarios de GitHub (que comienzan por http:// o https://).

Repositorios de varios plugins de Cursor

Un único repositorio de Git puede contener varios plugins mediante un manifiesto del marketplace. Colócalo en .cursor-plugin/marketplace.json, en la raíz del repositorio.

Formato del manifiesto del marketplace

{  "name": "my-marketplace",  "owner": {    "name": "Your Org",    "email": "plugins@yourorg.com"  },  "metadata": {    "description": "A collection of developer tool plugins"  },  "plugins": [    {      "name": "plugin-one",      "source": "plugin-one",      "description": "First plugin"    },    {      "name": "plugin-two",      "source": "plugin-two",      "description": "Second plugin"    }  ]}

Campos del manifiesto de Marketplace

CampoTipoDescripción
namestring(obligatorio) Identificador del Marketplace (kebab-case)
ownerobject(obligatorio) name (obligatorio), email (opcional)
pluginsarray(obligatorio) Lista de entradas de plugins (máx. 500)
metadataobjectOpcional. description, version, pluginRoot (ruta de prefijo para todas las fuentes de plugins)

Campos de las entradas de plugins

Cada entrada del array plugins admite:

CampoTipoDescripción
namestring(obligatorio) Identificador del plugin (kebab-case)
sourcestring u objectRuta al directorio del plugin u objeto con path y opciones
descriptionstringDescripción del plugin
versionstringVersión semántica
authorobjectInformación del autor
homepagestringURL
repositorystringURL
licensestringIdentificador de licencia
keywordsarrayEtiquetas de búsqueda
logostringRuta relativa o URL del logotipo
categorystringCategoría del plugin
tagsarrayEtiquetas adicionales
skills, rules, agents, commandsstring o arrayRutas a archivos de componentes
hooksstring u objectRuta a la configuración de hooks o configuración inline
mcpServersstring u objectRuta a la configuración de MCP o configuración inline
variablesobjectJSON Schema que declara los nombres de las variables (los valores se establecen en el Panel de control PluginsConfigurar). Se recomienda usar plugin.json; los valores del manifiesto tienen prioridad si se establecen ambos. Consulta Variables.

Cómo funciona la resolución

Para una entrada del marketplace con "source": "my-plugin":

  1. El parser busca my-plugin/.cursor-plugin/plugin.json
  2. Si lo encuentra, el manifiesto específico del plugin se fusiona con la entrada del marketplace (los valores del manifiesto tienen prioridad)
  3. El descubrimiento de componentes se realiza en el directorio my-plugin/, usando las rutas del manifiesto si se especifican o el descubrimiento basado en carpetas como alternativa

Ejemplo de repositorio multi-plugin

my-plugins/├── .cursor-plugin/│   └── marketplace.json       # Enumera todos los plugins├── eslint-rules/│   ├── .cursor-plugin/│   │   └── plugin.json        # Manifiesto de cada plugin│   └── rules/│       ├── prefer-const.mdc│       └── no-any.mdc├── docker/│   ├── .cursor-plugin/│   │   └── plugin.json│   ├── skills/│   │   ├── containerize-app/│   │   │   └── SKILL.md│   │   └── setup-docker-compose/│   │       └── SKILL.md│   └── mcp.json└── README.md

Enviar un plugin

El equipo de Cursor revisa los plugins. Para enviar el tuyo:

1

Crea tu plugin

Añade un archivo plugin.json válido en la raíz para un Agent Plugin o .cursor-plugin/plugin.json para un plugin de Cursor.

2

Aloja el plugin en un repositorio de Git

Haz push de tu plugin a un repositorio público de Git. Incluye tu logo en el repositorio (opcional, pero recomendado).

3

Envía tu plugin

Ve a cursor.com/marketplace/publish y envía el enlace a tu repositorio.

Lista de verificación para el envío

  • El plugin tiene un manifiesto válido en la raíz: plugin.json o .cursor-plugin/plugin.json
  • name es único, está en minúsculas y usa kebab-case (p. ej., my-awesome-plugin)
  • description explica claramente el propósito del plugin
  • Todos los componentes incluidos tienen archivos y frontmatter válidos
  • El logo está incluido en el repositorio y se referencia mediante una ruta relativa (si se proporciona)
  • README.md documenta el uso y cualquier configuración
  • Los Agent Plugins cumplen con los schemas de Agent Plugins
  • Los plugins de Cursor que usan variables declaran cada ${VAR} de mcp.json en el schema del manifiesto
  • Todas las rutas del manifiesto son relativas y válidas (sin .. ni rutas absolutas)
  • El plugin se ha probado localmente
  • Los repositorios multi-plugin de Cursor tienen .cursor-plugin/marketplace.json en la raíz del repositorio con nombres de plugin únicos