MCP library

Versioned catalog of Model Context Protocol servers for Cursor (and compatible hosts). Same idea as skills/: shared definitions live here; machines and projects opt into profiles.

Layout

mcps/
├── catalog.json              # Index of every server (id, purpose, secrets, phases)
├── profiles/                 # Named sets of server ids to install together
│   ├── default.json          # Everyday kit profile → ~/.cursor/mcp.json
│   ├── collab.json           # Linear + Notion + Slack on top of default
│   ├── devtools.json         # Chrome DevTools + Next.js DevTools + Playwright
│   ├── cloud.json            # Cloudflare + Observability + Vercel (+ Context7)
│   ├── astro.json            # Astro Docs MCP + lean kit servers
│   ├── cloudflare-ops.json   # Cloudflare diagnosis (Code Mode + Observability, no Vercel)
│   ├── ops.json              # Sentry + Slack (+ default lean set)
│   ├── security.json         # Semgrep + GitHub
│   ├── design.json           # Figma (token)
│   ├── payments.json         # Stripe (OAuth)
│   ├── personal.json         # Bitwarden + LinkedIn + Polyglot + Obsidian (machine-local)
│   ├── lab.json              # Raspberry Pi / home-lab hosts
│   └── project-example.json  # App-repo example
├── servers/<id>/
│   ├── server.json           # Metadata + Cursor mcpServers fragment
│   └── README.md             # Auth, tools overview, when agents should use it
└── README.md                 # This file

Profiles (keep them small)

ProfileServersInstall target
defaultkit-knowledge, context7, github, memory~/.cursor/mcp.json via install.sh
collabdefault + linear, notion, slackGlobal/project when the team uses those tools
devtoolschrome-devtools, next-devtools, playwrightFrontend / XFN project config
cloudcontext7, cloudflare, cloudflare-observability, vercelWorkers / DNS / R2 / deploy work
astrokit-knowledge, github, memory, astro-docsAstro pages, islands, GitHub Pages
cloudflare-opskit-knowledge, github, memory, cloudflare, cloudflare-observabilityLive RUM / Worker / DNS diagnosis and IaC remediations
opskit-knowledge, context7, github, memory, sentry, slackDebug / incident / telemetry
securitycontext7, github, semgrepSecurity audit sessions
designcontext7, figmaUI delivery from designs
paymentscontext7, stripeBilling adapter work
personalbitwarden, linkedin, polyglot, obsidianYour machine only (secrets / vault)
labraspberry-piHome-lab SSH to a Pi / SBC
project-examplecontext7, github, next-devtools, chrome-devtools, playwright, postgresApp .cursor/mcp.json

One profile per session. Compose one profile that matches the work. Do not stack collab + devtools + ops into a single global mcp.json. Extra MCP tools compete for attention, inflate tool-schema tokens, and slow agents.

How it is wired

ScopePathWhen
Global (all projects)~/.cursor/mcp.json./install.sh (or kit mcp default --install)
Project (one app)<repo>/.cursor/mcp.jsonCopy/compose from a profile; see templates/project-mcp.json
kit mcp default --install
kit mcp collab --install
kit mcp ops --install
kit mcp security -o .cursor/mcp.security.json
kit mcp design -o .cursor/mcp.design.json
kit mcp payments -o .cursor/mcp.payments.json
kit mcp personal --install          # Bitwarden / LinkedIn / Polyglot / Obsidian
kit mcp lab --install               # Raspberry Pi over SSH
kit mcp devtools -o .cursor/mcp.json
kit mcp cloud -o .cursor/mcp.json
kit mcp astro --install             # Astro Docs MCP
kit mcp cloudflare-ops --install    # RUM / Worker / DNS diagnosis
kit mcp project-example -o .cursor/mcp.json

Secrets never live in this repo. Stdio servers use ${env:VAR}; Linear/Notion/Cloudflare/Sentry/Stripe/Vercel use Cursor OAuth on first tool use.

Catalog

IdTransportSecrets / auth
kit-knowledgestdionone (reads KIT_ROOT / ~/.agents)
astro-docshttpnone
context7stdionone
githubstdioGITHUB_PERSONAL_ACCESS_TOKEN
memorystdionone (file under ~/.agents/sync/)
linearhttpOAuth
notionhttpOAuth
slackstdioSLACK_BOT_TOKEN, SLACK_TEAM_ID
postgresstdioDATABASE_URL (read-only / replica)
playwrightstdionone
chrome-devtoolsstdionone (local Chrome)
next-devtoolsstdionone (Next.js 16+ npm run dev)
cloudflarehttpOAuth
cloudflare-observabilityhttpOAuth
sentryhttpOAuth
semgrepstdionone (uvx semgrep-mcp; optional SEMGREP_APP_TOKEN)
stripehttpOAuth
figmastdioFIGMA_API_KEY
vercelhttpOAuth
linkedinstdioLINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET
bitwardenstdioBW_SESSION (from bw unlock --raw)
polyglotstdioPOLYGLOT_TOKEN (+ project .polyglot-mcp.json)
obsidianstdioOBSIDIAN_API_KEY (Local REST API plugin; Obsidian running)
raspberry-pistdioRASPBERRY_PI_HOST, RASPBERRY_PI_USER, RASPBERRY_PI_SSH_KEY

Adding a server

Follow SOPs/mcp-library.md.

Agent guidance

What belongs where

ContentMechanism
Role / phase behaviorSkills (agent-*)
Architecture invariantsThin AGENTS.md; philosophy sections on demand
SOP / handover chunkskit-knowledge
Cross-session glossary / SLOsmemory
Vendor API docscontext7
Live trackers / browsers / cloudPhase profiles (collab, devtools, ops, …)

Discipline

  1. Lifecycle agents declare preferred MCP ids in skill frontmatter (mcp:). Prefer those servers when a catalog entry’s phases / triggers match - and only if that server is in the installed profile.
  2. Prefer the smallest useful set of servers - more tools ≠ better agent behavior.
  3. Never load personal servers into shared project configs.
  4. Do not use MCP to host skill bodies; skills stay progressive-disclosure via Cursor discovery.
  5. Context budget: SOPs/context-budget.md.

Markdown source