# Running Pre-Submission Quality Checks for Marketplace Plugin Submission in Cursor

> Run pre-submission quality checks for your Cursor plugin before marketplace submission. The review-plugin-submission skill validates manifest, components, and documentation against standards.

- Repository: [Cursor/plugins](https://github.com/cursor/plugins)
- Tags: how-to-guide
- Published: 2026-05-25

---

**The `review-plugin-submission` skill validates your plugin's manifest, component structure, and documentation against Cursor Marketplace standards before you submit.**

The cursor/plugins repository hosts a multi-plugin marketplace where each independent tool lives in its own top-level directory with a [`.cursor-plugin/plugin.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/plugin.json) manifest. Before your plugin can be listed in the root [`.cursor-plugin/marketplace.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/marketplace.json), you must run pre-submission quality checks to verify that all metadata, skills, and integration points meet the required standards.

## What the Quality Check Validates

The `review-plugin-submission` skill, defined in [`create-plugin/skills/review-plugin-submission/SKILL.md`](https://github.com/cursor/plugins/blob/main/create-plugin/skills/review-plugin-submission/SKILL.md), executes a comprehensive five-point audit against your plugin directory.

### Manifest Validation

The skill first verifies that [`.cursor-plugin/plugin.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/plugin.json) exists and contains all required fields. The `name` field must follow **kebab-case** formatting (lowercase letters, numbers, and hyphens only), and the manifest must include `description`, `version`, `author`, and `license` properties.

### Component Discoverability

Every declared **Skill**, **Rule**, **Agent**, **Command**, **Hook**, and **MCP** server definition must exist at the expected relative paths. For example, if your manifest declares a skill at [`skills/my-tool/SKILL.md`](https://github.com/cursor/plugins/blob/main/skills/my-tool/SKILL.md), that file must be present and accessible.

### Component Metadata

Each component markdown file must contain valid front-matter with both a `name` and `description` field. The skill parses files like `<plugin>/skills/**/SKILL.md` to confirm these metadata blocks are present and non-empty.

### Repository Integration

Your plugin must be registered in the root [`.cursor-plugin/marketplace.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/marketplace.json) with a unique `source` field that resolves correctly to your plugin directory. This ensures the marketplace can locate and load your tool.

### Documentation Quality

Your plugin's [`README.md`](https://github.com/cursor/plugins/blob/main/README.md) must include a clear purpose statement, installation instructions, and component coverage overview. Any referenced logos or images must point to valid repository-hosted paths rather than external URLs.

## How to Run the Quality Checks

### Using the Cursor CLI

Execute the pre-submission audit directly from the repository root using the Cursor CLI:

```bash

# From the repository root

cursor run review-plugin-submission

```

The CLI loads the skill definition from [`create-plugin/skills/review-plugin-submission/SKILL.md`](https://github.com/cursor/plugins/blob/main/create-plugin/skills/review-plugin-submission/SKILL.md) and runs the checklist against the plugin in your current working directory.

### Manual Manifest Validation

If you need to validate the JSON structure programmatically without the CLI, use this Node.js script:

```javascript
// validate-manifest.js
const fs = require('fs');
const path = require('path');

const manifestPath = path.join(__dirname, 'your-plugin/.cursor-plugin/plugin.json');
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));

function assert(condition, msg) {
  if (!condition) throw new Error(msg);
}

// Basic checks
assert(typeof manifest.name === 'string' && /^[a-z0-9-]+$/.test(manifest.name),
       '`name` must be kebab-case');
assert(manifest.version, '`version` is required');
assert(manifest.author?.name, '`author.name` is required');
assert(manifest.license, '`license` is required');

console.log('✅ Manifest passes basic validation');

```

Run the validation with:

```bash
node validate-manifest.js

```

### Verifying Marketplace Registration

Confirm your plugin is correctly listed in the marketplace manifest using `jq`:

```bash
jq '.plugins[] | select(.name=="your-plugin-name")' .cursor-plugin/marketplace.json

```

If this returns a JSON object, your plugin is properly registered for marketplace exposure.

## Interpreting the Output

The `review-plugin-submission` skill generates a structured report showing pass/fail status for each validation category:

```

✔ Manifest exists and parses as valid JSON
✖ Missing front-matter in skill: your-plugin/skills/example-task/SKILL.md
✔ All declared paths are relative and exist
✖ README.md does not contain an installation section
...
=== RESULT ===
PASS: 3 / FAIL: 2
Recommendation: Fix the listed issues before publishing.

```

The output prioritizes fixes by severity, with manifest validation errors blocking submission while documentation warnings may be suggestions.

## Summary

- **Manifest requirements**: Your [`.cursor-plugin/plugin.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/plugin.json) must exist with kebab-case naming and complete metadata fields.
- **Component paths**: Every declared skill, rule, agent, and command must be discoverable at its specified relative path with proper front-matter.
- **Marketplace registration**: You must list your plugin in the root [`.cursor-plugin/marketplace.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/marketplace.json) with a valid source pointer.
- **CLI command**: Run `cursor run review-plugin-submission` from the repository root to execute the full audit.
- **Documentation standards**: Include installation steps and purpose statements in your [`README.md`](https://github.com/cursor/plugins/blob/main/README.md), using only repository-hosted assets.

## Frequently Asked Questions

### What happens if my plugin fails the pre-submission quality check?

The skill outputs a prioritized fix list indicating which validation categories failed. You must resolve all **manifest validation** and **component discoverability** errors before the marketplace will accept your submission. Documentation warnings should also be addressed to ensure users can install and use your plugin correctly.

### Where is the review-plugin-submission skill defined?

The skill definition lives at [`create-plugin/skills/review-plugin-submission/SKILL.md`](https://github.com/cursor/plugins/blob/main/create-plugin/skills/review-plugin-submission/SKILL.md) in the cursor/plugins repository. This markdown file contains the audit logic and checklist that the Cursor CLI executes when you run the `review-plugin-submission` command.

### Can I run quality checks on a plugin that isn't registered in marketplace.json yet?

Yes. The skill validates your local plugin structure independently of the root marketplace manifest, though it will flag the missing registration as a repository integration error. You can fix component and documentation issues before adding your entry to [`.cursor-plugin/marketplace.json`](https://github.com/cursor/plugins/blob/main/.cursor-plugin/marketplace.json).

### How does the skill validate component front-matter?

The skill parses each [`SKILL.md`](https://github.com/cursor/plugins/blob/main/SKILL.md) file in your `<plugin>/skills/**` directories to verify the presence of YAML front-matter containing both a `name` and `description` field. Missing or empty front-matter triggers a validation failure because these fields populate the marketplace UI and CLI help text.