MCPcopy
hub / github.com/cursor/community-plugins

github.com/cursor/community-plugins @main sqlite

repository ↗ · DeepWiki ↗
381 symbols 1,197 edges 178 files 16 documented · 4%
README

Cursor Directory

The directory of plugins from the Cursor community.

cursor.directory


Project Structure

├── apps/
│   └── cursor/          # Next.js app
├── supabase/
│   └── migrations/      # Database migrations
└── package.json         # Bun workspace config

All data lives in the database — there is no local data in the repo.

Getting Started

Prerequisites

Setup

  1. Clone the repo
git clone https://github.com/cursor/community-plugins.git
cd community-plugins
  1. Install dependencies
bun install
  1. Configure environment variables
cp apps/cursor/.env.example apps/cursor/.env

Fill in the required values:

Variable Required Description
NEXT_PUBLIC_SUPABASE_URL Yes Supabase project URL
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY Yes Supabase Publishable key (sb_publishable_..., replaces the legacy anon key)
SUPABASE_SECRET_KEY Yes Supabase Secret key (sb_secret_..., replaces the legacy service role key)
NEXT_PUBLIC_APP_URL No Defaults to http://localhost:3000
  1. Run the database migrations

Apply the migrations in supabase/migrations/ to your Supabase project.

  1. Start the dev server
bun dev

Open http://localhost:3000.


Contributing

All content is submitted through the website — no pull requests needed for data.

Submit a Plugin

  1. Go to cursor.directory/plugins/new
  2. Sign in with GitHub or Google
  3. Paste a GitHub repo URL — we auto-detect components following the Open Plugins standard
  4. Click Submit

Auto-detected components:

Component Path
Rules rules/*.mdc
MCP Servers .mcp.json
Skills skills/*/SKILL.md
Agents agents/*.md
Hooks hooks/hooks.json
LSP Servers .lsp.json

See the Open Plugins specification and plugin template for details.


Tech Stack

Plugin security scan

Submitted plugins are auto-reviewed by a Cursor SDK agent (composer-2) running in local mode against a fresh clone of the plugin's repo plus its inline component content. The verdict (safe / suspicious / malicious) is written back to plugins.scan_status and surfaces in the admin queue.

The scan is asynchronous and runs out of the request lifecycle:

  1. Enqueue — server actions and the recover-stuck-scans cron call enqueuePluginScan(pluginId) which sends a message to the plugin_scans pgmq queue.
  2. Kick — user-facing actions also fire kickDrainAfterResponse() so the drain route is called via next/server after() immediately after the response is flushed. Scans typically start within a few hundred ms.
  3. Drain/api/queue/plugin-scans/drain reads one message (vt=900s, n=1), runs runPluginScan(pluginId), archives the message on success, leaves it for VT-expiry on retryable error, or buries it after MAX_ATTEMPTS=5 deliveries.
  4. Cron safety net — Vercel cron hits the same drain route every minute so any messages that missed their kick still get processed.

The drain route uses maxDuration = 800 (Vercel Pro+ Fluid Compute ceiling) and relies on CURSOR_API_KEY + CRON_SECRET from the env file.

Extension points exported contracts — how you extend this code

UploadLogoProps (Interface)
(no doc)
apps/cursor/src/components/upload-logo.tsx
NotificationSettingsProps (Interface)
(no doc)
apps/cursor/src/components/profile/notification-settings.tsx
InputProps (Interface)
(no doc)
apps/cursor/src/components/ui/input.tsx
ButtonProps (Interface)
(no doc)
apps/cursor/src/components/ui/button.tsx
MCPListingSwitchProps (Interface)
(no doc)
apps/cursor/src/components/mcps/mcps-listing-switch.tsx

Core symbols most depended-on inside this repo

cn
called by 96
apps/cursor/src/lib/utils.ts
createClient
called by 43
apps/cursor/src/utils/supabase/admin-client.ts
createClient
called by 18
apps/cursor/src/utils/supabase/client.ts
logInfo
called by 13
apps/cursor/src/lib/plugins/scan.ts
createClient
called by 11
apps/cursor/src/utils/supabase/server.ts
getSession
called by 10
apps/cursor/src/utils/supabase/auth.ts
formatCount
called by 10
apps/cursor/src/lib/utils.ts
slugify
called by 9
apps/cursor/src/lib/slug.ts

Shape

Function 362
Class 10
Interface 5
Method 4

Languages

TypeScript100%

Modules by API surface

apps/cursor/src/data/queries.ts32 symbols
apps/cursor/src/lib/plugins/scan.ts24 symbols
apps/cursor/src/components/plugins/plugin-leaderboard.tsx14 symbols
apps/cursor/src/lib/github-plugin/parse.ts13 symbols
apps/cursor/src/scripts/extract-from-github.ts11 symbols
apps/cursor/src/lib/og.tsx9 symbols
apps/cursor/src/components/upload-logo.tsx7 symbols
apps/cursor/src/lib/rate-limit.ts6 symbols
apps/cursor/src/lib/nuqs-static-adapter.tsx6 symbols
apps/cursor/src/components/forms/component-draft-editor.tsx6 symbols
apps/cursor/src/lib/utils.ts5 symbols
apps/cursor/src/lib/plugins/queue.ts5 symbols

Dependencies from manifests, versioned

@biomejs/biome2.4.15 · 1×
@cursor/sdk1.0.12 · 1×
@hookform/resolvers5.2.2 · 1×
@radix-ui/react-alert-dialog1.1.15 · 1×
@radix-ui/react-avatar1.1.11 · 1×
@radix-ui/react-dialog1.1.15 · 1×
@radix-ui/react-dropdown-menu2.1.16 · 1×
@radix-ui/react-label2.1.8 · 1×
@radix-ui/react-popover1.1.15 · 1×
@radix-ui/react-scroll-area1.2.10 · 1×
@radix-ui/react-separator1.1.8 · 1×

For agents

$ claude mcp add community-plugins \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact