{
  "markdown": "# mcpjunction.ai\n\n**A directory of Model Context Protocol servers, rebuilt nightly from public GitHub\nmetadata.** Roughly 1,800 servers in a hand-owned category taxonomy, also browsable by\nrepository topic, published as a website, a downloadable dataset, and an MCP endpoint your\nagent can query directly.\n\n[mcpjunction.ai](https://mcpjunction.ai) · [Dataset](https://mcpjunction.ai/data) ·\n[Categories](https://mcpjunction.ai/categories) · [Licensing](https://mcpjunction.ai/licensing)\n\n> Not affiliated with Anthropic or the Model Context Protocol project.\n\nThis repository is the whole thing: the pipeline that builds the dataset, the Astro site\nthat renders it, and the Cloudflare Worker that serves it.\n\n## Use the data\n\nThree ways in, all public and all free to read.\n\n**Bulk download.** The full directory, regenerated nightly with a `generated_at` timestamp.\n\n```bash\ncurl -O https://mcpjunction.ai/data/mcp_servers.json\n```\n\n- [`mcp_servers.json`](https://mcpjunction.ai/data/mcp_servers.json) — ~2.3 MB, 28 fields\n  per server plus a dataset envelope with counts and per-category totals\n- [`mcp_servers.csv`](https://mcpjunction.ai/data/mcp_servers.csv) — the same data as 16\n  flat columns\n\n**Query it from an agent.** `/mcp` is itself an MCP server — streamable HTTP, stateless\nJSON-RPC over POST, protocol version `2025-06-18`, no authentication.\n\n```bash\nclaude mcp add --transport http mcpjunction https://mcpjunction.ai/mcp\n```\n\n| Tool | What it does |\n| --- | --- |\n| `search_servers` | Free-text search, optionally filtered by `category` and `language` |\n| `get_server` | One server by id (`owner--repo`, e.g. `microsoft--playwright-mcp`) |\n| `list_categories` | Every category with active counts |\n| `get_dataset_info` | Counts, `generated_at`, source, and licensing terms |\n\n`GET /mcp` returns 405 by design; POST your JSON-RPC messages. JSON-RPC batching is not\nsupported — it was removed in protocol `2025-06-18`.\n\n**Read it as markdown.** Every server and category page has a clean markdown twin with no\nnavigation or styling to strip. Either negotiate for it:\n\n```bash\ncurl -H 'Accept: text/markdown' https://mcpjunction.ai/servers/microsoft--playwright-mcp\n```\n\n…or just append `.md` to the canonical URL —\n[`/servers/microsoft--playwright-mcp.md`](https://mcpjunction.ai/servers/microsoft--playwright-mcp.md),\n[`/categories/databases.md`](https://mcpjunction.ai/categories/databases.md). Each HTML page\nadvertises its twin via `<link rel=\"alternate\" type=\"text/markdown\">`.\n\nMachine-readable entry points are collected in\n[`llms.txt`](https://mcpjunction.ai/llms.txt).\n\n## How a server gets listed\n\nListing is automatic. There is no submission form, and none is planned — the pipeline runs\nfive GitHub search queries (`topic:mcp-server`, `topic:model-context-protocol`,\n`topic:mcp`, and two name/description phrase searches), then keeps repositories that clear\na 2-star floor and match a Model Context Protocol name/topic heuristic. If your server is\non GitHub and meets that bar, it will appear on the next nightly run.\n\n**Corrections, removals, and licensing:** <licensing@mcpjunction.ai>, acknowledged within\nthree business days.\n\n## Contributing\n\nOpen to read and reuse; deliberately narrow about what comes back.\n\n**Corrections are the most useful thing you can send.** A wrong install hint, a stale\nlicense, a repository that moved, a server sitting in the wrong category — open an issue or\nemail the address above with the server id (`owner--repo`) and what's wrong. One maintainer\ncannot check 1,800 entries by hand, and the people who hit these find them first.\n\n**Pull requests are welcome for the software** — `src/`, `worker/`, `scripts/`, `docs/`.\nBug fixes need no preamble. Open an issue first for anything that changes rendered output\nor the dataset shape, because the constraints in the next section are load-bearing and easy\nto undo by accident.\n\n**Three things don't take pull requests, for reasons rather than ceremony:**\n\n- **`public/data/`** — regenerated nightly, so the edit is gone within a day. If a server\n  is missing, the fix is upstream: tag the repository and the next run finds it.\n- **`editorial/summaries.md`** — summaries are written in-house. A directory that other\n  people cite lives or dies on whether its prose is trustworthy, and reviewing a summary\n  properly costs about what writing one costs.\n- **`categories.json` and `topics.json`** — every slug is a permanent public URL, and\n  category order is matching precedence rather than presentation. Propose one in an issue,\n  with the servers it would cover; adding a category is a decision, not a patch.\n\nThe code is MIT and contributions to it are accepted on those terms. The dataset is\nseparately licensed — see [Licensing](#licensing).\n\n## How the data is kept honest\n\nA directory other people cite has to fail safe. These are the constraints the code\nactually enforces:\n\n- **Automation cannot promote anything.** `security_reviewed`, `verified_badge`,\n  `sponsor_tier`, `editorial_notes`, and `editorial_summary` are set by hand and only\n  carried forward by the pipeline — never written by it. A machine cannot grant a badge or\n  a security clearance here. These fields are currently unset across the entire dataset; a\n  written summary, when one exists, is a description and **not** a security review.\n- **Collapse guard.** A run aborts if the active server count falls more than 10% against\n  the previous dataset, or if more than 50 servers would be newly delisted at once. A\n  separate check refuses to deploy below 200 servers. A bad day at the GitHub API should\n  not silently gut the directory.\n- **Delisted repositories persist 30 days** as `status: archived_or_removed` with a\n  `delisted_at` timestamp, then drop. Stable URLs, without unbounded growth.\n- **Identity guard.** If a repository's numeric GitHub id changes under the same\n  `owner--repo` name — a rename, or a released username claimed by someone else — the\n  editorial state is dropped rather than inherited.\n- **CSV injection is neutralised.** Cells beginning `=`, `+`, `-`, or `@` are quote-prefixed\n  before publication. Repository descriptions are attacker-controllable: anyone can name a\n  GitHub repo.\n- **Install hints never auto-confirm.** No `npx -y`, no `--yes`. The registry package\n  sharing a repository's name may belong to someone else entirely, so hints are published\n  as unverified suggestions.\n- **No dead links.** The sitemap lists only files present on disk at build time.\n- **One source, used as documented.** The official GitHub REST API, authenticated and\n  rate-limit aware, public repository metadata only.\n\n## How it's built\n\n```\nsrc/              Astro static site — pages, layouts, components\nworker/           Cloudflare Worker — the /mcp server and markdown negotiation\nscripts/          pipeline.py (GitHub API → dataset), build_sitemap.py\ncategories.json   Taxonomy: human-owned, first match in file order wins\ntopics.json       Approved /topics/<tag> pages — vetted GitHub repository topics\nserver.json       Registry metadata for registry.modelcontextprotocol.io\neditorial/        Human-written server summaries (summaries.md)\npublic/           Passthrough assets — robots.txt, license.xml, llms.txt, _headers, data/\ndist/             Build output and the Worker's asset root (not committed)\n```\n\nEvery night a GitHub Action runs `pipeline.py`, builds the site with Astro, generates the\nsitemap, commits the refreshed dataset, deploys the Worker, and then verifies the live\nresult — licensing surface, `/mcp` handshake, crawler access rules, and markdown\nnegotiation — before it calls the run a success.\n\nLocally:\n\n```bash\nnpm ci && npm run dev\n```\n\nThe pipeline needs Python 3 and a `GITHUB_TOKEN`; deploys need Cloudflare credentials. See\n[`docs/OPERATIONS.md`](docs/OPERATIONS.md).\n\n## Licensing\n\n**The code is MIT.** `src/`, `worker/`, `scripts/`, and the configuration are yours to\nreuse — see [`LICENSE`](LICENSE).\n\n**The dataset is not.** `public/data/**` is excluded from the MIT grant and governed by the\nRSL terms in [`public/license.xml`](public/license.xml): search indexing is free, agent and\ninference-time use is free site-wide with attribution during the launch phase, and AI\ntraining requires a license. Bulk `/data/` retrieval carries stricter terms. Details at\n[mcpjunction.ai/licensing](https://mcpjunction.ai/licensing); see also [`NOTICE`](NOTICE).\n\nCiting us is easy and appreciated: *via mcpjunction.ai*.\n",
  "bytes": 8461,
  "sha": "4893cc42ce6661e129c478d728030932b02855894af5c71fbb41123df96adbfd",
  "repo_slug": "rickstek/mcpjunction",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_mcpjunction_directory_e7dbd7bf/readme"
}