Plugin-Referenz
Referenzdokumentation zum Erstellen, Strukturieren und Veröffentlichen von Cursor-Plugins. Plugins bündeln Regeln, Skills, Agenten, Befehle, MCP-Server und Hooks zu verteilbaren Paketen, die in der Cursor-IDE funktionieren.
Wenn du bei null anfängst, nutze das Plugin-Vorlagen-Repository.
Unterstützte Plugin-Formate
Cursor lädt Plugins in zwei Formaten, die anhand des Speicherorts ihres Manifests unterschieden werden:
| Format | Manifest-Speicherort | Komponenten |
|---|---|---|
| Agent Plugins (offener Standard) | plugin.json im Plugin-Root | Skills, MCP-Server |
| Cursor-Plugins | .cursor-plugin/plugin.json | Skills, MCP-Server, Regeln, Agenten, Befehle, Hooks, Variablen |
Ein Plugin, das der Agent-Plugins-Spezifikation entspricht, wird in Cursor unverändert geladen. Der Rest dieser Referenz dokumentiert das Cursor-Plugin-Format, das parallel zum Standard entwickelt wird und den vollständigen Satz an Cursor-Komponenten unterstützt.
Plugin-Struktur
Ein Plugin ist ein Verzeichnis mit einer Manifestdatei und deinen Plugin-Assets:
my-plugin/├── plugin.json # Erforderlich: Manifest für Agent Plugins├── skills/ # Agent Skills│ └── code-reviewer/│ └── SKILL.md└── mcp.json # MCP-Server-DefinitionenDer Standard Agent Plugins definiert portable Skills und MCP-Server. Eine vollständige Referenz zu Paket und Schema findest du im Leitfaden zum Erstellen von Agent Plugins.
Cursor-Plugin-Manifest
Jedes Cursor-Plugin benötigt eine Manifestdatei unter .cursor-plugin/plugin.json. Die
folgenden Abschnitte dokumentieren Cursor-Plugin-Felder, Komponenten und Marketplace-
Features. Für ein Agent-Plugins-Manifest im Stammverzeichnis verwenden Sie die
Manifest-Referenz des Standards.
Erforderliche Felder
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Plugin-Identifikator. Kleingeschrieben im Kebab-Case (alphanumerische Zeichen, Bindestriche und Punkte). Muss mit einem alphanumerischen Zeichen beginnen und enden. Beispiele: my-plugin, prompts.chat |
Optionale Felder
| Feld | Typ | Beschreibung |
|---|---|---|
description | string | Kurze Plugin-Beschreibung |
version | string | Semantische Version (z. B. 1.0.0) |
author | object | Autoreninformationen: name (erforderlich), email (optional) |
homepage | string | URL zur Plugin-Homepage |
repository | string | URL zum Plugin-Repository |
license | string | Lizenzkennung (z. B. MIT) |
keywords | array | Tags zur Auffindbarkeit und Kategorisierung |
logo | string | Relativer Pfad zu einer Logo-Datei im Repo (z. B. assets/logo.svg) oder eine absolute URL. Relative Pfade werden zu URLs auf raw.githubusercontent.com aufgelöst. Empfohlen: Committe das Logo in dein Repo und verwende einen relativen Pfad. |
rules | string or array | Pfad(e) zu Regeldateien oder Verzeichnissen |
agents | string or array | Pfad(e) zu Agent-Dateien oder Verzeichnissen |
skills | string or array | Pfad(e) zu Skill-Verzeichnissen |
commands | string or array | Pfad(e) zu Befehlsdateien oder Verzeichnissen |
hooks | string or object | Pfad zur Hook-Konfigurationsdatei oder Inline-Hook-Konfiguration |
mcpServers | string, object, or array | Pfad zur MCP-Konfigurationsdatei, Inline-MCP-Server-Konfiguration oder ein Array davon. Überschreibt die standardmäßige Erkennung von mcp.json. |
variables | object | JSON Schema, das Variablennamen (Tokens, Verbindungszeichenfolgen) deklariert. Das Plugin speichert keine geheimen Werte; Nutzer legen sie im Dashboard fest (Plugins → Konfigurieren). Sie werden in Platzhalter im Format ${VAR} eingesetzt. Siehe Variablen. |
Beispielmanifest
{ "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"}Variablen
Verwende variables, um die Namen (sowie Typen/Beschreibungen) nutzerdefinierter Konfigurationswerte zu deklarieren – beispielsweise eines API-Tokens für einen HTTP-MCP-Server. Das Plugin definiert nur das Schema; die geheimen Werte selbst enthält es nicht.
Team-Admins legen die tatsächlichen Werte im Dashboard unter Plugins fest (bei der Installation oder später über Konfigurieren im Plugin).
Speichere keine geheimen Werte im Plugin-Repo. Füge in mcp.json und anderen Plugin-Konfigurationen nur ${VAR}-Platzhalter ein, die den Eigenschaftsnamen im Schema entsprechen.
{ "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"] }}{ "mcpServers": { "example-api": { "url": "https://mcp.example.com/mcp", "headers": { "Authorization": "Bearer ${API_TOKEN}" } } }}Die oberste Ebene muss { "type": "object", "properties": { ... } } sein. Akzeptiert wird nur ein fester Satz von JSON-Schema-Schlüsselwörtern (type, title, description, default, enum, const, properties, required, items sowie gängige Längen- und numerische Einschränkungen).
Komponentenerkennung für Cursor-Plugins
Wenn das Manifest keine expliziten Pfade für einen Komponententyp angibt, verwendet der Parser die automatische ordnerbasierte Erkennung:
| Komponente | Standardspeicherort | Erkennung |
|---|---|---|
| Skills | skills/ | Jedes Unterverzeichnis mit einer SKILL.md-Datei |
| Regeln | rules/ | Alle .md-, .mdc- oder .markdown-Dateien |
| Agents | agents/ | Alle .md-, .mdc- oder .markdown-Dateien |
| Befehle | commands/ | Alle .md-, .mdc-, .markdown- oder .txt-Dateien |
| Hooks | hooks/hooks.json | Wird auf Hook-Ereignisnamen geprüft |
| MCP-Server | mcp.json | Wird auf Servereinträge geprüft |
| Root-Skill | SKILL.md im Plugin-Root | Wird als Plugin mit einem einzelnen Skill behandelt (nur wenn kein Verzeichnis skills/ und kein Manifest-Feld skills vorhanden ist) |
Wenn ein Manifest-Feld angegeben ist (z. B. "skills": "./my-skills/"), ersetzt es die Ordnererkennung für diese Komponente. Der Standardordner wird dann nicht zusätzlich gescannt.
Regelformat
Regeln sind .mdc-Dateien mit dauerhaft verfügbaren Anweisungen für die AI. Legen Sie sie im Verzeichnis rules/ ab.
Regeln benötigen YAML-Frontmatter mit Metadaten:
---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`.Regel-Frontmatter-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
description | string | Kurze Beschreibung der Regel |
alwaysApply | boolean | Bei true gilt die Regel für alle Dateien. Bei false ist die Regel auf Anfrage verfügbar. |
globs | string oder array | Dateimuster, auf die die Regel angewendet wird (z. B. "**/*.ts") |
Die vollständige Dokumentation finden Sie unter Regeln.
Skill-Format
Skills sind spezialisierte Fähigkeiten, die in SKILL.md-Dateien definiert sind. Jeder Skill befindet sich in einem eigenen Verzeichnis unter skills/.
Skills benötigen YAML-Frontmatter mit Metadaten:
---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## Wann verwenden- Entwurf neuer API-Endpunkte- Prüfung von API-Contracts- Erstellung von API-Dokumentation## Anleitung1. REST-Konventionen für die Benennung von Ressourcen befolgen2. Passende HTTP-Methoden nutzen (GET, POST, PUT, DELETE, PATCH)3. Korrekte Fehlerantworten mit Standard-HTTP-Statuscodes enthalten4. Alle Endpunkte gemäß OpenAPI-3.0-Spezifikation dokumentieren5. Einheitliche Benennungskonventionen nutzen (kebab-case für URLs, camelCase für JSON)Skill-Frontmatter-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Skill-Identifikator (Kleinbuchstaben, Kebab-Case) |
description | string | Beschreibung der Funktion des Skills und wann er verwendet werden soll |
Die vollständige Dokumentation finden Sie unter Skills.
Agents-Format
Agents sind Markdown-Dateien, die benutzerdefiniertes Agent-Verhalten und Prompts definieren. Legen Sie sie im Verzeichnis agents/ ab.
Agents benötigen YAML-Frontmatter mit Metadaten:
---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 sanitizationAgent-Frontmatter-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Agent-ID (Kleinbuchstaben, Kebab-Case) |
description | string | Kurze Beschreibung des Zwecks des Agenten |
Befehlsformat
Befehle sind Markdown- oder Textdateien, die vom Agenten ausführbare Aktionen definieren. Legen Sie sie im Verzeichnis commands/ ab.
Befehle unterstützen die Erweiterungen .md, .mdc, .markdown und .txt. Sie können YAML-Frontmatter enthalten:
---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 branchFrontmatter-Felder für Befehle
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Befehlskennung (Kleinbuchstaben, Kebab-Case) |
description | string | Kurze Beschreibung der Funktion des Befehls |
Hook-Format
Hooks sind Automatisierungsskripte, die durch Ereignisse von Agenten, Tabs oder im Workspace ausgelöst werden. Definieren Sie sie in 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" } ] }}Verfügbare Hook-Ereignisse
- Agent-Hooks:
sessionStart,sessionEnd,preToolUse,postToolUse,postToolUseFailure,subagentStart,subagentStop,beforeShellExecution,afterShellExecution,beforeMCPExecution,afterMCPExecution,beforeReadFile,afterFileEdit,beforeSubmitPrompt,preCompact,stop,afterAgentResponse,afterAgentThought - Tab-Hooks:
beforeTabFileRead,afterTabFileEdit - App-Lifecycle-Hooks:
workspaceOpen
Die vollständige Dokumentation finden Sie unter Hooks.
MCP-Server
Beide Formate speichern mcp.json im Plugin-Root. Agent Plugins verwenden das
Schema des Standards und geben den Transport für jeden Server an. Cursor-Plugins können
Cursor-Variablen verwenden und den Transport aus command oder url ableiten.
{ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json", "mcpServers": { "code-review": { "type": "stdio", "command": "./bin/code-review", "cwd": "${PLUGIN_ROOT}" } }}Unterstützte Transports, Pfade und Datenverzeichnisse findest du in der MCP-Referenz für Agent Plugins.
Die vollständige Dokumentation findest du unter MCP.
Logos
Füge Logos zu deinem Repository hinzu und referenziere sie über einen relativen Pfad:
{ "name": "my-plugin", "logo": "assets/logo.svg"}Relative Pfade werden anhand des Repositorys und des Commit-SHA in URLs zu raw.githubusercontent.com aufgelöst. Beispielsweise wird assets/logo.svg im Repo acme/plugins beim Commit abc123 wie folgt aufgelöst:
https://raw.githubusercontent.com/acme/plugins/abc123/my-plugin/assets/logo.svgAbsolute URLs zu GitHub-Nutzerinhalten (beginnend mit http:// oder https://) werden ebenfalls akzeptiert.
Cursor-Repositories mit mehreren Plugins
Ein einzelnes Git-Repository kann über ein Marketplace-Manifest mehrere Plugins enthalten. Legen Sie es im Root-Verzeichnis des Repositorys unter .cursor-plugin/marketplace.json ab.
Marketplace-Manifest-Format
{ "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" } ]}Felder des Marketplace-Manifests
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | (erforderlich) Marketplace-Kennung (kebab-case) |
owner | object | (erforderlich) name (erforderlich), email (optional) |
plugins | array | (erforderlich) Array von Plugin-Einträgen (max. 500) |
metadata | object | Optional. description, version, pluginRoot (Pfadpräfix für alle Plugin-Quellen) |
Plugin-Eintragsfelder
Jeder Eintrag im plugins-Array unterstützt:
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | (erforderlich) Plugin-ID (Kebab-Case) |
source | string oder object | Pfad zum Plugin-Verzeichnis oder Objekt mit path und Optionen |
description | string | Plugin-Beschreibung |
version | string | Semantische Version |
author | object | Informationen zum Autor |
homepage | string | URL |
repository | string | URL |
license | string | Lizenz-ID |
keywords | array | Such-Tags |
logo | string | Relativer Pfad oder URL zum Logo |
category | string | Plugin-Kategorie |
tags | array | Zusätzliche Tags |
skills, rules, agents, commands | string oder array | Pfad(e) zu Komponentendateien |
hooks | string oder object | Pfad zur Hook-Konfiguration oder Inline-Konfiguration |
mcpServers | string oder object | Pfad zur MCP-Konfiguration oder Inline-Konfiguration |
variables | object | JSON Schema mit Variablennamen (Werte werden im Dashboard unter Plugins → konfigurieren festgelegt). Verwende vorzugsweise plugin.json; falls beide festgelegt sind, haben die Werte im Manifest Vorrang. Siehe Variablen. |
So funktioniert die Auflösung
Für einen Marketplace-Eintrag mit "source": "my-plugin":
- Der Parser sucht nach
my-plugin/.cursor-plugin/plugin.json - Falls vorhanden, wird das plugin-spezifische Manifest mit dem Marketplace-Eintrag zusammengeführt (die Manifestwerte haben Vorrang)
- Die Komponentenerkennung erfolgt im Verzeichnis
my-plugin/und verwendet, falls angegeben, die Manifestpfade; andernfalls dient die ordnerbasierte Erkennung als Fallback.
Beispiel für ein Multi-Plugin-Repo
my-plugins/├── .cursor-plugin/│ └── marketplace.json # Listet alle Plugins auf├── eslint-rules/│ ├── .cursor-plugin/│ │ └── plugin.json # Manifest pro 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.mdEin Plugin einreichen
Plugins werden vom Cursor-Team geprüft. So reichst du ein Plugin ein:
Dein Plugin erstellen
Füge für ein Agent Plugin eine gültige plugin.json im Root-Verzeichnis hinzu oder
.cursor-plugin/plugin.json für ein Cursor-Plugin.
In einem Git-Repository hosten
Pushe dein Plugin in ein öffentliches Git-Repository. Füge dein Logo zum Repo hinzu (optional, aber empfohlen).
Dein Plugin einreichen
Gehe zu cursor.com/marketplace/publish und reiche den Link zu deinem Repository ein.
Checkliste für die Einreichung
- Das Plugin verfügt über ein gültiges
plugin.json- oder.cursor-plugin/plugin.json-Manifest nameist eindeutig, kleingeschrieben und im Kebab-Case (z. B.my-awesome-plugin)descriptionerklärt den Zweck des Plugins eindeutig- Alle enthaltenen Komponenten verfügen über gültige Dateien und Frontmatter
- Das Logo ist im Repo committed und über einen relativen Pfad referenziert (falls vorhanden)
README.mddokumentiert die Nutzung und alle Konfigurationen- Agent Plugins entsprechen den Schemas für Agent Plugins
- Cursor-Plugins, die Variablen verwenden, deklarieren jede
${VAR}ausmcp.jsonim Manifest-Schema - Alle Pfade im Manifest sind relativ und gültig (kein
.., keine absoluten Pfade) - Das Plugin wurde lokal getestet
- Cursor-Multi-Plugin-Repositories enthalten im Repo-Root eine
.cursor-plugin/marketplace.jsonmit eindeutigen Plugin-Namen