Some of your dependencies shipped instructions.
A package can carry a SKILL.md saying how to use it. Once a
project has a few hundred of them, nobody knows which ones did, so every
question about an installed package gets answered by reading its source.
@acme/release-runbook a deploy went out but the old bundle is still running
redis-toolkit/locks a job ran twice because two workers took the same lock
… > skill_find "my deploy shipped but the old bundle is running"
+ @acme/release-runbook
ranking lexical > skill_call @acme/release-runbook
one document, at the moment it is needed
pmcp reads those files out of node_modules and
serves three tools over the Model Context Protocol:
skill_catalog, skill_find and
skill_call. The host sees three tools whatever the catalog
holds, and a session pays for the one skill it opens.
What the design buys you
Startup does not grow with the catalog
Bodies are read by skill_call, one at a time. Adding a
dependency that ships ten skills adds ten one-line descriptions to
what a search ranks, not ten documents to what a session loads.
Nobody maintains the list
The catalog is derived from the installed tree when a tool is called. Installing a package is how its skill arrives, and uninstalling it is how the skill leaves.
One directory read sees every convention
Discovery is by shape rather than by path, so
skills/, .agent/skills/,
.claude/skills/, .gemini/skills/ and
.codex/skills/ are all found by the same walk.
No model arrives with it
Ranking is lexical by default and takes no model at all. Nothing is downloaded at install time and there is no postinstall hook.
Skills can live in more than one layout
The same bounded walk finds SKILL.md in agent-specific directories, a package's skills directory, and layouts such as lib/skill. Nested installations and cache directories are kept out of that walk.
Where a skill has to sit to be found
Three tools, and nothing else
| Tool | Takes | Answers |
|---|---|---|
skill_catalog |
nothing | every skill's name and description, grouped by package |
skill_find |
a sentence describing your problem | the few skills that match, ranked, names only |
skill_call |
a skill name | that skill's body |
skill_find wants a sentence rather than a keyword, because
it ranks the frontmatter description, and a description is
written as a symptom. skill_catalog is the one that takes a
bare word, because it filters instead of ranking.
Local indexing is optional
The default MCP server ranks lexically. The index command
requires an encoder installed separately and may load model assets when
explicitly invoked. Installing the optional peer alone does not switch
the server to semantic ranking.
Most packages ship nothing
Run pmcp list and the honest result, for most projects, is
a short list. The server can only serve what a maintainer wrote, and
few have. For the packages an agent gets wrong most often, we write the
skill ourselves and verify it by executing its examples against the
version it names — if any of them fail, it is not published.
That half is a subscription. Everything above is not: reading the skills your dependencies already ship needs no account, and never will. You can read every written skill's contents, its verification date and a complete example before paying for any of it.
Three reasons you might not want this
The licence is not OSI open source
Elastic License 2.0: use it inside your company at any scale, ship it in a product you sell, fork it. What you cannot do is offer it to third parties as a hosted or managed service. The whole of it, in a page.
Your own repository's skills do not need it
Skills that live in the project are not installed, and a host that already loads them does not need a server in front of them. This is for the skills you did not write.
Lexical ranking is what you get by default
Token overlap and character bigrams, no model. It answers a sentence that shares vocabulary with a description and it does not answer a paraphrase that shares none.
MCP reading stays local. The three tools read installed skills. Separate CLI commands retrieve the catalog and install skill packages with confirmation; they do not upload your dependency list.