wmcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wmcplist available prompts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
wmcp
MCP exposure infrastructure — how to run Model Context Protocol servers so Cursor, Claude Desktop, and Claude Code can reach them from WSL, Windows, or macOS.
This repo is the transport/wiring layer, plus an optional personas server (compose / list_prompts). It also ships a tiny example server (echo / ping) so you can verify the plumbing. Bring your own tools and prompt packs.
Requires Node.js ≥ 18.
What an MCP server is (short version)
An MCP server is a process that speaks Model Context Protocol — JSON-RPC messages describing tools, prompts, and/or resources. Clients (Cursor, Claude) call those tools during a chat.
The interesting part is not the tools themselves. It is how the client connects:
Transport | Who speaks it | How it runs |
stdio | Cursor (local), Claude Desktop | Client spawns |
Streamable HTTP | Cursor, Claude Desktop (URL mode) | One long-lived Node HTTP server; client POSTs to |
Legacy SSE | Claude Code CLI | Same HTTP server; |
wmcp implements all three from one codebase.
┌─────────────────┐ stdio ┌──────────────────┐
│ Cursor / Claude │ ◄────────────► │ example-server │ (per-process)
│ (local spawn) │ │ or stdio-bridge │
└─────────────────┘ └──────────────────┘
┌─────────────────┐ HTTP/SSE ┌──────────────────┐
│ Cursor / Claude │ ◄────────────► │ http-server │──► example
│ (URL mode) │ │ :8820 │──► personas (opt)
└─────────────────┘ └──────────────────┘Typical setup when the real Node runtime lives in WSL:
Run
http-serverinside WSL (systemd user unit ornpm start).Point Windows/mac Cursor at
http://localhost:8820/example(WSL localhost forwarding).Or, for stdio-only clients on Windows:
wsl.exe … node dist/example-server.js.
On macOS / native Linux, skip the wsl.exe path — run Node locally and point Cursor at http://localhost:8820/<server> or a direct node dist/….js stdio command.
Related MCP server: Hello World MCP Server
Quick start
git clone https://github.com/mwhobrey/wmcp.git
cd wmcp
npm install
npm run build
npm start # HTTP front door on :8820
curl http://localhost:8820/healthstdio smoke test (separate terminal):
node dist/example-server.js
# or: node dist/stdio-bridge.js exampleWire Cursor
If transport is "sse" (the default in the example config), start the HTTP server first (npm start) and leave it running. Cursor connects to URLs; nothing is listening otherwise.
Option A — paste a minimal entry (safest; does not touch other MCP servers):
{
"mcpServers": {
"example": {
"url": "http://localhost:8820/example"
}
}
}Add that under your existing mcpServers in Cursor's MCP config, then reload MCP and call ping on example.
For stdio instead of HTTP:
{
"mcpServers": {
"example": {
"command": "node",
"args": ["/absolute/path/to/wmcp/dist/example-server.js"]
}
}
}Option B — generate configs from this repo (WSL + Windows):
Warning:
npm run sync:mcpoverwrites~/.cursor/mcp.jsonand, when/mnt/cis present,C:\Users\<windowsUser>\.cursor\mcp.json. Back up first if you already have other servers configured.
Copy and edit config:
cp config/mcp-servers.example.json config/mcp-servers.json # set projectRoot, nodePath, wslUser, windowsUserWith the HTTP server running (for
"transport": "sse"):npm run sync:mcpReload MCP in Cursor. Call the
pingtool on theexampleserver.
transport in mcp-servers.json:
"sse"(default) → Cursor entries are{ "url": "http://localhost:8820/example" }— http-server must be up"stdio"→ Cursor spawns Node (orwsl.exeon Windows) — no shared HTTP process needed
Optional: personas server
Markdown prompt packs with hot reload. Tools:
Tool | Purpose |
| Merge layers into one system prompt (see order below) |
| List loaded prompts by category |
Also exposes MCP prompts (list / get) for clients that use that capability.
Compose merge order (each layer optional except when base is left on):
base(personas/base) — omitted ifbase: falseteam— repo/org policy cardpersona— roleskill— modescript— playbook
Sections are joined with ---. Template args apply to every included layer.
Enable on the HTTP front door:
cp env.example .env # then set WMCP_ENABLE_PERSONAS=1
# PERSONAS_DIR=/absolute/path/to/prompts # optional; default ./prompts
npm start
# → http://localhost:8820/personasCursor URL entry:
{
"mcpServers": {
"personas": {
"url": "http://localhost:8820/personas"
}
}
}Or run stdio directly (no WMCP_ENABLE_PERSONAS required):
npm run start:personas
# or: node dist/stdio-bridge.js personasSample prompts ship under prompts/ (personas/, skills/, scripts/, teams/). Replace them with your own — edits hot-reload; no restart needed.
Frontmatter shape:
---
name: engineer
description: Short description for list_prompts
category: persona
args:
- name: stack
description: Primary tech stack
required: false
---
# Role: Engineer
{{stack}}Primary stack: {{stack}}.{{/stack}}Template syntax: {{var}}, {{var|default}}, and {{var}}…{{/var}} (block omitted when unset).
Adding your own MCP server
Create
src/my-server.ts— construct an MCPServer, register tools, exposegetServer().Register a factory in
src/registry.ts.Add a
servers.myentry inconfig/mcp-servers.jsonwith"script": "my-server.js".npm run build && npm run sync:mcp(and restarthttp-serverif using URL mode).
The HTTP and stdio layers stay unchanged. They only need a name → () => Server factory.
Layout
src/
example-server.ts # reference MCP tools (echo, ping)
personas-server.ts # optional compose / list_prompts
registry.ts # name → factory map (+ env toggles)
http-server.ts # Streamable HTTP + legacy SSE multiplexer
stdio-bridge.ts # named stdio launcher
env-flags.ts
is-main-module.ts
prompts/ # sample prompt pack (swap for yours)
config/
mcp-servers.example.json
scripts/
sync-mcp-config.mjs
fix-permissions.mjs
systemd/
wmcp.serviceEnvironment
Variable | Default | Purpose |
|
| HTTP listen port |
|
| SSE keep-alive comment interval ( |
| off | Register |
|
| Markdown prompt root ( |
See env.example. Load via .env in the project root (dotenv) or export in the shell / systemd unit.
systemd (optional)
# edit User / paths in systemd/wmcp.service first
mkdir -p ~/.config/systemd/user
cp systemd/wmcp.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now wmcp
systemctl --user status wmcpTo enable personas under systemd, set WMCP_ENABLE_PERSONAS=1 in .env (or Environment= in the unit).
Design notes
One HTTP process, many logical servers — routes by path prefix; each request gets a fresh MCP
Serverinstance for Streamable HTTP (stateless).Fail per server at boot — a broken factory is skipped; others still serve.
Personas are optional — off by default so the public repo stays a transport template; flip the env when you want compose/list_prompts on HTTP. Direct
npm run start:personasalways works.Private prompt packs stay private — point
PERSONAS_DIRat an external directory, or replaceprompts/locally and don't commit company content.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
A Model Context Protocol server for Wix AI tools
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that supports STDIO, SSE and Streamable HTTP protocols for AI model interactions.7 npm1MIT
- FlicenseNot gradedqualityNot gradedmaintenanceA simple demonstration server for the Model Context Protocol that provides tools for creating and managing greetings with support for multiple transport methods (stdio, HTTP, SSE).-
- AlicenseNot gradedqualityFmaintenanceA robust server implementing the Model Context Protocol with SSE and STDIO transport, enabling real-time communication and extensible tooling for AI models.205 npm4MIT
- AlicenseNot gradedqualityDmaintenanceA minimal, general-purpose implementation of the Model Context Protocol (MCP) for Node.js and Bare runtime, enabling creation of AI-interactive servers with tools, resources, and multiple transport options.6 npm2MIT