BuildwithAiGiri MVP #4 by Girish B. Hiremath | IntelliForge AI
SkillStore is a SaaS MCP (Model Context Protocol) server that lets developers discover, install, and share AI skills (SKILL.md files) directly from Claude Code and Cursor. Add one line to your config and search 1,200+ skills without leaving your editor.
┌─────────────────────────────────────────────────────────┐
│ Developer's Editor │
│ (Claude Code / Cursor) │
└──────────────────────┬──────────────────────────────────┘
│ MCP stdio
▼
┌─────────────────────────────────────────────────────────┐
│ skillstore-mcp (npm package) │
│ Runs locally via npx skillstore-mcp │
│ Fly.io: skillstore-mcp.fly.dev │
└──────────────────────┬──────────────────────────────────┘
│ REST API (HTTPS)
▼
┌─────────────────────────────────────────────────────────┐
│ SkillStore Web API (Next.js 14) │
│ Vercel: skillstore.intelliforge.tech │
│ │
│ /api/skills — search & create skills │
│ /api/skills/[id] — get / update / delete │
│ /api/skills/trending — trending by period │
│ /api/skills/mine — authenticated user's skills │
│ /api/categories — category list │
│ /api/stripe/checkout — create Stripe session │
│ /api/stripe/webhook — Stripe event handler │
│ /api/mcp-keys — API key management │
└──────────────────────┬──────────────────────────────────┘
│ Supabase client
▼
┌─────────────────────────────────────────────────────────┐
│ Supabase (Postgres + Auth) │
│ Tables: profiles, skills, skill_versions, │
│ api_usage, skill_upvotes │
│ Auth: GitHub OAuth │
│ RLS: per-table row-level security policies │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Stripe │
│ Products: Pro ($12/mo), Enterprise ($49/mo) │
│ Webhooks: checkout.session.completed, │
│ customer.subscription.deleted │
└─────────────────────────────────────────────────────────┘
| Feature | Free ($0) | Pro ($12/mo) | Enterprise ($49/mo) |
|---|---|---|---|
| MCP tool calls | 50/day | Unlimited | Unlimited |
| Private skills | 0 | 25 | Unlimited |
| Submit skills | 1 public | Unlimited | Unlimited + team |
| Analytics | No | Yes | Advanced |
| Version history | No | Yes | Yes |
| Team members | 1 | 1 | 20 |
| Support | Community | Priority + SLA | |
| Custom endpoint | No | No | Yes |
Add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"skillstore": {
"command": "npx",
"args": ["-y", "skillstore-mcp"],
"env": {
"SKILLSTORE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Add to .cursor/mcp.json in your project root:
{
"skillstore": {
"command": "npx",
"args": ["-y", "skillstore-mcp"],
"env": {
"SKILLSTORE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}Get your API key at: https://skillstore.intelliforge.tech/dashboard
| Tool | Description |
|---|---|
search_skills |
Search by query, category, or tags |
get_skill |
Get full skill details + SKILL.md content |
list_categories |
Browse all categories with counts |
get_trending |
Top skills by day / week / month |
submit_skill |
Submit a new skill (Pro+ for unlimited) |
get_my_skills |
List your public + private skills |
- Node.js 22+
- Supabase account (free tier works)
- Stripe account (test mode)
git clone https://github.com/intelliforge-ai/skillstore
cd skillstore
# Web app
cd web && npm install
# MCP server
cd ../mcp-server && npm installcd web
cp .env.example .env.local
# Fill in your values (see Supabase + Stripe setup below)# Terminal 1: Web app
cd web && npm run dev
# → http://localhost:3000
# Terminal 2: MCP server (for local testing)
cd mcp-server && SKILLSTORE_API_URL=http://localhost:3000/api SKILLSTORE_API_KEY=your_key npm run dev-
Create a new Supabase project at https://supabase.com
-
Run the schema:
# In Supabase SQL editor, paste contents of: supabase/schema.sql -
Enable GitHub OAuth:
- Supabase Dashboard → Authentication → Providers → GitHub
- Create a GitHub OAuth App at https://github.com/settings/developers
- Callback URL:
https://YOUR_PROJECT.supabase.co/auth/v1/callback
-
Copy credentials to
.env.local:NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJxxx... SUPABASE_SERVICE_ROLE_KEY=eyJxxx...
-
Create a Stripe account at https://stripe.com
-
Create products and prices:
Product: SkillStore Pro Price: $12.00/month (recurring) → Copy the Price ID: price_xxx Product: SkillStore Enterprise Price: $49.00/month (recurring) → Copy the Price ID: price_xxx -
Set up webhook:
- Stripe Dashboard → Developers → Webhooks → Add endpoint
- URL:
https://skillstore.intelliforge.tech/api/stripe/webhook - Events:
checkout.session.completed,customer.subscription.deleted,customer.subscription.updated - Copy Webhook Secret:
whsec_xxx
-
Add to
.env.local:STRIPE_SECRET_KEY=sk_live_xxx STRIPE_WEBHOOK_SECRET=whsec_xxx STRIPE_PRO_PRICE_ID=price_xxx STRIPE_ENTERPRISE_PRICE_ID=price_xxxFor local testing with Stripe CLI:
stripe listen --forward-to localhost:3000/api/stripe/webhook
cd mcp-server
# Install Fly CLI
curl -L https://fly.io/install.sh | sh
# Authenticate
fly auth login
# Create the app (first time only)
fly launch --name skillstore-mcp --region sin
# Set secrets
fly secrets set \
SKILLSTORE_API_URL=https://skillstore.intelliforge.tech/api \
NODE_ENV=production
# Deploy
fly deploy
# Check status
fly status
fly logsThe MCP server is a stdio-based process — it starts on demand via npx skillstore-mcp on the developer's machine. The Fly.io deployment is for the HTTP-based MCP transport (optional, for enterprise custom endpoints).
cd web
# Install Vercel CLI
npm i -g vercel
# Deploy (first time: follow prompts)
vercel
# Deploy to production
vercel --prod
# Set environment variables in Vercel dashboard:
# https://vercel.com/your-team/skillstore/settings/environment-variablesRequired environment variables in Vercel:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETSTRIPE_PRO_PRICE_IDSTRIPE_ENTERPRISE_PRICE_IDNEXT_PUBLIC_SITE_URL
skillstore/
├── mcp-server/ # Fly.io MCP server
│ ├── src/
│ │ └── index.ts # MCP server with 6 tools
│ ├── Dockerfile
│ ├── fly.toml
│ ├── package.json
│ └── tsconfig.json
├── web/ # Vercel Next.js 14 app
│ ├── src/
│ │ ├── app/
│ │ │ ├── layout.tsx # Root layout + Navbar + Footer
│ │ │ ├── page.tsx # Landing page
│ │ │ ├── globals.css # Dark cyberpunk theme
│ │ │ ├── pricing/
│ │ │ │ └── page.tsx # Pricing + comparison table
│ │ │ └── api/
│ │ │ ├── skills/
│ │ │ │ ├── route.ts # GET search, POST create
│ │ │ │ ├── [id]/route.ts # GET, PATCH, DELETE
│ │ │ │ ├── trending/route.ts
│ │ │ │ └── mine/route.ts
│ │ │ ├── categories/route.ts
│ │ │ ├── stripe/
│ │ │ │ ├── checkout/route.ts
│ │ │ │ └── webhook/route.ts
│ │ │ └── mcp-keys/route.ts
│ │ └── lib/
│ │ ├── supabase.ts # DB clients + validateApiKey
│ │ └── stripe.ts # Stripe client + PLANS
│ └── .env.example
├── supabase/
│ └── schema.sql # Full DB schema + RLS + triggers
├── .cursorrules # AI coding rules for this project
└── README.md
- Fork the repo
- Create a feature branch:
git checkout -b feat/your-feature - Follow conventions in
.cursorrules - Open a PR with description
SkillStore is built by Girish B. Hiremath as part of the BuildwithAiGiri series — a collection of AI-native SaaS MVPs shipped fast.
- Website: intelliforge.tech
- Twitter: @BuildwithAiGiri
- Series: BuildwithAiGiri MVP #4
© 2025 IntelliForge AI. All rights reserved.