Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
stdio bridge for the SPOC MCP server — for Claude Desktop, Cursor, Zed
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
SPOC_BEARER, SPOC_ENDPOINT, SPOC_EVENTS_ENDPOINT, SPOC_TIMEOUT_MS, SPOC_DISABLE_SSE, SPOC_DEBUGValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"bridge": {
"command": "npx",
"args": [
"-y",
"@spocapp/mcp-bridge"
],
"env": {
"SPOC_BEARER": "your-value",
"SPOC_ENDPOINT": "your-value",
"SPOC_EVENTS_ENDPOINT": "your-value",
"SPOC_TIMEOUT_MS": "your-value",
"SPOC_DISABLE_SSE": "your-value",
"SPOC_DEBUG": "your-value"
}
}
}
}Run this in your terminal
claude mcp add bridge --env SPOC_BEARER=your-value --env SPOC_ENDPOINT=your-value --env SPOC_EVENTS_ENDPOINT=your-value --env SPOC_TIMEOUT_MS=your-value --env SPOC_DISABLE_SSE=your-value --env SPOC_DEBUG=your-value -- npx -y @spocapp/mcp-bridgeFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"bridge": {
"command": "npx",
"args": [
"-y",
"@spocapp/mcp-bridge"
],
"env": {
"SPOC_BEARER": "your-value",
"SPOC_ENDPOINT": "your-value",
"SPOC_EVENTS_ENDPOINT": "your-value",
"SPOC_TIMEOUT_MS": "your-value",
"SPOC_DISABLE_SSE": "your-value",
"SPOC_DEBUG": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"bridge": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@spocapp/mcp-bridge"
],
"env": {
"SPOC_BEARER": "your-value",
"SPOC_ENDPOINT": "your-value",
"SPOC_EVENTS_ENDPOINT": "your-value",
"SPOC_TIMEOUT_MS": "your-value",
"SPOC_DISABLE_SSE": "your-value",
"SPOC_DEBUG": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
SPOC_ENDPOINT envSPOC_EVENTS_ENDPOINT envSPOC_TIMEOUT_MS envSPOC_DISABLE_SSE envSPOC_DEBUG envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account SPOC-App, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: SPOC_BEARER
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.3) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Agent Data Tools: Utilities
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
103 tools: JSON repair, CSV, hashes, cron, dates, units, validators. 25 free calls.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Small stdio bridge that lets Claude Desktop, Cursor, Zed, Windsurf and other stdio-only MCP clients talk to the SPOC MCP server at spoc.com/mcp/rpc.
@spocapp/mcp-bridgeio.github.SPOC-App/mcp-bridgehttps://spoc.com/mcp/rpc — reports itself as spoc / 1.27.0Most current MCP clients only speak the stdio transport — JSON-RPC over a subprocess's stdin/stdout. SPOC's MCP server speaks HTTP+SSE so it can serve many clients at once. This bridge is the shim between the two: install it, point your MCP client at it, and SPOC's tools appear in the client's tool picker.
It is not a rewrite of the MCP protocol, and it doesn't cache, batch, or reinterpret requests. Every JSON-RPC frame goes through unchanged. If you need behaviour that differs from what the bridge does today, it's usually easier to fix in SPOC itself than in the shim.
You don't need to install it — most MCP clients will fetch it on demand with npx:
npx -y @spocapp/mcp-bridge
Or install it once and point clients at the binary:
npm install -g @spocapp/mcp-bridge
which spoc-mcp-bridge
Edit the config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": { "spoc": { "command": "npx", "args": ["-y", "@spocapp/mcp-bridge"], "env": { "SPOC_BEARER": "spk_live_..." } } } }
Restart Claude Desktop. SPOC's tools should appear in the tool picker within a few seconds.
~/.cursor/mcp.json (or Settings → MCP → Edit mcp.json):
{
"mcpServers": { "spoc": { "command": "npx", "args": ["-y", "@spocapp/mcp-bridge"], "env": { "SPOC_BEARER": "spk_live_..." } } } }
~/.config/zed/settings.json:
{
"context_servers": { "spoc": { "command": { "path": "npx", "args": ["-y", "@spocapp/mcp-bridge"], "env": { "SPOC_BEARER": "spk_live_..." } } } } }
Any client that speaks the MCP stdio transport works the same way. Set the command to npx -y @spocapp/mcp-bridge and pass a bearer via environment.
| Variable | Default | Notes |
|---|---|---|
SPOC_BEARER | _(unset)_ | Token sent as Authorization: Bearer …. Omit for anonymous access. Required for tools that need a principal (e.g. spoc.harness.issue). |
SPOC_ENDPOINT | https://spoc.com/mcp/rpc | HTTP JSON-RPC endpoint. |
SPOC_EVENTS_ENDPOINT | https://spoc.com/mcp/events | SSE endpoint for server-initiated notifications. |
SPOC_TIMEOUT_MS | 30000 | HTTP request timeout in milliseconds. |
SPOC_DISABLE_SSE | _(unset)_ | Set to 1 to skip the SSE event stream. Notifications become unavailable; everything else still works. |
SPOC_DEBUG | _(unset)_ | Set to 1 to log to stderr. Useful when your MCP client swallows errors silently. |
Generate one at https://spoc.com/settings/api-keys. Make sure the `harness:issue` scope is checked or SPOC will reject calls that need to issue harnesses.
Anonymous access works for read-only tools that don't need a principal. Bearer is only required for tools that act on behalf of an identity.
Confirm the bridge and the upstream are both healthy:
npx -y @spocapp/mcp-bridge <<< '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}'
You should get a single JSON line back that includes "name":"spoc" and "version":"1.27.0". If you see that, MCP-aware clients will work.
Tools don't appear in the client after restart. Run the smoke test above in a plain terminal. If it returns an error frame, the error.data field will tell you why. If it returns nothing at all, check the client's log for a spawn error — the usual cause is npx not being on the client's PATH.
`ERR_INTERNAL` on tool calls. Almost always an upstream issue rather than a bridge issue. Set SPOC_DEBUG=1 and re-run — the bridge will log the raw upstream response.
401 errors. The bearer token is missing, wrong, or lacks scope. Verify at https://spoc.com/settings/api-keys.
SSE won't connect. Notifications are optional. Set SPOC_DISABLE_SSE=1 and everything except server-initiated notifications continues to work.
npm ci
npm run build npm test # unit + client-integration suites (offline, no network)
The client-integration suite spawns spoc-mcp-bridge as a real subprocess and drives it through the same stdio protocol that Claude Desktop, Cursor, Zed, and Windsurf use — initialize, notifications/initialized, tools/list, tools/call, concurrent in-flight calls, mixed-type ids, SSE notifications, upstream errors, and timeouts. If it passes, MCP clients that speak stdio will work.
To also exercise the real production endpoint:
SPOC_LIVE_TEST=1 npm test # anonymous only
SPOC_LIVE_TEST=1 SPOC_BEARER=spk_live_... npm test # + tools/call
CI runs the offline suite on Node 18 / 20 / 22 for every push and PR; the live suite runs on main only.
If you're implementing SPOC's report-event HMAC signing directly (rather than going through this bridge), one thing to watch out for: SPOC's canonical form matches JavaScript JSON.stringify behaviour, which leaves non-ASCII characters as themselves rather than escaping them to \uXXXX. Python's default json.dumps(...) escapes non-ASCII — you'll get a bad_signature 401 the first time you include an em-dash, curly quote, or accented character. Pass ensure_ascii=False.
https://spoc.com — the underlying servicehttps://spoc.com/mcp/manifest — the tool cataloguehttps://spoc.com/docs/api — the full HTTP APICHANGELOG.md — release history and what changed between versionsRELEASING.md — how to cut a new releaseMIT