
mcp-directory
by Nandanhegde1
MCP Directory
A free, static, SEO-first directory of every public Model Context Protocol (MCP) server on GitHub.
- Live site: https://mcp-directory.nandanhegde1096.workers.dev/
- Data source: GitHub Search API (public repos tagged
mcp-server,model-context-protocol, etc.) - Refresh cadence: weekly via GitHub Actions cron (Sundays 03:17 UTC)
- License: MIT
- Servers indexed: ~1,800 (metadata-verified MCP projects only; auto-updates each Sunday)
Why
The MCP ecosystem ships dozens of new servers every week, scattered across GitHub. Existing lists are hand-curated, go stale fast, and bury the long tail. This directory does the obvious thing: query GitHub once a week, dedupe, score, and publish a static site that ranks every MCP server by stars, recency, and language — instantly searchable and crawlable by Google.
Stack
- Astro 5 + Tailwind — static site, file-based routing
- TypeScript
- GitHub Search API (60 req/hr unauth, 5,000 req/hr with PAT)
- GitHub Actions weekly cron (
.github/workflows/weekly-scrape.yml) - Cloudflare Workers (free tier, deployed via
wrangler)
Local dev
cd S:\projects\mcp-directory
npm install
# Generate a fine-grained GitHub PAT (public repo read scope is enough):
# https://github.com/settings/personal-access-tokens/new
$env:GITHUB_TOKEN = "github_pat_..."
npm run scrape # populates src/data/servers.json
npm run dev # local preview at http://localhost:4321
npm run build # outputs static site to ./dist
How it works
scripts/scrape.tsqueries the GitHub Search API for repos matching MCP-related terms, paginates through results, and dedupes byowner/name.- Each server gets a normalized record: name, description, language, stars, last push, topics, license, owner avatar.
- Featured slugs in
scripts/featured.jsonare pinned to the top. - Astro builds a static page per server at
/server/[slug]/plus index/category/search pages. - The cron reruns the scraper each Sunday and commits
src/data/servers.json. It does not auto-deploy — run the manual deploy (see below) to publish the refreshed data.
Project structure
src/
data/servers.json # generated by scripts/scrape.ts
layouts/BaseLayout.astro
pages/ # routes (index, /server/[slug], /submit, etc.)
lib/data.ts # data accessors
components/
types.ts
scripts/
scrape.ts # GitHub MCP server scraper
featured.json # array of slugs to pin as featured
public/
robots.txt, favicon.svg, og-default.svg
.github/workflows/
weekly-scrape.yml # cron: re-scrape every Sunday 03:17 UTC
Environment variables
| Var | Purpose | Required? |
|---|---|---|
GITHUB_TOKEN | Used by the scraper (local + CI) | Required for scraping |
SITE_URL | Canonical URL for sitemap/OG tags | Recommended |
PUBLIC_FORMSPREE_ID | Formspree form ID for /submit/ (falls back to a prefilled GitHub issue) | Optional |
For the GitHub Action, store the token as repo secret SCRAPER_GITHUB_TOKEN (preferred — gives 5,000 req/hr) or fall back to the default GITHUB_TOKEN (1,000 req/hr).
Deploy (Cloudflare Workers)
The site is deployed to Cloudflare Workers (static assets). Manual deploy after a content change:
npm run build
npx wrangler deploy
The weekly cron commits the refreshed servers.json and then builds + deploys automatically if the CLOUDFLARE_API_TOKEN repo secret is set; without it, the deploy step skips and the live site updates on the next manual deploy above.
Disclaimer
MCP Directory is an independent project and is not affiliated with Anthropic or the MCP project maintainers. Server metadata is sourced from public GitHub repositories — each server's own license applies to its code.
Related servers

n8n
Updated todayby n8n-io
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

mcp-server-fetch
OfficialUpdated todayA Model Context Protocol server providing tools to fetch and convert web content for usage by LLMs

@modelcontextprotocol/server-filesystem
OfficialUpdated todayMCP server for filesystem access