Skip to main content
Glama
moosin76

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`๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Maintenance

ActivityMaintained
ResponsivenessNo issues