MCP Reference Server
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
MCP Reference Server — A Full-Stack MCP Demo
A reference MCP server for the Model Context Protocol. Use it to check, validate and test your client, your server, and proposed protocol changes (SEPs, Specification Enhancement Proposals) against a running implementation. Run it in under five minutes.
Reference: 22 tools, 3 resources, 5 prompts, three transports (stdio, SSE, Streamable HTTP), three auth modes, API keys, per-tool gates, rate limiting, and a desk for health, tools, admin, and the log.
Validate:
/healthsays the server is alive,/testsays it works, and the automated suites exercise tools, auth, events, tasks and skills.Test SEPs: 15 specifications and SEP prototypes (groups, skills, tasks, events and more) sit behind live switches. Flip one and watch how your client copes. See the SEP control plane.
MCP server (mcp-reference-server 1.0.0) | |
MCP specification and SEPs |
Personal open-source project. SEP behavior here is a prototype for testing, not the specification; the specification at modelcontextprotocol.io is authoritative.
What makes this useful beyond a hello-world
Most MCP examples stop at "here is a tool that returns a string." This one goes further:
Feature | What you learn |
22 tools with intent-named descriptions | Nouns live in a schema, verbs stay as tools — not |
3 resources ( |
|
5 MCP prompts | User-facing prompts vs agent-facing tools |
Tool annotations ( | Client confirm/retry UX |
Server instructions | The README the model actually reads |
| Clients don't need to parse |
Attribution scar — | 201 is not done. The bot owns the ticket. |
Schema discovery — | One query tool beats a pile of |
0 tools discovered — hand a laptop path to a cloud runner | The silent failure with no error and no warning |
stdio + SSE + Streamable HTTP from one codebase | Three transports, same 22 tools |
Auth modes ( | Security is an operator concern |
| SSE and Streamable HTTP sessions refresh; one-shot curl does not |
Rate limiting with | Stop the model retrying in a loop |
PII redaction on | Same tool, same endpoint; the |
| Alive ≠ works. Public |
Live observability — | See what the model is actually doing |
Operate it over MCP — settings (one | The control plane is part of the server, not a side door |
Three ways to operate one server — | Same steps, same Demo setup, checked against each other |
Groups (mcp-reference-server 1.0.0) | Prototype of |
Skills (SEP-2640) |
|
Tasks (SEP-2663) |
|
Events (SEP-3415 draft) |
|
Sampling, roots, and progress |
|
Live SEP control plane ( | Toggle 15 MCP specifications & SEPs live ( |
Related MCP server: mcp-everything
Quickstart — five minutes
# Run directly from npm — nothing to clone or install
npx mcp-reference-server # stdio (IDE spawns this)
MCP_MODE=http npx mcp-reference-server # HTTP — opens /health /test /admin /mcpThen open in a browser:
URL | What it shows |
Is the process alive? ( | |
Read-only smoke: seed tickets, schemas, and | |
Auth mode, API keys, tool gates, observability | |
Call counters, error log, full call trace | |
Every tool, with its scope, a Try button, and the curl that calls it. Tabs for groups, skills, tasks, and the test job | |
Reference for the groups, skills, tasks, and events extensions |
From a terminal
The same mcp-reference-server command is also a client for a running server, local or deployed. With no arguments it is still the MCP server, so the IDE configs below keep working.
npx mcp-reference-server status # http://127.0.0.1:8787/mcp by default
npx mcp-reference-server call run_query schema=tickets 'filter={"status":"open"}' limit=5 # any tool, values typed from its schema
npx mcp-reference-server demo apply --user demo --password demo # users, keys, auth write, 30 calls / 60 s
npx mcp-reference-server demo check --user demo --password demo # acts as each role and as nobody
npx mcp-reference-server status --url https://my-host.example.com # a deployed server--json prints one document for scripts, and exit codes are 0 done · 1 refused · 2 usage · 3 unreachable. Commands that delete or reconfigure ask first. Every command, option and example is in server/README.md, and a copy-paste page is at /clients/cli.html on a running desk. demo apply changes real settings, so use it on a server you own.


Laptop login: demo / demo. On a public bind (HOST=0.0.0.0, container, Code Engine) set ADMIN_PASSWORD — the default is disabled. Write smoke is /test?write=1 after admin sign-in.
Add to your IDE (one line)
VS Code / GitHub Copilot — .vscode/mcp.json:
{
"servers": {
"mcp-reference-server": {
"type": "stdio",
"command": "npx",
"args": ["mcp-reference-server"],
"env": { "MCP_MODE": "stdio" }
}
}
}Bob / Cursor / Windsurf — .bob/mcp.json / .cursor/mcp.json / .windsurf/mcp.json:
{
"mcpServers": {
"mcp-reference-server": {
"command": "npx",
"args": ["mcp-reference-server"],
"env": { "MCP_MODE": "stdio" }
}
}
}Per-client detail is in docs/LOCAL.md and docs/BOB.md, and a running desk serves copy-paste pages for each client at /clients/.
Tools
The server has 22 tools. Six are the ticket desk, below. Eight operate the server itself: update_settings (every setting is one patch: auth mode, rate limit, call trace, desk sign-in, SEPs, transports, events, gates, locks and scopes), set_mqtt, users (create_user, delete_user), API keys (issue_api_key, revoke_api_key), import_settings and sample traffic (generate_traffic). Most of those need the admin scope even while auth is off; server/README.md lists the scope of each. Three are timers, start_timer, stop_timer and push_timer, with no get_timer (push_timer also streams the timer as events; see Events): you read a timer through the schema, run_query with schema=timers (server/README.md). push_log sends a log line as an event, and watch_system publishes the machine as system.info, including a container's cgroup limit. run_test_job waits a set time and ends as a chosen task status, to test long-running calls and SEP-2663 tasks (server/README.md). On an open call it also sends notifications/progress when the request carries a progressToken. draft_reply asks the connected client's model for a draft and does not post it. list_workspace_roots returns the workspace roots the client chose to share and does not read the files (server/README.md). Plain lists are not tools of their own: run_query reads settings (the saved settings, importable as they are), system (the machine), events (the events already sent), and, with an admin credential, users, api_keys, trace, errors and counters. The page at /clients/dashboard.html draws them. Each of these tools is declared once and everything else is generated from that definition.
The ticket desk (6)
Tool | Scope | When to use | Lesson |
|
| First call, and after any denial | Discovery beats guessing |
|
| Open a ticket — always pass | Omit it → 201 + bot owns the ticket |
|
| Comment on a known ticket | Write tool; gated |
|
| Resolve a ticket, optionally add resolution note |
|
|
| Before any query | No |
|
| The one query tool: | Nouns in a schema, verbs as tools. Replaces |
3 Resources
Resources are addressable and pinnable — clients can subscribe and refresh. Tools are for agent loops.
URI | What it returns | Same gate as |
| One ticket by id |
|
| Live open ticket list (top 25) |
|
| Query schema shape (also |
|
Call resources/list to browse — you do not need to know a URI ahead of time. A denied read is a JSON-RPC error (not a fake ticket document you can pin).
5 Prompts
User-facing prompts — the user picks these, the model executes them.
Prompt | Lesson it teaches |
| List open tickets and who owns each one |
| Create a ticket with no requester email. The service account owns it |
|
|
|
|
|
|
Auth model
off All tools open. No credential needed. Default for local dev.
write Read tools open. Write tools need a credential. The customer phone shows only with a `pii` credential.
all Every tool call requires a credential.Credentials: Authorization: Bearer <api key> over HTTP · MCP_API_KEY env var over stdio.
Issue keys, set modes, toggle per-tool gates, and lock individual tools on /admin.
A change broadcasts notifications/tools/list_changed to connected SSE and Streamable HTTP sessions (Cursor/Bob after initialize). One-shot POST /mcp (curl) has no session — it sees the new list on the next call.
Repo layout
mcp-reference-server/
server/ MCP server — tools, resources, prompts, auth, HTTP pages
src/cli/ The command line client (mcp-reference-server <command>)
clients/ Copy-paste setup pages served at /clients/ (editors, browser, CLI, settings)
docs/ Walkthroughs: demo, local, admin and security, Bob
Dockerfile node:20-bookworm-slim, non-root USER node, WORKDIR /appDocs
Doc | What's in it |
Index. Server mcp-reference-server 1.0.0 | |
End-to-end demo guide — 16 live curl demos, every lesson, real captured output | |
Local stdio + HTTP walkthrough | |
Auth modes, API keys, tool gates, SEP switches | |
IBM Bob specific setup | |
Full reference: the 22 tools, groups, skills, tasks, sampling, roots, progress, every endpoint curl, and the command line |
Environment variables
Variable | Default | What it does |
|
|
|
|
| HTTP only. |
|
|
|
|
|
|
|
|
|
| unset | Extra |
| unset | Register one key at boot |
| unset | stdio credential. The command line client sends it as a bearer key |
| unset | stdio basic auth. The command line client sends them as HTTP Basic |
|
| Command line client only: the server to talk to |
|
| Uploaded skills. They survive a restart. Tickets do not |
|
| How long a task handle lives |
| unset |
|
|
| Calls per window per caller |
| unset | If set, writes need |
Honest limits
Tickets live in memory — a new container starts from seed data.
Admin auth is a session cookie, not SSO. Cookie is
HttpOnly(+Secureon HTTPS)./healthbeing green does not mean the ticket went to the right person.Public
/testdoes not create or close tickets. Use/test?write=1after admin sign-in.Remote config and the command line change real settings (auth mode, users, keys, rate limit) on whatever server you point them at. Demo setup is for a server you own.
Author: Markus van Kempen · github.com/markusvankempen · markusvankempen.github.io · npm
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP compatibility and transport verification server.
MCP compatibility and transport verification server.
MCP compatibility and transport verification server.
MCP compatibility and transport verification server.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP test server for verifying client connectivity, providing tools, resources, and prompts for integration.16 npmISC
- FlicenseBqualityDmaintenanceA test MCP server that exercises all protocol features including tools, resources, prompts, and sampling to help client builders validate implementations.132-
- AlicenseNot gradedqualityBmaintenanceAudits any MCP server (stdio or Streamable HTTP, legacy or modern era) with wire-level conformance, security, and behavior-regression checks, producing a fingerprinted delivery report and CI regression suite.1MIT
- AlicenseBqualityBmaintenanceProvides a reference MCP server that implements every MCP feature so client, gateway, and runtime authors can test against a single endpoint, and publishes a service contract describing its capabilities.311MIT