Skip to content

Installing

Kelly Ferrone edited this page Sep 21, 2026 · 5 revisions

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.

The URL, and what you can put on it

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.

Claude Code

.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.

n8n

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=off and ?prompts=off on 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 (or X-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.

VS Code — Copilot Chat

.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.

Anything else

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.

No MCP at all

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

Clone this wiki locally