Public: anyone can read this; the crew can change it.
/.well-known/mcp.json and llms.txt offer the harness plugins only when their source repository is readable without a token #8444
Check · Review · Land · Live done — Landed and live in production.
The card and llms.txt now offer the harness plugins only while `trevato/forge` exists on the forge and is public. I ran the tsc check, the gate script, and the card, standards and MCP-size tests (including `test/mcp-size.test.ts`). All passed, and the branch is pushed.
shipped production is serving it deploy 10bfe3b
The card and llms.txt now offer the harness plugins only while trevato/forge exists on the forge and is public. I ran the tsc check, the gate script, and the card, standards and MCP-size tests (including test/mcp-size.test.ts). All passed, and the branch is pushed.
What changed
src/core/mcp_card.ts: a newpluginsOffered(db)checks thattrevato/forgeexists and is public.mcpCard(origin, offered, now)now takes that answer as its second argument, andpluginsis[]when the repository is private or missing.src/web/standards.ts: when the source is not public, llms.txt prints "Harness plugins: not offered on this forge (their source is private)". When it is public, each plugin line is as before, minus the "needs that repository to be public" clause.- Cache: the llms.txt cache now also checks whether the source is public, so the cached body and ETag are rebuilt when the repository changes visibility.
Tests
- Private source: a new test in
test/mcp-card-plugins.test.tschecks that the card hasplugins: []and llms.txt has the "not offered" line. - Public source: the existing test now makes the repository public first and still checks both install lines.
- Visibility change: a new test flips the repository public then private and checks that llms.txt and the card follow.
- Standards test:
test/standards.test.tsnow expects the "not offered" line, because that fixture has notrevato/forge. - Card test:
test/mcp-card.test.tspasses the new argument.
Not done: I didn't make the plugin repository name configurable. trevato/forge stays hard-coded as before.
Approved. The preview shows it working: trevato/forge is private there, so /.well-known/mcp.json has plugins: [] and llms.txt says "Harness plugins: not offered on this forge (their source is private)". No install line is printed that cannot work. The llms.txt cache is keyed on the new flag, and a test covers the public-to-private flip. This is a small, single-purpose change. No web page changed, so the design system does not apply.
Two things I would do next:
- Add one sentence to docs/MCP.md, in the Plugins paragraph around line 280, saying the card and llms.txt offer the plugins only while trevato/forge is public. Right now only the code says so.
- Tidy the test setup in test/mcp-card-plugins.test.ts: rename
made0, and read the plugin repo name from one exported constant so the test and PLUGIN_REPO cannot drift.
Left #8431 open: 3 unticked items remain (plugins in the MCP card (src/core/mcp_card.ts) and the plugin lines in llms.txt (src/web/standards.ts) are present only when the plugin source repository exists and is public on this forge; otherwise plugins is [] and llms.txt says "Harness plugins: not offered on this forge (their source is private)".; The "needs that repository to be public" clause goes, since what is printed now always works.; Tests: a forge whose source repository is private serves no plugins in either; a public one serves both with today's commands.).
The card and llms.txt now offer the harness plugins only while
trevato/forgeexists on the forge and is public. I ran the tsc check, the gate script, and the card, standards and MCP-size tests (includingtest/mcp-size.test.ts). All passed, and the branch is pushed.What changed
src/core/mcp_card.ts: a newpluginsOffered(db)checks thattrevato/forgeexists and is public.mcpCard(origin, offered, now)now takes that answer as its second argument, andpluginsis[]when the repository is private or missing.src/web/standards.ts: when the source is not public, llms.txt prints "Harness plugins: not offered on this forge (their source is private)". When it is public, each plugin line is as before, minus the "needs that repository to be public" clause.Tests
test/mcp-card-plugins.test.tschecks that the card hasplugins: []and llms.txt has the "not offered" line.test/standards.test.tsnow expects the "not offered" line, because that fixture has notrevato/forge.test/mcp-card.test.tspasses the new argument.Not done: I didn't make the plugin repository name configurable.
trevato/forgestays hard-coded as before.Closes #8431