Add /c/mcp and /c/workflows: eleven realtime lists, deduplicated - #139
Merged
Merged
Conversation
Two collections, from the r/ClaudeWorkflows library post: every MCP server anyone has published, and how people actually work with Claude Code. /c/mcp reads six sources that each know something the others do not: the official registry (what was published, with which packages), Docker's catalogue (what is packaged, with pull counts and the tools each exposes), Smithery (how often a server is actually called), the punkpeye, wong2 and appcypher lists plus the protocol repo (the servers nobody published), aitmpl's ready-made configs, and GitHub topic search (what was tagged this morning). /c/workflows reads five: the r/ClaudeWorkflows library through Arctic Shift, awesome-claude-code from the CSV it is generated from, .claude-plugin marketplace manifests, aitmpl's 1,780 components, and GitHub topics. Everything keyless; GITHUB_TOKEN only raises rate limits. Measured 2026-09-25: 6,300 MCP rows and 3,100 workflow rows in one pass. The work is the deduplication. Both collections set dedupe_urls, which only helps if URLs are comparable, so repoUrl folds them: owner and repo lowercased, .git and trailing slashes dropped, blob and tree unified, any ref to HEAD -- but never the subpath, because modelcontextprotocol/servers holds seven servers under src/ and awslabs/mcp a dozen. 4,761 list entries are 4,507 distinct servers. Two traps fixed in the adapters rather than in the dedupe: the registry lists every published version as an entry and some publishers name a repository that is not theirs (three agency.ottobot/* servers point at the registry itself), which turned 300 entries into 174 keys and would have discarded 126 published servers -- collapse() keeps one row per server at its newest version and sends a URL that several names claim to each server's own registry page. And aitmpl's 14 project templates are the only pathless components, so all 14 linked to one directory; they are not ingested. MCP servers leave /c/extensions in migration 0032, source, items and feed together, with the feed keeping its slug because /c/mcp/new-mcp-servers is a promise to whoever polls it. The github-repo enricher is on for both, so a dead server shows up as archived without anyone re-checking a list by hand. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ralyodio
added a commit
that referenced
this pull request
Sep 25, 2026
…ugins /hooks (#140) A subagent, a skill, a slash command, a hook and a plugin are five different things to go looking for, so they are five collections rather than five kinds inside one. Each is also a name at the site root, because a collection seeds a niche and a niche's page is served from /: /workflows, /skills, /agents, /commands, /plugins, /hooks. MCP is the exception and stays at /c/mcp. `mcp` is a reserved niche slug -- /mcp is this site's own MCP endpoint -- so the servers cannot have a root page without taking the protocol's. There is now a test saying so. `workflows` keeps what is read rather than installed: the library posts, the guides and CLAUDE.md files, settings bundles, agent loops, behaviour mods, and the repositories tagged for all of it. An adapter writes into exactly one collection, so aitmpl's components.json now feeds six through a factory and awesome-claude-code's CSV feeds two. That is deliberate rather than reluctant: a source is what a reader follows and what the run log reports on, so "subagents from aitmpl" and "skills from aitmpl" should be two rows on the sources page. The cost is re-fetching one file per collection, which is why those cadences are slow and staggered. New source while splitting: VoltAgent's README names its 165 subagents one by one, where its marketplace manifest declares only the 10 bundles they ship in, so /agents reads the README through the same list parser the MCP lists use. This is migration 0033 rather than an edit to 0032, because 0032 shipped in #139 and has run. Migrations are keyed by filename with no checksum, so an edited one never runs again: the five collections would still have appeared, because seeding creates them, but with dedupe_urls silently false, and a skill would be stored once per list that carries it. 0033 also moves the plugin marketplaces source and its items whole, and drops the rows that aitmpl and awesome-claude-code wrote into workflows for kinds that have left -- dropped rather than moved, because an item's collection comes from its source's, and a moved row would sit in /skills owned by a workflows source and block the real source from ever writing it. Measured over a live pass of every source: mcp 5,782 distinct, workflows 1,309, skills 894, agents 587, commands 288, plugins 117, hooks 62. Nothing malformed. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merged
ralyodio
added a commit
that referenced
this pull request
Sep 25, 2026
Two releases' worth of collections since 0.29.0: parts (#137), MCP servers and agent workflows (#139), and the split of the latter into skills, subagents, commands, plugins and hooks (#140). 15 manifests plus the CLI's own VERSION const; bun.lock carries no version lines to follow, and @profullstack/partners stays at 0.2.0. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two new collections, from the r/ClaudeWorkflows library post:
/c/mcp(every MCP server anyone has published) and/c/workflows(how people actually work with Claude and Claude Code).Both 404 today. MCP servers currently live in
/c/extensionsbeside Firefox add-ons, fed by one source.Sources — eleven, all keyless
/c/mcp— six, each knowing something the others do not:/c/workflows— five:Smoke-run against the live upstreams: 6,300 MCP rows and 3,100 workflow rows in one pass, zero malformed, zero without a URL.
GITHUB_TOKENis optional everywhere and only raises rate limits (search 10/min → 30; the enricher 60/hr → 5,000). Reddit is read through Arctic Shift because reddit.com blocks this deployment on every road including a real browser.The work is the deduplication
Both collections set
dedupe_urls, which only helps if the URLs are comparable — the same server is written five ways.repoUrlfolds them: owner and repo lowercased,.gitand trailing slashes dropped,blob/treeunified, any ref toHEAD. It deliberately keeps the subpath:modelcontextprotocol/serversholds seven servers undersrc/andawslabs/mcpa dozen, and folding those to the repo root would fuse distinct servers into one row. Measured: 4,761 list entries are 4,507 distinct servers; 82 of Docker's 270 entries share a repository with another.First writer keeps the row, so registration order decides whose account of a duplicate survives: published → packaged → measured → curated → tagged.
Two traps fixed in the adapters, not in the dedupe:
agency.ottobot/*servers point atmodelcontextprotocol/registryitself. Left alone, 300 entries deduplicated to 174 keys and 126 published servers would have vanished.collapse()keeps one row per server at its newest version, and a URL that several server names claim identifies none of them, so those fall back to their own registry page. After: 181 items, 181 keys.Migration 0032
MCP servers leave
/c/extensionsthe way weather left/c/alertsin 0010 — source, items and feed moved together, every statement conditional so a fresh database seeds to the same place. The feed keeps its slug, because/c/mcp/new-mcp-serversis a promise to whoever polls it.extensionsstops claiming to hold MCP servers.The
github-repoenricher is now on by default for both collections, so a dead server shows up as archived without anyone re-checking a list by hand.Checks
bun test: 1,991 pass, 0 fail (127 files), including 77 new tests acrosstest/mcp.test.js,test/workflows.test.jsand two migration tests intest/schema.test.jsthat run 0032 against a real Postgres via pglite.biome check: clean on every file touched.1t5vxvq, "Claude Workflow Library — Start Here") lands as aworkflow-indexrow, with all twelve category posts beside it.Docs:
docs/mcp-and-workflows.md, linked from the README table.🤖 Generated with Claude Code