Our OSS server: zero downloads for a week. Then we tagged a release — 94 in the next seven days. Only a third were the new version. Registries fetch on their own clock. Nothing moves until you ship.
1/
Our open-source MCP server: 229 downloads, then a full week of zero.
Its GitHub repo page: 7 unique visitors in two weeks.
Then one release took it to 323. Here's what those numbers taught us.
5/
Two reusable lessons: measure where users actually enter before polishing the page you assume they see. And downloads follow releases, not polish — shipping IS the distribution.
Audited our MCP server's 39 tools: does this change anything? 12 don't — marked read-only, clients stop asking permission to snapshot. 3 are irreversible — marked destructive. The other 24 are clicks: destructive is the app's property, not the tool's. Marked neither.
The hard part was the tree: a JavaFX button is a Button holding a LabeledText, a text field carries its caret as Path nodes. Three controls, eleven nodes. So a control is a leaf now.
@gregisenberg Point 2 is where the work hides. In most SMEs the 'tools' are a 15-year-old desktop app with no API, so most of the harness effort goes into giving the model hands that software was never built for. And point 4 gets much stricter once those hands can click Delete in an ERP.
@awilkinson The work that isn't in its path is deeply unglamorous. Getting a model into a twenty-year-old internal system with no API and no plans for one. No frontier lab is building for that, and somebody still has to do the plumbing.
Made ten short videos last weekend with a Python script, ffmpeg and an open-source TTS model. Total media budget: zero.The voice is the only giveaway. Nobody notices the rest.
@kentcdodds The config shapes are their own small walled garden. Same nine lines of JSON and VS Code calls the key servers, most others mcpServers, Codex wants TOML, Gemini loads none of it until you trust the folder. Portability dies in differences that size.
Small thing that cost us twenty minutes: VS Code's mcp.json wants "servers", not "mcpServers", plus "type": "stdio". Everything else about pointing Copilot at a Java desktop app was boring, in the good way.
@trq212 One bit of feedback from shipping an MCP server this week: when a stdio server dies at startup the client just says "Connection closed". Surfacing the last few lines of its stderr there would save most of the debugging.