Getting started
Reading installed skills needs no login or model. The local MCP server reads files already on your disk; CLI commands manage additional skill packages.
1. Register the server
{
"mcpServers": {
"pmcp": { "command": "npx", "args": ["-y", "@modootoday/pmcp"] }
}
}
Hosts differ about which file that goes in, and two of them will write
it for you from the install page. Nothing has to
be installed first: npx -y fetches the package when needed.
2. See what it can see
npx -y @modootoday/pmcp list
One row per skill: the name, as
<package>/<slug>, and the one-line description
that skill_find ranks. Do this before you ask an agent
anything, because it answers the question the server cannot ask you
back.
An empty catalog exits 1 rather than 0, and prints the
roots it walked. That is usually one of two things: the working
directory is not the project, or none of the installed packages ships a
SKILL.md at all.
3. Ask in a sentence
skill_find takes an intent: what you are
trying to do, written as an English sentence. It returns names only,
ranked, and never a body.
+ redis-toolkit/locks
ranking lexical > skill_call redis-toolkit/locks
the body, once
A bare keyword ranks badly on purpose. Descriptions are written as
symptoms, so a sentence shares vocabulary with one of them and a single
noun matches many of them weakly and none of them strongly. When you
want to browse rather than search, skill_catalog is the
tool that filters.
4. Read exactly one
skill_call takes the name skill_find returned
and gives back that skill's body. It is the only call that costs a
document, which is the whole point of the split: looking is cheap, and
reading is deliberate.
An unknown name comes back as an error naming the tool to call instead, rather than as an empty result that reads like an empty catalog.
Where it looks
By default, the node_modules directories above the working
directory. Two options change that, and both belong in the
args array beside pmcp:
npx -y @modootoday/pmcp list --root ./node_modules
npx -y @modootoday/pmcp list --scope @acme/
--scope matches the start of the package name, so
@acme also matches @acmetools/thing. Include
the trailing slash when you mean the scope. Both options are repeatable.
When two roots hold the same package, the first one wins: a nested
node_modules holds an older copy of something the outer
root already resolved.
If you want semantic ranking
npm install --save-dev @huggingface/transformers
npx -y @modootoday/pmcp index
index encodes descriptions and stores local vectors. The
default MCP server currently ranks lexically; installing the optional
encoder alone does not activate semantic ranking.
The model runtime and weights add installation and loading costs. Skip this optional step when local lexical search meets your needs.
If step 2 came back short
It usually does. Most packages ship no skill, so the server has nothing to serve for them, and that is the gap we write into: skills for the packages an agent gets wrong most often, each verified by running its examples against the version it names.
npx -y @modootoday/pmcp available # which of them match this project
npx -y @modootoday/pmcp preview <skill> # its contents and one full example
Both are free and need no account. Installing one needs a subscription; the list of what exists is open to read.
What to do next
- Ship a skill of your own — the paths, the frontmatter, and how to write a description that gets found
- The command reference — flags and exit codes
- The licence — what Elastic License 2.0 permits