-
Notifications
You must be signed in to change notification settings - Fork 1
Installing
Connecting a client. For running the server itself, see Deployment.
You need one thing: the server's MCP URL. There is no token — this server has no auth at all, because every skill it serves is public markdown and the config file that says which is not reachable through it.
http://localhost:8000/mcp
That is the Quick start's address, and the one used on this page; use wherever yours runs — in Kubernetes, the Service's name.
Six query parameters change what a client is shown. All are optional, and each has a header form that wins over it, so a setting pinned inside a credential cannot be overridden by whoever pastes the URL.
| Parameter | Header | Does |
|---|---|---|
?resources=off |
X-MCP-Resources |
Declares that you cannot read MCP resources, so list_resources and read_resource appear |
?prompts=off |
X-MCP-Prompts |
Declares that you cannot use MCP prompts, so list_prompts and get_prompt appear |
?library=<name> |
X-Skill-Library |
Restricts this client to one library, by name |
?categories=<name> |
X-Skill-Categories |
Restricts it to the plugins declaring that category; repeat to mean any of them |
?tags=a,b |
X-Skill-Tags |
Restricts it to what carries all of those tags; repeat the parameter to mean any of the groups |
?skills=full |
X-Skill-Listing |
Lists every skill rather than just the indexes |
off is what turns the first two on; false, 0, no and none read the same
way, and anything else — including omitting them — means the client has the
native feature. full is the only value skills takes.
One comma rule for the scope: a comma inside one value means all of, a repeated parameter means any of. A comma in a category is refused, because a plugin has exactly one.
Off HTTP there is neither a URL nor a header, which is what stdio is: nothing is narrowed and every feature is assumed present.
Two of these deserve a word. ?skills=full costs roughly 16k tokens on every
listing, which is exactly the expense the index rows exist to avoid — turn it on
only for a client that syncs skills to disk and finds them by scanning the
listing for /SKILL.md. And the scope parameters are a ceiling, not a filter the
model chooses; Scoping is about what that means. A scope that names
nothing this server has fails every request, saying what there is instead — so a
typo in a URL shows up as a client that cannot connect.
.mcp.json in the project, or claude mcp add:
{
"mcpServers": {
"mcp-kb": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}Claude Code reads MCP resources and uses MCP prompts, so it wants the bare URL: the indexes arrive as resources, the prompts arrive as slash commands, and all four mirror tools stay hidden. That is the shape this server is designed around.
An MCP Client Tool node attached to an AI Agent. Two things about n8n specifically:
-
It has no notion of MCP resources or MCP prompts. It calls tools and
nothing else, so a bare URL makes this server look empty. Put
?resources=offand?prompts=offon it and all four tools appear. -
The connection config is where a scope belongs. Attach a Header Auth
credential to the node and set
X-Skill-Library(orX-Skill-Categories,X-Skill-Tags) in it. A header beats the URL, so a credential is the one place a scope cannot be edited away by whoever copies the node.
http://localhost:8000/mcp?resources=off&prompts=off
Put a scope in the credential, not the URL, when that credential is shared — and the other way round when one credential serves several agents that each need a different slice.
.vscode/mcp.json:
{
"servers": {
"mcp-kb": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}VS Code reads resources and prompts, so the bare URL is right there too.
Any client speaking MCP Streamable HTTP works. The rule is only about which MCP
features it implements: add ?resources=off if it cannot read resources,
?prompts=off if it cannot use prompts, and neither if it can do both.
If you are not sure, ask it for a tool list. A client that has both features sees no tools at all; one that sees four has told the server it has neither.
curl -s http://localhost:8000/health | jq/health needs no credentials and is the fastest way to tell whether the server
is up, which libraries, plugins and fetches loaded, and how many skills and
prompts are being served.
GET /openapi.yaml on the same origin is the machine-readable contract for it.
See Endpoints for every field, and Operations for what
to do about the answers.
Home · Deployment · Scoping · Tools
Configuration, Tools and Endpoints are generated by scripts/generate_wiki.py from the config models, a live server's tool list and the OpenAPI document — so they describe the server that shipped, not the one someone remembered. Prose for a generated page goes in wiki/notes/<page>.notes.md.
mcp-kb · MIT
Getting started
The config file
What clients get
Reference