Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Streamable HTTP MCP gateway for NV oOS fleets — one API key, namespaced tools, quotas and policy.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
Authorization비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
이 주소는 요청 header에 키가 필요한데, 커넥터 추가 메뉴에서는 넣을 수 없어요. 대신 Claude Code, Cursor, VS Code를 쓰세요.
터미널에서 이 명령어를 실행하세요
claude mcp add --transport http nvoos-gateway https://mcp.nvoos.pro/mcp --header 'Authorization: your-value'실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"nvoos-gateway": {
"url": "https://mcp.nvoos.pro/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"nvoos-gateway": {
"type": "http",
"url": "https://mcp.nvoos.pro/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 주소는 요청 header에 키가 필요한데, 커넥터 추가 메뉴에서는 넣을 수 없어요. 대신 Claude Code, Cursor, VS Code를 쓰세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
Authorization 비밀 필수 HTTP header이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
서버가 도구 목록을 보여 주기 전에 로그인을 요구해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 9일 점검
레지스트리 이름이 GitHub 계정 nvdigitalsolutions 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
149ms 만에 응답(HTTP 401)
OAuth 로그인을 지원한다고 밝혀서, AI 앱이 로그인 화면으로 안내해 줘요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 3개 중 3개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: Authorization
제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.3.1)은 4일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Bestax
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
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.
Props, examples, CSS variables and Agent Skills for bestax-bulma React components (Bulma v1)
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
A public, fleet-scoped Model Context Protocol endpoint for the NV oOS (Open Operator System) WordPress platform. One API key, every bound site — tools appear namespaced as . .
The gateway is an MCP aggregating proxy speaking streamable HTTP (MCP 2026-07-28): it authenticates callers with a public API key, forwards initialize / tools/list / tools/call to the bound NV oOS sites' native /wp-json/mcp-ai/v1/mcp endpoints using Fleet Operator tokens, and keeps the fleet surface collision-free by prefixing tool names per site.
Deployment target: Cloudways Velocity (managed Node hosting) at https://mcp.nvoos.pro. See docs/operations/deployment/mcp-gateway-velocity-setup.md.
One-way mirror: this addon is the canonical source and is synced to
the standalone repo
nvdigitalsolutions/nvoos-mcp-gateway(branchmain)
by
sync-mcp-gateway.yml, which snapshots the subtree as one commit per
sync and pushes without `--force` — the mirror main stays a linear
fast-forward line, so hosting platforms (Cloudways Velocity) auto-deploy
on every sync. Never commit to the standalone repo directly — the next
sync overwrites it.
| Route | Auth | Purpose |
|---|---|---|
GET /mcp | public | Streamable-HTTP discovery JSON |
POST /mcp | Bearer key | JSON-RPC 2.0 (initialize, ping, notifications, tools/list, tools/call, resources/*, prompts/*) |
GET /health | public | Minimal status + per-site health registry |
GET /health/full | Bearer key | Full view (host-only URLs, bindings) |
GET /admin/policy | Operator token | Effective policy + quota table (read-only) |
POST /admin/policy-sim | Operator token | Replay a candidate policy against recorded calls |
GET /admin/catalog | Operator token | Fleet catalog with per-site lifecycle states |
GET / | public | Human landing page (directory reviewers) |
| Variable | Required | Purpose |
|---|---|---|
GATEWAY_PUBLIC_KEYS | yes | Public keys → site slugs: key=slug-a,slug-b;key2=slug-c (or JSON object) |
GATEWAY_PUBLIC_KEYS_PREVIOUS | no | Rotation overlap — previous key map (warns once on use) |
PUBLIC_SITE_SLUGS | no | Privacy filter for the public /health endpoint: comma-separated slugs visible without auth (* or unset = all configured sites). /health/full always reports every site. |
NVOOS_SITE_ _URL | per site | Upstream MCP endpoint, full URL incl. /wp-json/mcp-ai/v1/mcp |
NVOOS_SITE_ _TOKEN | per site | Fleet Operator token (op_xxxx.SECRET); never logged or returned |
AUTH_MODE | no | strict (default) fails closed at boot when no keys are set |
UPSTREAM_TIMEOUT_MS | no | Per-site timeout for tools/list + notifications (default 20000) |
UPSTREAM_TOOL_TIMEOUT_MS | no | tools/call budget only — long-running tools get more room without slowing tools/list (default: UPSTREAM_TIMEOUT_MS) |
GATEWAY_OAUTH_ISSUER | no | OAuth 2.1 authorization server issuer (e.g. Auth0 tenant). Setting it turns the gateway into an RFC 9728 protected resource — see the OAuth section below |
GATEWAY_OAUTH_JWKS_URI | no | JWKS override (default: issuer's /.well-known/jwks.json) |
GATEWAY_OAUTH_RESOURCE | no | RFC 8707 resource identifier / token audience (default https://mcp.nvoos.pro) |
TRUST_PROXY | yes on Velocity | 1 — NGINX sets X-Forwarded-For |
ALLOWED_ORIGINS | no | Comma-separated CORS origins for browser-based clients |
MAX_JSON_BODY | no | Body limit (default 1mb) |
RATE_LIMIT_GLOBAL / _MCP / _HEALTH | no | Per-group budgets (defaults 600/5min, 120/min, 60/min) |
TOOL_QUOTAS | no | Per-tool quotas, compact form: : / : — e.g. delete_post:5/1h:2,woo_*:60/1m:*. Most-specific pattern wins. (Proposal 094) |
GATEWAY_POLICY | no | Policy ruleset (JSON string) — see the policy reference below. (Proposal 094) |
POLICY_FILE | no | Alternative: path to a JSON policy file (Git-versioned policy, read at boot). |
SHADOW_POLICY | no | Shadow ruleset (JSON string) — evaluated and logged, never enforced. |
GEO_MAP | no | JSON object mapping public key ids to ISO country codes (used when not behind a trusted proxy). |
GATEWAY_ADMIN_TOKEN | no | Operator token enabling the /admin/* surface (inert without it). |
AUDIT_SINK_URL / AUDIT_SINK_SECRET | no | HMAC-signed webhook for governance events (deny, quota_exceeded, call_ok…). Must be set together. |
SITE_LIFECYCLE | no | Per-site catalog states: slug-a:draft,slug-b:published (default published). |
Slug → env suffix mapping: site-a → NVOOS_SITE_SITE_A_* (uppercase, hyphens → underscores).
GATEWAY_PUBLIC_KEYS=demo-public-key-1234567890=demo-site
NVOOS_SITE_DEMO_SITE_URL=https://demo.example.com/wp-json/mcp-ai/v1/mcp NVOOS_SITE_DEMO_SITE_TOKEN=op_xxxx.SECRET AUTH_MODE=strict TRUST_PROXY=1
Per-tool quotas and declarative policy ride on top of the group budgets. Sites remain the deep enforcement layer (per-tool RPM, token budgets, iteration caps, capability boundaries, nefarious-usage auto-shutdown) — the gateway adds the fleet layer and can only tighten, never weaken.
TOOL_QUOTAS=delete_post:5/1h:2,woo_*:60/1m:*,*:600/5m:*
Breaches return HTTP 429 + RFC 9558 headers (RateLimit-Limit/Remaining/Reset, RateLimit-Policy) with the JSON-RPC error -32099. Buckets are scoped (key × site × tool) — one noisy key cannot exhaust another's budget.
{
"rules": [ { "id": "no-night-deletes", "effect": "deny", "tool": { "match": "delete_*" }, "time": { "window": { "tz": "Europe/London", "days": [1,2,3,4,5], "start": "09:00", "end": "17:00" } } } ] }
First match wins. Effects: deny (403 + -32001), require_approval (428 + -32002 with a redacted preview). Conditions: tool.match (glob), site, key, time.window (IANA tz, ISO weekdays 1–7, midnight-crossing windows), geo.country (ISO alpha-2). Denied tools are filtered out of tools/list entirely (kept out of model context).
dryRun: true on tools/call evaluates policy + quotas withoutexecuting or consuming — the result carries would_execute, policy, and quota.
POST /admin/policy-sim replays a candidate policy against the last 200recorded calls (argument keys only) and diffs it against the live policy.
SHADOW_POLICY evaluates in parallel and logs — never enforces.tools/list merges every site bound to the key and prefixes names: site-a.create_post, site-b.woo_get_products.tools/call accepts the prefixed name (always) or a bare name when the key is bound to exactly one site (passthrough mode)._meta.gateway.errors entry instead of failing the whole call.resources/* and prompts/* use the first bound site.initialize echoes the highest protocol version both sides support (2026-07-28 → 2024-11-05), defaulting to 2024-11-05 when the client sends no version — strict clients (Zed, Claude Desktop) abort with "Unsupported protocol version" when the server hardcodes a version they do not speak.WWW-Authenticate.The addon ships a Claude Code plugin (.claude-plugin/plugin.json, commands/connect.md, skills/gateway/) that syncs to the mirror repo and doubles as the marketplace source:
/plugin marketplace add nvdigitalsolutions/nvoos-mcp-gateway
Enabling the plugin prompts for the gateway API key (stored securely as a sensitive userConfig option) and substitutes it into the MCP server's Authorization header.
With GATEWAY_OAUTH_ISSUER set, the gateway acts as an RFC 9728 protected resource alongside static keys:
GET /.well-known/oauth-protected-resource (+ the /mcp path-insertion variant) serves the protected-resource metadata document (inert 404 when OAuth is unconfigured).WWW-Authenticate: Bearer resource_metadata="…", scope="…" so MCP clients can run the OAuth 2.1 authorization-code + PKCE flow against the configured authorization server.iss, aud (RFC 8707 resource binding), exp/nbf, and scope.site: scope grants access to that bound site (the read-only site:read scope is advertised for future fine-grained enforcement). Tokens granting no configured site get 403 insufficient_scope.Authorization server: any OAuth 2.1 AS with RFC 8414 metadata + JWKS (Auth0 is the platform convention). Dynamic client registration (RFC 7591) belongs to the AS, not the gateway.
npm install
npm test # node:test suites — fake upstreams, no infrastructure npm run dev # node --watch src/index.js
Local smoke test against the docker compose dev site:
GATEWAY_PUBLIC_KEYS="dev-key-1234567890abcd=docker" \
NVOOS_SITE_DOCKER_URL="http://localhost:8000/wp-json/mcp-ai/v1/mcp" \ NVOOS_SITE_DOCKER_TOKEN=" " \ PORT=8899 npm start
The public endpoint https://mcp.nvoos.pro/mcp is listed in the official MCP Registry (registry.modelcontextprotocol.io) as io.github.nvdigitalsolutions/nvoos-mcp-gateway — a streamable-HTTP remote with a required Authorization header. The registry metadata lives in server.json and is published with the mcp-publisher CLI. Community directories (mcpservers.org, mcp.directory, PulseMCP, Glama) carry entries that point back here; the GET / landing page is the directory-reviewer surface.
GPL-3.0-or-later — see the repository LICENSE.