Windows Scoped Remote MCP Server
by moosin76
README.md
# ๐ก๏ธ Windows Scoped Remote MCP Server
Windows ํ๊ฒฝ์์ ๋์ํ๋ **๋ณด์ ๊ฒฉ๋ฆฌํ ์๊ฒฉ ๊ฐ๋ฐ MCP(Model Context Protocol) ์๋ฒ**์
๋๋ค.
ChatGPT, Claude ๋ฑ MCP๋ฅผ ์ง์ํ๋ LLM ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐํ์ฌ ์ค์ Windows ๊ฐ๋ฐ ํ๊ฒฝ์ ํ์ผ, ํฐ๋ฏธ๋, ํ๋ก์ธ์ค, ๋ธ๋ผ์ฐ์ , ์ฌ๋ฌ Workspace๋ฅผ ๋ํํ์ผ๋ก ๋ค๋ฃฐ ์ ์์ต๋๋ค.
๋ํ Godot, Blender ๋ฑ ๋ณ๋์ Remote MCP๋ฅผ **Provider**๋ก ์ฐ๊ฒฐํ ์ ์์ด ํ๋์ Gateway์์ ๋ค์ํ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
### โค๏ธ ํ๋ก์ ํธ ํ์
WSR์ด ์ ์ฉํ๋ค๋ฉด GitHub Sponsors๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
**[๐ GitHub Sponsors๋ก ํ์ํ๊ธฐ](https://github.com/sponsors/moosin76)**
ํ์์ WSR์ ์ ์ง๋ณด์์ ์๋ก์ด MCP Provider ๋ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
---
## ์ฃผ์ ํน์ง
- **Windows SandboxGuard** โ ์ค์ ํ Workspace ๊ฒฝ๊ณ ์์์ ํ์ผ๊ณผ ๋ช
๋ น ์คํ์ ์ ํํฉ๋๋ค.
- **Multi-Workspace** โ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋ฑ๋กํ๊ณ ํ์ฑ Workspace๋ฅผ ์ ํํ ์ ์์ผ๋ฉฐ, ChatGPT/MCP ์ธ์
๋ณ๋ก ํ์ฑ Workspace ์ํ๊ฐ ๋
๋ฆฝ๋ฉ๋๋ค.
- **ํ์ผ/์ฝ๋ ๊ด๋ฆฌ** โ ์กฐํ, ์์ฑ, ์์ , ์ด๋, ๋ณต์ฌ, ์ญ์ , patch ์ ์ฉ ๋ฑ์ ์ง์ํฉ๋๋ค.
- **PowerShell / CMD / ํ๋ก์ธ์ค ๊ด๋ฆฌ** โ ๊ฐ๋ฐ ๋ช
๋ น ์คํ๊ณผ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- **Playwright ๋ธ๋ผ์ฐ์ ์๋ํ** โ ์ค์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ ํ์, ์
๋ ฅ, ํด๋ฆญ, ์คํฌ๋ฆฐ์ท ๋ฑ์ ์ํํฉ๋๋ค.
- **Remote MCP Provider** โ Godot, Blender ๋ฑ ์ํ๋ MCP๋ฅผ Gateway์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- **Provider ์ฅ์ ๊ฒฉ๋ฆฌ** โ ํ๋์ MCP๊ฐ ๊บผ์ ธ ์์ด๋ WSR Core์ ๋ค๋ฅธ Provider๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- **Provider Scheduler** โ MCP์ ์ฐ๊ฒฐ ์ํ์ `tools/list`๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๊ณ ์๋ ์ฌ์ฐ๊ฒฐ ๋ฐ Tool Registry ๊ฐฑ์ ์ ์ํํฉ๋๋ค.
- **Provider Tool ๋ณ๊ฒฝ ์๋ฆผ** โ Remote MCP์ Tool ๋ชฉ๋ก์ด ๋ฐ๋๋ฉด ์ง์ํ๋ modern MCP ํด๋ผ์ด์ธํธ์ `tools/list_changed` ์๋ฆผ์ ์ ๋ฌํฉ๋๋ค.
- **Project Handoff / Resume** โ `workspace_context`์ `workspace_resume`์ผ๋ก Git, AGENTS, Roadmap, Session ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ AI/์ธ์
์์ ์์
์ํ๋ฅผ ์ด์ด๋ฐ์ ์ ์์ต๋๋ค.
- **WSR ์ด์ ์ง๋จ** โ `wsr_status` ํ๋๋ก WSR, Workspace, Provider, Browser, cloudflared ๋ฐ ์ธ์ฆ ์ค์ ์ํ๋ฅผ ๋น๋ฐ๊ฐ ์์ด ํ์ธํ ์ ์์ต๋๋ค.
- **OAuth 2.1 / Cloudflare Tunnel ์ง์** โ ์๊ฒฉ MCP ํด๋ผ์ด์ธํธ์ ์์ ํ๊ฒ ์ฐ๊ฒฐํ ์ ์๋ ๊ตฌ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- **MCP 2026-07-28 + legacy ํธํ** โ `server/discover` ๊ธฐ๋ฐ ์ต์ stateless ์์ฒญ๊ณผ 2025 `initialize` ํ๋ฆ์ ๊ฐ์ `/mcp` endpoint์์ ์ง์ํฉ๋๋ค.
---
## ์ํคํ
์ฒ
```text
ChatGPT / Claude
โ
MCP / HTTPS
โ
Cloudflare Tunnel
โ
โผ
Windows Scoped Remote MCP Server
โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโ
โ โ โ
Workspace Playwright Providers
โ โ โ
Files / Process Browser tools โโโโโโผโโโโโโ
โ โ โ
Godot Blender ...
โ โ
godot_* blender_*
```
WSR ์์ฒด๋ Gateway ์ญํ ์ ํ๊ณ , ์ธ๋ถ MCP๋ `RemoteMcpProvider`๋ฅผ ํตํด ์ฐ๊ฒฐํฉ๋๋ค. Provider transport๋ Streamable HTTP, legacy SSE, local stdio๋ฅผ ์ง์ํฉ๋๋ค.
HTTP MCP ๊ณ์ธต์ ๊ณต์ TypeScript SDK v2์ `createMcpHandler`๋ฅผ ์ฌ์ฉํฉ๋๋ค. `2026-07-28` ํด๋ผ์ด์ธํธ์๋ `server/discover`์ ์์ฒญ๋ณ `_meta` envelope๋ฅผ ์ ๊ณตํ๊ณ , ๊ธฐ์กด ํด๋ผ์ด์ธํธ์๋ ๊ฐ์ tool ์ ์๋ก 2025-era stateless `initialize` fallback์ ์ ๊ณตํฉ๋๋ค.
```text
POST /mcp
โโ MCP 2026-07-28 โ server/discover / per-request envelope
โโ MCP 2025-era โ initialize / notifications/initialized
```
---
## Remote MCP Provider
์ฌ์ฉ์๋ง๋ค ํ์ํ MCP๊ฐ ๋ค๋ฅด๋ฏ๋ก WSR์ ํน์ MCP ํ๋์ ์ข
์๋์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด:
```text
WSR
โโโ Godot MCP
โโโ Blender MCP
โโโ Playwright
โโโ ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ MCP
```
๊ฐ Provider์๋ namespace๋ฅผ ์ฌ์ฉํฉ๋๋ค.
| MCP | Namespace ์์ |
| :--------- | :------------- |
| Godot | `godot_*` |
| Blender | `blender_*` |
| Browser | `browser_*` |
| ์๋ก์ด MCP | `<provider>_*` |
์๋ฅผ ๋ค์ด Blender MCP์ `get_scene`์ WSR์์ `blender_get_scene`์ผ๋ก ๋
ธ์ถ๋ฉ๋๋ค.
### MCP๋ฅผ ์ถ๊ฐํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ
ํ๋ก์ ํธ๋ฅผ ๋ฐ์ ํ ChatGPT์๊ฒ ๋ค์์ฒ๋ผ ์์ฒญํ ์ ์์ต๋๋ค.
```text
์ด windows-scoped-remote-mcp-server ํ๋ก์ ํธ์ Blender MCP๋ฅผ ์ถ๊ฐํด์ค.
AGENTS.md์ skills/add-remote-mcp-provider/SKILL.md๋ฅผ ๋จผ์ ์ฝ๊ณ
๊ธฐ์กด RemoteMcpProvider / ProviderRegistry ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ์์
ํด์ค.
Blender MCP์ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ํ์ํ ์ค์ ์ ํ์ธํ๊ณ
blender_* namespace๋ฅผ ์ฌ์ฉํด์ค.
ํ
์คํธ์ ๋ฌธ์๋ ์
๋ฐ์ดํธํ๊ณ typecheck์ ์ ์ฒด ํ
์คํธ๊น์ง ์คํํด์ค.
```
์์ธํ ์ ์ฐจ๋ `skills/add-remote-mcp-provider/SKILL.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
---
## Provider๊ฐ ๊บผ์ ธ ์์ด๋ WSR์ ๊ณ์ ์คํ๋ฉ๋๋ค
Remote MCP๋ ์ ํ์ ์์กด์ฑ์
๋๋ค.
```text
Godot MCP OFF
โ
โผ
Godot Provider = unavailable
โ
โโโ WSR Core โ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
โโโ Playwright โ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
โโโ ๋ค๋ฅธ Provider โ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
```
Provider ์ฐ๊ฒฐ ์คํจ ๋๋ฌธ์ WSR ์ ์ฒด๊ฐ ์ข
๋ฃ๋์ง ์์ต๋๋ค.
Provider-specific tool์ ํธ์ถํ์ ๋ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฉด ๋ช
ํํ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
```text
MCP provider 'godot' (godot) is not connected.
Start the godot MCP server/editor and try again.
```
ํ์ฌ ์ํ๋ `mcp_provider_status` tool๋ก ํ์ธํ ์ ์์ต๋๋ค.
---
## Provider Scheduler
WSR์ `ProviderScheduler`๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ์ฌ Remote MCP์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
```text
ProviderScheduler
โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โผ โผ
CONNECTED UNAVAILABLE
โ โ
tools/list reconnect
โ โ
๋ณ๊ฒฝ ์ฌ๋ถ ํ์ธ tools/list
โ โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โผ
Tool Registry ๊ฐฑ์
```
๊ธฐ๋ณธ๊ฐ:
- ์ฐ๊ฒฐ๋ Provider health check: **10์ด**
- ์ฐ๊ฒฐ๋์ง ์์ Provider retry: **5์ด**
ํ๊ฒฝ๋ณ์๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
```env
MCP_PROVIDER_HEALTH_INTERVAL_MS=10000
MCP_PROVIDER_RETRY_INTERVAL_MS=5000
```
### MCP๋ฅผ ์ผฐ๋ค ๊บผ๋ ์๋์ผ๋ก ๋ฐ๋ผ๊ฐ๋๋ค
```text
WSR ์คํ
โ
Godot OFF
โ
Provider unavailable
โ
Godot ์คํ
โ
Scheduler๊ฐ ์๋ ๋ฐ๊ฒฌ
โ
tools/list
โ
godot_* Tool Registry ๊ฐฑ์
```
๋ฐ๋ผ์ Provider๋ฅผ ์ผ๊ฑฐ๋ ๋ค์ ์คํํ๊ธฐ ์ํด WSR ์์ฒด๋ฅผ ์ฌ์์ํ ํ์๊ฐ ์์ต๋๋ค.
Remote MCP์ Tool ์ ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด `tools/list` ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ์ฌ Registry snapshot๋ ๊ฐฑ์ ํฉ๋๋ค.
Remote MCP์ Tool ์ ์๊ฐ ๋ฐ๋๋ฉด Registry snapshot์ ๊ฐฑ์ ํ ๋ค, ์ง์ํ๋ modern MCP ํด๋ผ์ด์ธํธ์๋ ํ์ค `tools/list_changed` ์๋ฆผ์ fan-outํฉ๋๋ค. ์๋ฆผ์ ์ง์ํ์ง ์๋ legacy ํด๋ผ์ด์ธํธ๋ ๋ค์ `tools/list` ์์ฒญ์์ ์ต์ Registry๋ฅผ ๋ฐ์ต๋๋ค. Provider์ ์คํ/์ข
๋ฃ๋ Tool ๋ชฉ๋ก ๋ณ๊ฒฝ ๋๋ฌธ์ WSR ์์ฒด๋ฅผ ๋ค์ ์์ํ ํ์๋ ์์ต๋๋ค.
---
## ํ๋ก์ ํธ ์์
์ธ๊ณ์ ์ฌ๊ฐ
WSR์ Codex, ChatGPT/WSR ๋ฑ ์๋ก ๋ค๋ฅธ AI ์์
ํ๊ฒฝ ์ฌ์ด์์ **๋ํ ๊ธฐ๋ก์ด ์๋๋ผ ์ ์ฅ์ ์์ฒด๋ฅผ ๊ณตํต ๊ธฐ์ค**์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๊ณตํต ๊ธฐ์ค์ Git ์ํ, `AGENTS.md`, Roadmap, TODO, Session/Handoff ๋ฌธ์์
๋๋ค.
`workspace_context`๋ ๋ฑ๋ก๋ Workspace๋ฅผ ์ ํํ์ง ์๊ณ ๋ค์ ์ ๋ณด๋ฅผ read-only๋ก ์์งํฉ๋๋ค.
- ํ์ฌ Git branch / HEAD / dirty ์ํ / ์ต๊ทผ commit
- `AGENTS.md` ๋๋ `AGENT.md`
- Roadmap
- ์ต๊ทผ Session/Handoff ๋ฌธ์
- TODO ๋ฌธ์
`workspace_resume`๋ ์ด ์ ๋ณด๋ฅผ ๋ค์ ํด์ํด ์์
์ฌ๊ฐ์ ํ์ํ ํํธ๋ฅผ ๊ตฌ์กฐํํฉ๋๋ค.
```text
workspace_context(workspace="ec")
workspace_resume(workspace="ec")
โ branch/session ๋ถ์ผ์น ๊ฒฝ๊ณ
โ dirty ๋ณ๊ฒฝ ์์ญ ์์ฝ
โ Roadmap์ ๋ค์ ์์
โ ์ต์ handoff ๊ธฐ์ค resume summary
```
๋ Tool ๋ชจ๋ ๋์ Workspace๋ฅผ ์ ํํ๊ฑฐ๋ ์์ ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ChatGPT์์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ํ๋ฅผ ํ์ธํ๋ฉด์ ํ์ฌ ํ์ฑ Workspace๋ฅผ ๊ทธ๋๋ก ์ ์งํ ์ ์์ต๋๋ค.
์์ธํ ๋์์ `docs/workspace-context.md`์ `docs/workspace-resume.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
---
## WSR ์ด์ ์ํ ์ง๋จ
`wsr_status`๋ ์ฌ๋ฌ ๊ฐ์ ์ง๋จ Tool์ ๋ฐ๋ก ํธ์ถํ์ง ์๊ณ WSR์ ํต์ฌ ์ด์ ์ํ๋ฅผ ํ ๋ฒ์ ํ์ธํ๋ read-only Tool์
๋๋ค.
์ฃผ์ ์ ๋ณด:
- WSR version / Git commit / uptime / Node version
- active Workspace์ ๋ฑ๋ก Workspace ์
- Provider ์ฐ๊ฒฐ ์ํ์ Tool ๊ฐ์
- Browser manager ์ด๊ธฐํ/ํ์ด์ง ์ํ
- cloudflared ์ค์น ๋ฐ ๋ฒ์
- public endpoint, OAuth, static auth, Tunnel token์ **์ค์ ์ฌ๋ถ**
- ์ด์์ ์ฃผ์๊ฐ ํ์ํ warning
์๋ต์๋ ์ค์ token/password/cookie/session ๊ฐ์ด๋ Provider raw error๋ฅผ ํฌํจํ์ง ์์ต๋๋ค. WSR ์์ ๋ก๊ทธ์ Tunnel ์ฐ๊ฒฐ ๋ก๊ทธ ์ญ์ Bearer token ์๋ฌธ์ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ `docs/wsr-status.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
---
## Multi-Workspace
์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ํ๋์ WSR์์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
```env
MCP_WORKSPACE_ROOTS=game:D:\Godot\MyGame,tools:D:\project\tools,reference:D:\project\reference
MCP_WORKSPACE_ROOT=D:\Godot\MyGame
```
ํ์ฌ ํ์ฑ Workspace๋ ๊ธฐ๋ณธ ์์
๋์์ผ๋ก ์ฌ์ฉํ๊ณ , ๋ค๋ฅธ ๋ฑ๋ก Workspace๋ ๊ต์ฐจ Workspace ๊ธฐ๋ฅ์ ํตํด ์ฝ๊ธฐ/๊ฒ์/๋ถ์/๋ณต์ฌ ์ค์ฌ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ฑ Workspace ์ํ๋ MCP ์ธ์
๋ณ๋ก ๋
๋ฆฝ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์๋ก ๋ค๋ฅธ ChatGPT ์ฑํ
์์ ๊ฐ๊ฐ `game`, `tools`์ฒ๋ผ ๋ค๋ฅธ Workspace๋ฅผ ์ ํํด๋ `switch_workspace` ์ํ๊ฐ ๋ค๋ฅธ ์ฑํ
์ผ๋ก ์ ํ๋์ง ์์ต๋๋ค. MCP 2025-era๋ `Mcp-Session-Id`, ChatGPT์ MCP 2026-07-28 ์ฐ๊ฒฐ์ `x-openai-session`์ ๊ธฐ์ค์ผ๋ก ์ธ์
์ ๊ตฌ๋ถํฉ๋๋ค.
Workspace ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ ํ์ผ ๋ฐ ๋ช
๋ น ์ ๊ทผ์ SandboxGuard๊ฐ ์ฐจ๋จํฉ๋๋ค. ์ธ๋ถ ๊ตฌํ์ `docs/session-scoped-workspaces.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
---
## Playwright
Playwright๊ฐ ํตํฉ๋์ด ์ค์ ๋ธ๋ผ์ฐ์ ๋ฅผ MCP๋ฅผ ํตํด ์กฐ์ํ ์ ์์ต๋๋ค.
```text
ChatGPT
โ
"๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง๋ฅผ ์ด๊ณ ๋ฒํผ์ ๋๋ฌ์ค"
โ
WSR
โ
Playwright
โ
์ค์ ๋ธ๋ผ์ฐ์
```
์ง์ ์:
- URL ์ด๋
- ์์ ํด๋ฆญ
- ์
๋ ฅ/ํผ ์์ฑ
- ํค๋ณด๋ ์
๋ ฅ
- ํ์ด์ง ๋ด์ฉ ์กฐํ
- JavaScript ํ๊ฐ
- ์คํฌ๋ฆฐ์ท
- ๋ธ๋ผ์ฐ์ ์ธ์
๊ด๋ฆฌ
---
## ์ค์น
```cmd
git clone <repository-url>
cd windows-scoped-remote-mcp-server
npm install
copy .env.example .env
npm run build
npm test
```
Windows์์๋ CMD/PowerShell์ฉ `start.bat`์ Git Bash์ฉ `start.sh`๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค.
```cmd
start.bat
```
```bash
./start.sh
# ๋๋
bash start.sh
```
๋ ์์ ์คํฌ๋ฆฝํธ๋ `bin\cloudflared.exe`๊ฐ ์์ผ๋ฉด ์ต์ Windows 64-bit ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ด๋ ค๋ฐ์ต๋๋ค. ๋ฐ์ด๋๋ฆฌ๊ฐ ์ค๋น๋ ๋ค์๋ ํ์ฌ ๋ฒ์ ์ ํ์ํ๊ณ `cloudflared update`๋ก ๊ณต์ ์
๋ฐ์ดํธ ์๋ฒ๋ฅผ ํ์ธํฉ๋๋ค. ์
๋ฐ์ดํธ ํ์ธ์ด ์คํจํด๋ ๊ธฐ์กด ๋ฐ์ด๋๋ฆฌ๋ก WSR ์์์ ๊ณ์ํฉ๋๋ค.
WSR์ Windows ๊ธฐ๋ณธ ์
ธ์ ์๋์ผ๋ก ์ ํ๋ฉ๋๋ค. Git Bash๊ฐ ์ค์น๋์ด ์์ผ๋ฉด PATH ๋ฑ๋ก ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ผ๋ฐ์ ์ธ Git for Windows ์ค์น ๊ฒฝ๋ก๊น์ง ํ์ํด Git Bash๋ฅผ ์ฐ์ ์ฌ์ฉํฉ๋๋ค. Git Bash๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด PowerShell 7(`pwsh`)์ ์ฌ์ฉํ๋ฉฐ, PowerShell 7๋ ์์ผ๋ฉด `winget`์ผ๋ก ์ค์น๋ฅผ ์๋ํฉ๋๋ค.
---
## ์ฃผ์ ํ๊ฒฝ๋ณ์
| ๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
| :-------------------------------- | :-------------------------- | :------------------------------------- |
| `MCP_PORT` | `12000` | WSR HTTP ์๋ฒ ํฌํธ |
| `MCP_WORKSPACE_ROOT` | ํ์ฌ ๊ฒฝ๋ก | ํ์ฑ Workspace |
| `MCP_WORKSPACE_ROOTS` | `MCP_WORKSPACE_ROOT` | Multi-Workspace ๋ชฉ๋ก |
| `MCP_AUTH_TOKEN` | ์์ | ์ธ์ฆ์ฉ ํ ํฐ |
| `MCP_PUBLIC_URL` | ์์ | ๊ณต๊ฐ MCP URL |
| `CLOUDFLARE_TUNNEL_TOKEN` | ์์ | Cloudflare Tunnel ํ ํฐ |
| `MCP_BROWSER_HEADLESS` | `false` | Playwright Headless ์ฌ๋ถ |
| `MCP_PROVIDER_HEALTH_INTERVAL_MS` | `10000` | ์ฐ๊ฒฐ๋ Provider ๊ฒ์ฌ ์ฃผ๊ธฐ(ms) |
| `MCP_PROVIDER_RETRY_INTERVAL_MS` | `5000` | ์ฐ๊ฒฐ๋์ง ์์ Provider ์ฌ์ฐ๊ฒฐ ์ฃผ๊ธฐ(ms) |
| `MCP_GODOT_ENABLED` | `false` | Godot MCP Provider ํ์ฑํ |
| `MCP_GODOT_URL` | `http://127.0.0.1:8000/mcp` | Godot MCP endpoint |
| `MCP_BLENDER_ENABLED` | `false` | Blender MCP Provider ํ์ฑํ |
| `MCP_BLENDER_COMMAND` | `uvx` | Blender MCP stdio ์คํ ๋ช
๋ น |
| `MCP_BLENDER_HOST` | `127.0.0.1` | Blender add-on socket host |
| `MCP_BLENDER_PORT` | `9876` | Blender add-on socket port |
| `MCP_WINDOWS_ENABLED` | `false` | Windows Computer Use Provider ํ์ฑํ |
| `MCP_WINDOWS_COMMAND` | `uvx` | Windows-MCP stdio ์คํ ๋ช
๋ น |
| `MCP_WINDOWS_TOOLS` | UI allowlist | WSR์ ๋
ธ์ถํ Windows-MCP ๋๊ตฌ ๋ชฉ๋ก |
๋ฏผ๊ฐํ ํ ํฐ๊ณผ ๋น๋ฐ๋ฒํธ๋ `.env`์๋ง ์ ์ฅํ๊ณ Git์ ์ปค๋ฐํ์ง ๋ง์ธ์.
---
## ๊ฐ๋ฐ
```cmd
npm run typecheck
npm test
npm run build
```
MCP SDK๋ v2 split package ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์๋ฒ ๋ฐ `createMcpHandler`: `@modelcontextprotocol/server`
- Node/Express adapter: `@modelcontextprotocol/node`
- Streamable HTTP Provider client: `@modelcontextprotocol/client`
- legacy SSE / stdio Provider compatibility client: `@modelcontextprotocol/sdk`
- ๊ธฐ์กด ๋ด์ฅ OAuth Authorization Server ํธํ ๊ณ์ธต: `@modelcontextprotocol/server-legacy/auth`
๋ง์ง๋ง ํญ๋ชฉ์ ๊ณต์ v1โv2 ๋ง์ด๊ทธ๋ ์ด์
๋ธ๋ฆฌ์ง์ด๋ฉฐ deprecated ์ํ์
๋๋ค. discovery ๋ณต๊ตฌ์ ๊ธฐ์กด OAuth ๋์ ๋ณด์กด์ ์ํด ์ ์งํ๋, ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ ์ฉ OAuth/IdP ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ถ๋ฆฌํด์ผ ํฉ๋๋ค.
์ MCP Provider๋ฅผ ์ถ๊ฐํ ๋๋ ๋ค์ ๋ฌธ์๋ฅผ ๋จผ์ ์ฝ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- `AGENTS.md` โ ํ๋ก์ ํธ ์์
๊ท์น
- `docs/mcp-gateway-architecture.md` โ Gateway / Provider ๊ตฌ์กฐ
- `docs/workspace-context.md` โ Workspace ์์
์ํ ์์ง
- `docs/workspace-resume.md` โ ์์
์ฌ๊ฐ ํํธ
- `docs/provider-tool-change-notifications.md` โ Provider Tool ๋ณ๊ฒฝ ์๋ฆผ
- `docs/wsr-status.md` โ WSR ์ด์ ์ง๋จ
- `skills/add-remote-mcp-provider/SKILL.md` โ MCP ์ถ๊ฐ ์ ์ฐจ
- `skills/test-mcp-provider/SKILL.md` โ Provider ํ
์คํธ
- `skills/debug-mcp-gateway/SKILL.md` โ MCP ๋ฌธ์ ํด๊ฒฐ
---
## ์ค์ ๊ฒ์ฆ ์ฌ๋ก
ํ์ฌ WSR์ Godot MCP์ ์ค์ ์ฐ๊ฒฐํ์ฌ ๋ค์ ์์
์ ๊ฒ์ฆํ์ต๋๋ค.
```text
ChatGPT
โ
WSR
โ
Godot MCP
โ
Godot Editor
โ
Scene ์์ฑ / ์์ / ์ ์ฅ
```
ํ
์คํธ Scene:
```text
res://mcp_test.tscn
McpTest (Node3D)
โโโ TestCube (MeshInstance3D)
โโโ Camera3D
โโโ DirectionalLight3D
```
์ด ํ๋ฆ์ WSR์ด ๋จ์ํ ํ์ผ MCP๊ฐ ์๋๋ผ ์ค์ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ฐ๊ฒฐํ๋ Gateway๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ํ์ ์ธ ํ
์คํธ ์ฌ๋ก์
๋๋ค.
---
## ๋ณด์ ์์น
WSR์ ๊ฐ๋ฐ ์๋ํ๋ฅผ ์ํด ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ๋ค์ ์์น์ ์ค์ํ๊ฒ ์ทจ๊ธํฉ๋๋ค.
- Workspace ์ธ๋ถ ์ ๊ทผ์ SandboxGuard๋ก ์ ํํฉ๋๋ค.
- ๋ค๋ฅธ Workspace๋ฅผ ์์ ํ์ง ์๋๋ก ๊ต์ฐจ Workspace ๊ถํ์ ๋ถ๋ฆฌํฉ๋๋ค.
- ์ธ์ฆ ํ ํฐ๊ณผ Cloudflare Tunnel ํ ํฐ์ ์์ค ์ฝ๋์ ์ ์ฅํ์ง ์์ผ๋ฉฐ, ์ด์ ๋ก๊ทธ์๋ Bearer token ์๋ฌธ์ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
- ๋ณด์ ๊ธฐ๋ฅ์ ์ ๋์ ์ธ ์์ ๋ณด์ฅ์ผ๋ก ํํํ์ง ์๊ณ ์ค์ ๋ ๊ฒฝ๊ณ์ ๊ถํ ๋ชจ๋ธ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
- ์๊ฒฉ MCP Provider ํ๋์ ์ฅ์ ๊ฐ ์ ์ฒด Gateway ์ฅ์ ๋ก ์ด์ด์ง์ง ์๋๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค.
---
## License
MIT License
## Blender MCP
WSR์ Blender MCP๋ฅผ local stdio Provider๋ก ์คํํฉ๋๋ค. Blender์ `9876` ํฌํธ๋ MCP HTTP endpoint๊ฐ ์๋๋ผ Blender add-on์ TCP socket์ด๋ฏ๋ก, WSR์ด `uvx blender-mcp` ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ณ ๊ทธ ํ๋ก์ธ์ค๊ฐ add-on socket์ ์ฐ๊ฒฐํ๋ ๊ตฌ์กฐ์
๋๋ค.
Blender add-on์ ์ต์ ์ํ๋ก ์ค์นํ ๋ค Blender์์ add-on์ ๋ค์ ํ์ฑํํ๊ฑฐ๋ Blender๋ฅผ ์ฌ์์ํ๊ณ **Start MCP Server**๋ฅผ ๋๋ฆ
๋๋ค.
```bash
uvx blender-mcp install-addon
```
๋ฃจํธ `.env` ์ค์ ์:
```env
MCP_BLENDER_ENABLED=true
MCP_BLENDER_COMMAND=uvx
MCP_BLENDER_HOST=127.0.0.1
MCP_BLENDER_PORT=9876
```
์ฐ๊ฒฐ๋ Blender ๋๊ตฌ๋ WSR์์ `blender_*` namespace๋ก ๋
ธ์ถ๋ฉ๋๋ค. ์ค์น, ๊ตฌ์กฐ, ์ง๋จ ์ ์ฐจ๋ `docs/blender-mcp-provider.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
---
## Windows Computer Use MCP
WSR์ CursorTouch/Windows-MCP๋ฅผ local stdio Provider๋ก ์คํํ ์ ์์ต๋๋ค. ๋ณ๋ ์์ค๋ฅผ `mcp-servers/`์ ๋ณต์ฌํ์ง ์๊ณ `uvx windows-mcp serve`๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ์ฒซ WSR ์์ ์ uv๊ฐ ํจํค์ง์ ์์กด์ฑ์ ๋ด๋ ค๋ฐ์ ์บ์ํ๊ณ ์ดํ WSR ์๋ช
๊ณผ ํจ๊ป ์คํ/์ข
๋ฃํฉ๋๋ค.
๊ธฐ๋ณธ allowlist๋ Windows ํ๋ฉด ๊ด์ฐฐ๊ณผ UI ์
๋ ฅ์ ํ์ํ ๋๊ตฌ๋ง ์ ์งํฉ๋๋ค. `App`, `PowerShell`, `FileSystem`, `Process`, `Notification`, `Registry`, `Scrape`๋ WSR ๊ธฐ์กด ๊ธฐ๋ฅ๊ณผ ๊ฒน์น๊ฑฐ๋ ๊ถํ ๋ฒ์๊ฐ ๋๊ฑฐ๋ ํ์ฌ ๋ชฉ์ ์ ๋ถํ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋
ธ์ถํ์ง ์์ต๋๋ค.
```env
MCP_WINDOWS_ENABLED=true
MCP_WINDOWS_COMMAND=uvx
MCP_WINDOWS_TOOLS=DisplayInventory,Snapshot,Screenshot,Click,Type,Scroll,Move,Shortcut,Wait,WaitFor,MultiSelect,MultiEdit,Clipboard
```
Provider ์คํ ํ๊ฒฝ์์๋ Python UTF-8 ๋ชจ๋๋ฅผ ๊ฐ์ ํ๊ณ Windows-MCP ์ต๋ช
telemetry๋ฅผ ๋๋ฉฐ screenshot flash overlay๋ ๋นํ์ฑํํฉ๋๋ค. ์ฐ๊ฒฐ๋ ๋๊ตฌ๋ `windows_*` namespace๋ก ๋
ธ์ถ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ `docs/windows-computer-use-provider.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
---
## PostgreSQL MCP (CrystalDBA)
WSR์ Remote MCP Provider๋ณ๋ก transport๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ํ์ฌ ๊ฒ์ฆ๋ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| Provider | Endpoint | Transport | Tools |
| --- | --- | --- | ---: |
| Godot | `http://127.0.0.1:8000/mcp` | Streamable HTTP | 45 |
| Blender (ahujasid/blender-mcp) | `uvx blender-mcp` โ add-on socket `127.0.0.1:9876` | stdio | 28 |
| Windows (CursorTouch/Windows-MCP) | `uvx windows-mcp serve` | stdio | 13 (๊ธฐ๋ณธ allowlist) |
| PostgreSQL (CrystalDBA postgres-mcp) | `http://127.0.0.1:10021/sse` | legacy SSE | 9 |
PostgreSQL Provider๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ฃจํธ `.env`์ ๋ค์ ๊ฐ์ ์ค์ ํฉ๋๋ค.
```env
MCP_POSTGRESQL_ENABLED=true
MCP_POSTGRESQL_URL=http://127.0.0.1:10021/sse
```
Docker ์คํ ํ๊ฒฝ์ `mcp-servers/postgres-mcp/`์ ์์ผ๋ฉฐ ์ค์ `DATABASE_URI`๋ ํด๋น ๋๋ ํฐ๋ฆฌ์ `.env`์๋ง ๋ก๋๋ค. DB ๋น๋ฐ๋ฒํธ๋ ์ค์ ์ฐ๊ฒฐ ๋ฌธ์์ด์ Git์ ์ปค๋ฐํ์ง ์์ต๋๋ค.
PostgreSQL MCP๊ฐ ์ ๊ณตํ๋ 9๊ฐ ๋๊ตฌ๋ WSR namespace ์ ์ฉ ํ `postgresql_*` ํํ๋ก ๋
ธ์ถ๋ฉ๋๋ค. ์ค์ ์ฐ๊ฒฐ์์๋ `list_schemas`, `list_objects`, `get_object_details`, `explain_query`, `analyze_workload_indexes`, `analyze_query_indexes`, `analyze_db_health`, `get_top_queries`, `execute_sql`์ ํ์ธํ์ต๋๋ค.
์์ธํ ์ค์น/์ด์ ๋ฐฉ๋ฒ์ `docs/postgresql-mcp-provider.md`์ `mcp-servers/postgres-mcp/README.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues