Skip to content

Add the skills silo, and widen the columns the census broke - #63

Merged
lbesecker195 merged 1 commit into
mainfrom
feat/skills-silo
Sep 24, 2026
Merged

lbesecker195 merged 1 commit into
mainfrom
feat/skills-silo

Conversation

@lbesecker195

Copy link
Copy Markdown
Owner

Closes #62. Follows #61, which taught the prober to ask for prompts.

The data came first

The measurement that justified this: one remote server in ten offers prompts — 202 servers and 932 prompts across the first 1,957 that answered. My initial sample of eight servers found zero, including servers that declare the prompts capability, and on that basis I nearly did not build this at all. Eight was not enough.

The pages

A skill is an MCP prompt: something the user invokes deliberately, as against a tool, which the model calls on its own. Every page leads with that, because it is the part a reader arriving from a search has usually not understood.

  • /servers/:ns/:name/skills — index, only where a listing has prompts
  • /servers/:ns/:name/skills/:skill — one skill
  • /servers/:ns/:name/skills/:skill/:client — H1 AGENT SERVER Skill/SKILL, H2 How to: AGENT SERVER SKILL

Each client page says where the prompt actually surfaces in that client — a slash command in Claude Code, the attachment menu in Claude Desktop — because sending a reader to look for a menu their client does not have is the difference between a page that works and one that wastes their time.

prompts is deliberately not castable from user input. The pages state these names were read from the server itself; a publisher able to submit them would make that claim false.

Two bugs the census exposed

  1. {:array, :string} is varchar(255)[]. Resource URIs pass 255 characters routinely. The write raised Postgrex.Error out of the runner's Task.async_stream and killed the batch around it — one long URI cost the other 399 probes in its batch, which is what stalled the first census run. Columns widened to text[], and record/3 now rescues so one bad row can never be fatal to the rest.
  2. 1..0 descends in Elixir (step -1), so page in 1..0 was true and /sitemaps/tools-1.xml served an empty 200 instead of a 404 whenever nothing had tools. Pre-existing; fixed for both files.

Tests: 163 passing (+17).


Pages affected:

🤖 Generated with Claude Code

One remote server in ten offers prompts, so the silo has something behind
it. A skill here is an MCP prompt: something you invoke deliberately, as
against a tool the model reaches for on its own, and the pages lead with
that difference because it is the part readers arrive not knowing.

- /skills, /skills/:skill and /skills/:skill/:client under a listing, with
  H1 "AGENT SERVER Skill/SKILL" and H2 "How to: AGENT SERVER SKILL"
- A listing with no prompts gets no page rather than an empty one
- Each client page says where the prompt actually surfaces there -- a slash
  command in Claude Code, the attachment menu in Claude Desktop
- Prompts are not castable from user input. The pages say these names were
  read from the server itself, and a publisher able to submit them would
  make that false

Two bugs the census turned up:

- {:array, :string} is varchar(255)[], and resource URIs pass 255 routinely.
  The write raised through Task.async_stream and killed the batch around it,
  so one long URI cost the other 399 probes beside it. Columns widened, and
  record/3 now rescues so a bad row cannot be fatal to the rest
- 1..0 descends in Elixir, so `page in 1..0` was true and tools-1.xml served
  an empty 200 instead of a 404

Closes #62

---

Pages affected:

- [MCP Harbor](https://ai.mcpharbor.dev/) -- registry home, search and recently added servers.
- [browse servers](https://ai.mcpharbor.dev/servers) -- the listings these skill pages hang under.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@lbesecker195
lbesecker195 merged commit d534039 into main Sep 24, 2026
1 check passed
@lbesecker195
lbesecker195 deleted the feat/skills-silo branch September 24, 2026 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Skills silo: pages for the prompts a server offers

1 participant