@luutuankiet/mcp-proxy-shim 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @luutuankiet/mcp-proxy-shim
2
2
 
3
- **MCP shim for [mcpproxy-go](https://github.com/smart-mcp-proxy/mcpproxy-go)** — eliminates `args_json` string escaping overhead for LLM clients. Supports **stdio** and **HTTP Streamable** transports.
3
+ **MCP shim for [mcpproxy-go](https://github.com/smart-mcp-proxy/mcpproxy-go)** — eliminates `args_json` string escaping overhead for LLM clients. Supports **stdio**, **HTTP Streamable**, **daemon**, and **passthru** modes.
4
4
 
5
5
  ## The Problem
6
6
 
@@ -197,137 +197,144 @@ Each downstream client gets its own MCP session, but all sessions **share a sing
197
197
  | `/mcp` | DELETE | `?apikey=` | Session termination |
198
198
  | `/health` | GET | None | Health check (session count, uptime) |
199
199
 
200
- ### Option C: Daemon Mode (multi-server MCP gateway)
200
+ ### Option C: Daemon Mode (REST + MCP gateway for cloud agents)
201
201
 
202
- Run a standalone gateway that connects to **multiple** MCP servers (stdio or HTTP) and exposes all their tools through a single HTTP endpoint. Pure passthrough — no schema transformation.
202
+ Run as a REST gateway that connects to a **single mcpproxy-go upstream** and exposes both REST endpoints (for curl-based subagents) and a Streamable HTTP `/mcp` endpoint (for MCP clients).
203
203
 
204
- **Use case:** Cloud agents (claude.ai/code, Codespaces, etc.) that can't spawn MCP servers on the fly.
204
+ **Use case:** Cloud agents (claude.ai/code, Codespaces, etc.) that can't spawn MCP servers on the fly, but can `curl`.
205
205
 
206
206
  ```
207
- Cloud Agent ──HTTP──▶ daemon (:3456) ──┬── stdio ──▶ github MCP
208
- ├── stdio ──▶ filesystem MCP
209
- └── HTTP ──▶ remote API (with auth headers)
207
+ Cloud Agent ──curl──> daemon (:3456) ──HTTP──> mcpproxy-go (upstream)
208
+ <── clean JSON <──────────<── MCP response
210
209
  ```
211
210
 
212
- #### Inline config
213
-
214
211
  ```bash
215
- MCP_SERVERS='{
216
- "github": {
217
- "type": "stdio",
218
- "command": "npx",
219
- "args": ["-y", "@modelcontextprotocol/server-github"],
220
- "env": { "GITHUB_TOKEN": "ghp_..." }
221
- },
222
- "my-api": {
223
- "type": "streamableHttp",
224
- "url": "https://api.example.com/mcp",
225
- "headers": { "Authorization": "Bearer xxx", "X-Org-Id": "org_123" }
226
- }
227
- }' npx @luutuankiet/mcp-proxy-shim daemon
212
+ MCP_URL="https://your-proxy/mcp/?apikey=KEY" npx @luutuankiet/mcp-proxy-shim daemon
228
213
  ```
229
214
 
230
- #### Config file
215
+ #### Daemon REST endpoints
231
216
 
232
- ```bash
233
- MCP_CONFIG=./mcp-servers.json npx @luutuankiet/mcp-proxy-shim daemon
234
- ```
217
+ | Endpoint | Method | Description |
218
+ |----------|--------|-------------|
219
+ | `/health` | GET | Health check + session info |
220
+ | `/retrieve_tools` | POST | BM25 tool search `{ query }` |
221
+ | `/describe_tools` | POST | Batch-hydrate full schemas `{ names: [...] }` |
222
+ | `/call` | POST | Execute tool `{ method, name, args }` |
223
+ | `/exec` | POST | Run code on upstream `{ code }` |
224
+ | `/reinit` | POST | Force new upstream session |
225
+ | `/mcp` | POST/GET/DELETE | Streamable HTTP MCP (backward compat) |
226
+
227
+ #### Daemon environment variables
228
+
229
+ | Variable | Default | Description |
230
+ |----------|---------|-------------|
231
+ | `MCP_URL` | **(required)** | mcpproxy-go StreamableHTTP endpoint |
232
+ | `MCP_PORT` | `3456` | Port to listen on |
233
+ | `MCP_HOST` | `0.0.0.0` | Host to bind to |
234
+ | `MCP_APIKEY` | — (open) | Require `?apikey=KEY` on requests |
235
235
 
236
- The config file supports three formats:
237
- - Flat: `{ "server-name": { "type": "stdio", ... } }`
238
- - Wrapped: `{ "servers": { "server-name": { ... } } }`
239
- - `.mcp.json` format: `{ "mcpServers": { "server-name": { ... } } }`
236
+ ### Option D: Passthru Mode (generic MCP→REST bridge)
240
237
 
241
- #### How clients use it
238
+ Connect to **any MCP server** (not just mcpproxy-go) and expose its tools as clean REST endpoints. Designed for MCP server development and testing — lets LLM agents consume any MCP server via simple `curl`.
242
239
 
243
- All upstream tools are **namespaced** with the server name as prefix:
240
+ **Use case:** You're building an MCP server and want Claude (or any LLM agent) to test it mid-session without restarting.
244
241
 
245
242
  ```
246
- github__get_file_contents ← from the "github" server
247
- my-api__query ← from the "my-api" server
243
+ Agent ──curl──> passthru (:3456) ──stdio/HTTP──> your MCP server
244
+ <── clean JSON <── MCP response (unwrapped)
248
245
  ```
249
246
 
250
- A built-in `daemon_help` tool provides a full usage guide:
247
+ #### Stdio (spawn and manage the server process)
251
248
 
252
- ```json
253
- { "name": "daemon_help", "arguments": {} }
249
+ ```bash
250
+ npx @luutuankiet/mcp-proxy-shim passthru -- npx tsx src/index.ts
251
+
252
+ # With extra env vars
253
+ npx @luutuankiet/mcp-proxy-shim passthru --env API_KEY=xxx -- python server.py
254
+
255
+ # With working directory
256
+ npx @luutuankiet/mcp-proxy-shim passthru --cwd ./my-server -- npm start
254
257
  ```
255
258
 
256
- Returns connected servers, all tools with namespaced names, and calling examples. You can also filter to a specific server for full schemas:
259
+ #### HTTP Streamable (connect to running server)
257
260
 
258
- ```json
259
- { "name": "daemon_help", "arguments": { "server": "github" } }
261
+ ```bash
262
+ npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/mcp
263
+
264
+ # With auth headers
265
+ npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/mcp --header "Authorization: Bearer xxx"
260
266
  ```
261
267
 
262
- The daemon also returns `instructions` in the MCP `initialize` response, so MCP clients that support server instructions will automatically know how to use it.
268
+ #### SSE (legacy transport)
263
269
 
264
- #### Server config reference
270
+ ```bash
271
+ npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/sse --transport sse
272
+ ```
273
+
274
+ #### Config file
265
275
 
266
- **Stdio servers** (spawn a local process):
276
+ ```bash
277
+ npx @luutuankiet/mcp-proxy-shim passthru --config server.json
278
+ ```
267
279
 
280
+ Config file formats:
268
281
  ```json
269
- {
270
- "type": "stdio",
271
- "command": "npx",
272
- "args": ["-y", "@modelcontextprotocol/server-github"],
273
- "env": { "GITHUB_TOKEN": "ghp_..." },
274
- "cwd": "/optional/working/directory"
275
- }
282
+ // Stdio
283
+ {"type": "stdio", "command": "npx", "args": ["tsx", "src/index.ts"], "env": {"API_KEY": "xxx"}}
284
+
285
+ // HTTP Streamable
286
+ {"type": "streamableHttp", "url": "http://localhost:3000/mcp", "headers": {"Authorization": "Bearer xxx"}}
287
+
288
+ // SSE
289
+ {"type": "sse", "url": "http://localhost:3000/sse", "headers": {}}
276
290
  ```
277
291
 
278
- **HTTP Streamable servers** (connect to remote MCP):
292
+ #### Passthru REST endpoints
293
+
294
+ | Endpoint | Method | Description | Example |
295
+ |----------|--------|-------------|----------|
296
+ | `/health` | GET | Server status + transport info | `curl localhost:3456/health` |
297
+ | `/tools` | GET | Dehydrated tool list (name, description snippet, param summary) | `curl localhost:3456/tools` |
298
+ | `/tools?q=keyword` | GET | Search tools by name/description | `curl "localhost:3456/tools?q=read"` |
299
+ | `/tools/:name` | GET | Full tool schema with `inputSchema` | `curl localhost:3456/tools/read_files` |
300
+ | `/call/:name` | POST | Invoke a tool with native JSON args | `curl -X POST localhost:3456/call/read_files -d '{"args": {"files": [...]}}'` |
301
+ | `/restart` | POST | Restart upstream MCP connection | `curl -X POST localhost:3456/restart` |
302
+
303
+ #### Dehydrated tool listing
304
+
305
+ The `/tools` endpoint returns token-efficient tool summaries:
279
306
 
280
307
  ```json
281
308
  {
282
- "type": "streamableHttp",
283
- "url": "https://api.example.com/mcp",
284
- "headers": {
285
- "Authorization": "Bearer your-token",
286
- "X-Custom-Header": "value"
287
- }
309
+ "tools": [
310
+ {
311
+ "name": "read_files",
312
+ "description": "Read the contents of multiple files simultaneously...",
313
+ "params": "files: object[]* | compact: boolean"
314
+ }
315
+ ],
316
+ "count": 10,
317
+ "hint": "GET /tools/{name} for full inputSchema"
288
318
  }
289
319
  ```
290
320
 
291
- The `headers` field supports any custom HTTP headers useful for authentication, org routing, or API versioning.
321
+ Params use `name: type` format with `*` for required fields. Use `/tools/:name` to get the full `inputSchema` when needed.
292
322
 
293
- #### Daemon environment variables
323
+ #### Token economics: passthru vs mcpproxy-go path
324
+
325
+ | Metric | Via mcpproxy-go daemon | Via passthru | Savings |
326
+ |--------|----------------------|--------------|--------|
327
+ | Round-trips to test one tool | 3 (retrieve + describe + call) | 1-2 (optional list + call) | **50-66%** |
328
+ | Request tokens per call | ~300 | ~50 | **83%** |
329
+ | Tool name length | `server_at_slash_path__tool_name` | `tool_name` (native) | **~85% shorter** |
330
+ | Response unwrapping | Automatic | Automatic | Same |
331
+
332
+ #### Passthru environment variables
294
333
 
295
334
  | Variable | Default | Description |
296
335
  |----------|---------|-------------|
297
- | `MCP_SERVERS` | — | JSON string with server configs (inline) |
298
- | `MCP_CONFIG` | — | Path to JSON config file (alternative to MCP_SERVERS) |
299
336
  | `MCP_PORT` | `3456` | Port to listen on |
300
337
  | `MCP_HOST` | `0.0.0.0` | Host to bind to |
301
- | `MCP_APIKEY` | — (open) | Require `?apikey=KEY` on `/mcp` requests |
302
- | `https_proxy` | — | HTTPS proxy for HTTP upstream connections |
303
-
304
- #### Daemon endpoints
305
-
306
- | Endpoint | Method | Description |
307
- |----------|--------|-------------|
308
- | `/mcp` | POST | MCP JSON-RPC (initialize, tools/list, tools/call) |
309
- | `/mcp` | GET | SSE stream reconnection |
310
- | `/mcp` | DELETE | Session termination |
311
- | `/health` | GET | Per-server status, tool counts, uptime |
312
-
313
- #### Production deployment
314
-
315
- ```yaml
316
- # docker-compose.yml
317
- services:
318
- mcp-daemon:
319
- image: node:22-slim
320
- command: npx -y @luutuankiet/mcp-proxy-shim daemon
321
- environment:
322
- - MCP_CONFIG=/config/servers.json
323
- - MCP_APIKEY=your-secret
324
- ports:
325
- - "3456:3456"
326
- volumes:
327
- - ./mcp-servers.json:/config/servers.json:ro
328
- ```
329
-
330
- ---
331
338
 
332
339
  ## Why Not `/mcp/all`?
333
340
 
@@ -385,15 +392,15 @@ We tested this live: added a YNAB financial tool mid-session → 43 new tools ap
385
392
 
386
393
  ### Transport Modes
387
394
 
388
- | Feature | Stdio | HTTP Streamable (`serve`) | Daemon (`daemon`) |
389
- |---------|-------|--------------------------|-------------------|
390
- | Use case | Local MCP client (Claude Code, Cursor) | Remote agents, single upstream | Cloud agents, multi-server gateway |
391
- | Connection | stdin/stdout | HTTP on `/mcp` | HTTP on `/mcp` |
392
- | Upstreams | Single (mcpproxy-go) | Single (mcpproxy-go) | Multiple (stdio + HTTP) |
393
- | Schema transforms | `args_json` → `args` | `args_json` → `args` | None (pure passthrough) |
394
- | Auth | N/A (local process) | Optional `?apikey=` | Optional `?apikey=` |
395
- | Multi-client | Single | Multiple sessions | Multiple sessions |
396
- | Custom headers | N/A | N/A | Per-upstream `headers` config |
395
+ | Feature | Stdio | HTTP Streamable (`serve`) | Daemon (`daemon`) | Passthru (`passthru`) |
396
+ |---------|-------|--------------------------|-------------------|----------------------|
397
+ | Use case | Local MCP client (Claude Code, Cursor) | Remote agents, single upstream | Cloud agents, curl-based subagents | MCP server dev/testing |
398
+ | Connection | stdin/stdout | HTTP on `/mcp` | HTTP REST + `/mcp` | HTTP REST only |
399
+ | Upstream | Single (mcpproxy-go) | Single (mcpproxy-go) | Single (mcpproxy-go) | Any MCP server (stdio/HTTP/SSE) |
400
+ | Schema transforms | `args_json` → `args` | `args_json` → `args` | `args_json` → `args` | None (native schemas) |
401
+ | Auth | N/A (local process) | Optional `?apikey=` | Optional `?apikey=` | None (dev tool) |
402
+ | Multi-client | Single | Multiple sessions | Multiple sessions | Single |
403
+ | Response unwrapping | N/A | N/A | `deepUnwrapResult` | `deepUnwrapResult` |
397
404
 
398
405
  ### Session Management
399
406
 
package/dist/core.js CHANGED
@@ -198,6 +198,8 @@ function transformToolSchema(tool) {
198
198
  props.args = {
199
199
  type: "object",
200
200
  description: "The upstream tool's arguments as a native JSON object (not a string). " +
201
+ "IMPORTANT: Must be single-line compact JSON — do not pretty-print with newlines or indentation, " +
202
+ "as the parameter encoding layer may serialize multiline content as a string instead of an object. " +
201
203
  "Use describe_tools to get the upstream tool's inputSchema, then pass " +
202
204
  "those fields here directly. Example: if the upstream tool expects " +
203
205
  '{owner: string, repo: string}, pass args: {"owner": "foo", "repo": "bar"}. ' +
@@ -245,6 +247,22 @@ function validateAndSerializeArgs(jsonStr) {
245
247
  `not a pre-serialized string. Pass args as {"key": "value"}, not as '{"key": "value"}'. ` +
246
248
  `Parse error: ${err.message}. Input (first 200 chars): ${jsonStr.slice(0, 200)}`);
247
249
  }
250
+ // Defensive unwrapping: if parsed is a string containing a JSON object,
251
+ // unwrap one level. This handles double-encoded args from Claude's tool calling
252
+ // infrastructure when multiline/pretty-printed JSON gets wrapped in string
253
+ // delimiters (e.g., "{\n \"files\": [...]}" → {files: [...]}).
254
+ // See: https://github.com/luutuankiet/mcp-proxy-shim/issues/7
255
+ if (typeof parsed === "string") {
256
+ try {
257
+ const inner = JSON.parse(parsed);
258
+ if (inner !== null && typeof inner === "object" && !Array.isArray(inner)) {
259
+ parsed = inner;
260
+ }
261
+ }
262
+ catch {
263
+ // Not valid JSON inside the string — fall through to error below
264
+ }
265
+ }
248
266
  if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
249
267
  const actualType = parsed === null ? "null" : Array.isArray(parsed) ? "array" : typeof parsed;
250
268
  throw new ArgsValidationError(`args must be a JSON object, got ${actualType}. ` +
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@
6
6
  * (default) stdio transport — for local MCP clients (Claude Code, Cursor, etc.)
7
7
  * serve HTTP Streamable transport — for remote agents over HTTP
8
8
  * daemon REST + MCP gateway — single upstream via mcpproxy-go, exposes REST + /mcp
9
+ * passthru Generic MCP→REST bridge — connect to any MCP server for dev/testing
9
10
  *
10
11
  * Usage:
11
12
  * # Stdio mode (default) — single upstream via mcpproxy-go
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@
6
6
  * (default) stdio transport — for local MCP clients (Claude Code, Cursor, etc.)
7
7
  * serve HTTP Streamable transport — for remote agents over HTTP
8
8
  * daemon REST + MCP gateway — single upstream via mcpproxy-go, exposes REST + /mcp
9
+ * passthru Generic MCP→REST bridge — connect to any MCP server for dev/testing
9
10
  *
10
11
  * Usage:
11
12
  * # Stdio mode (default) — single upstream via mcpproxy-go
@@ -53,6 +54,24 @@ if (subcommand === "--help" || subcommand === "-h") {
53
54
  console.log(" POST /exec { code }");
54
55
  console.log(" POST /reinit Force new upstream session");
55
56
  console.log(" POST /mcp Streamable HTTP (backward compat)");
57
+ console.log("");
58
+ console.log("Passthru mode (generic MCP→REST bridge):");
59
+ console.log(" passthru -- <command> [args] Spawn a stdio MCP server");
60
+ console.log(" passthru --url <URL> Connect to HTTP Streamable server");
61
+ console.log(" passthru --url <URL> --transport sse Connect to SSE server");
62
+ console.log(" passthru --config <file> Load server config from JSON");
63
+ console.log("");
64
+ console.log("Passthru options:");
65
+ console.log(" --env KEY=VAL Extra env vars for stdio (repeatable)");
66
+ console.log(" --header K: V Extra headers for HTTP/SSE (repeatable)");
67
+ console.log(" --cwd <dir> Working directory for stdio server");
68
+ console.log("");
69
+ console.log("Passthru REST endpoints:");
70
+ console.log(" GET /health Server status + transport info");
71
+ console.log(" GET /tools Dehydrated tool list (?q=keyword to search)");
72
+ console.log(" GET /tools/:name Full tool schema with inputSchema");
73
+ console.log(" POST /call/:name Invoke tool. Body: {args: {...}}");
74
+ console.log(" POST /restart Restart upstream connection");
56
75
  process.exit(0);
57
76
  }
58
77
  if (subcommand === "serve") {
@@ -63,12 +82,17 @@ else if (subcommand === "daemon") {
63
82
  // Dynamic import — loads daemon mode (no core.ts dependency)
64
83
  import("./daemon.js");
65
84
  }
85
+ else if (subcommand === "passthru") {
86
+ // Dynamic import — generic MCP→REST bridge (no core.ts dependency)
87
+ import("./passthru.js");
88
+ }
66
89
  else if (subcommand) {
67
90
  console.error(`Unknown subcommand: "${subcommand}"`);
68
- console.error("Usage: mcp-proxy-shim [serve|daemon]");
91
+ console.error("Usage: mcp-proxy-shim [serve|daemon|passthru]");
69
92
  console.error(" (no args) stdio transport (default)");
70
93
  console.error(" serve HTTP Streamable server");
71
- console.error(" daemon Multi-server MCP gateway");
94
+ console.error(" daemon REST + MCP gateway (mcpproxy-go)");
95
+ console.error(" passthru Generic MCP→REST bridge");
72
96
  process.exit(1);
73
97
  }
74
98
  else {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnC,0EAA0E;AAC1E,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC7B,CAAC;KAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACnC,6DAA6D;IAC7D,MAAM,CAAC,aAAa,CAAC,CAAC;AACxB,CAAC;KAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;IACrC,mEAAmE;IACnE,MAAM,CAAC,eAAe,CAAC,CAAC;AAC1B,CAAC;KAAM,IAAI,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,GAAG,CAAC,CAAC;IACrD,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACrD,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,sBAAsB;IACtB,MAAM,CAAC,YAAY,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Proxy Shim — Passthru Mode
4
+ *
5
+ * Connects to any single MCP server (stdio, HTTP Streamable, SSE) and exposes
6
+ * its tools as clean REST endpoints. Designed for MCP server development
7
+ * and testing — lets LLM agents consume any MCP server via simple curl.
8
+ *
9
+ * Architecture:
10
+ * Agent ──curl──▶ passthru (:3456) ──MCP──▶ any MCP server
11
+ * ◀─ clean JSON ◀──────────◀─ MCP response
12
+ *
13
+ * REST endpoints:
14
+ * GET /health Server status + transport info + tool count
15
+ * GET /tools Dehydrated tool list (name, description snippet, param summary)
16
+ * GET /tools/:name Full tool schema with complete inputSchema
17
+ * POST /call/:name Invoke a tool with native JSON args → unwrapped result
18
+ * POST /restart Kill + respawn upstream, re-list tools
19
+ *
20
+ * Usage:
21
+ * # Stdio — passthru spawns and manages the server process
22
+ * npx @luutuankiet/mcp-proxy-shim passthru -- npx tsx src/index.ts
23
+ *
24
+ * # Stdio with extra env vars
25
+ * npx @luutuankiet/mcp-proxy-shim passthru --env API_KEY=xxx -- python server.py
26
+ *
27
+ * # HTTP Streamable — connect to running server
28
+ * npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/mcp
29
+ *
30
+ * # HTTP with auth headers
31
+ * npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/mcp --header "Authorization: Bearer xxx"
32
+ *
33
+ * # SSE (legacy transport)
34
+ * npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/sse --transport sse
35
+ *
36
+ * # From config file
37
+ * npx @luutuankiet/mcp-proxy-shim passthru --config server.json
38
+ *
39
+ * Environment variables:
40
+ * MCP_PORT Port for REST server (default: 3456)
41
+ * MCP_HOST Host to bind to (default: 0.0.0.0)
42
+ */
43
+ export declare function main(): Promise<void>;
@@ -0,0 +1,619 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Proxy Shim — Passthru Mode
4
+ *
5
+ * Connects to any single MCP server (stdio, HTTP Streamable, SSE) and exposes
6
+ * its tools as clean REST endpoints. Designed for MCP server development
7
+ * and testing — lets LLM agents consume any MCP server via simple curl.
8
+ *
9
+ * Architecture:
10
+ * Agent ──curl──▶ passthru (:3456) ──MCP──▶ any MCP server
11
+ * ◀─ clean JSON ◀──────────◀─ MCP response
12
+ *
13
+ * REST endpoints:
14
+ * GET /health Server status + transport info + tool count
15
+ * GET /tools Dehydrated tool list (name, description snippet, param summary)
16
+ * GET /tools/:name Full tool schema with complete inputSchema
17
+ * POST /call/:name Invoke a tool with native JSON args → unwrapped result
18
+ * POST /restart Kill + respawn upstream, re-list tools
19
+ *
20
+ * Usage:
21
+ * # Stdio — passthru spawns and manages the server process
22
+ * npx @luutuankiet/mcp-proxy-shim passthru -- npx tsx src/index.ts
23
+ *
24
+ * # Stdio with extra env vars
25
+ * npx @luutuankiet/mcp-proxy-shim passthru --env API_KEY=xxx -- python server.py
26
+ *
27
+ * # HTTP Streamable — connect to running server
28
+ * npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/mcp
29
+ *
30
+ * # HTTP with auth headers
31
+ * npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/mcp --header "Authorization: Bearer xxx"
32
+ *
33
+ * # SSE (legacy transport)
34
+ * npx @luutuankiet/mcp-proxy-shim passthru --url http://localhost:3000/sse --transport sse
35
+ *
36
+ * # From config file
37
+ * npx @luutuankiet/mcp-proxy-shim passthru --config server.json
38
+ *
39
+ * Environment variables:
40
+ * MCP_PORT Port for REST server (default: 3456)
41
+ * MCP_HOST Host to bind to (default: 0.0.0.0)
42
+ */
43
+ import http from "node:http";
44
+ import { readFileSync } from "node:fs";
45
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
46
+ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
47
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
48
+ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
49
+ // ── Raw fetch for HTTP tool calls (workaround for SDK #396) ────────
50
+ // The SDK's StreamableHTTPClientTransport has broken session multiplexing
51
+ // that causes 2nd+ callTool to hang. For HTTP/SSE upstreams, we use the
52
+ // SDK only for initialize + tools/list, then raw fetch for tools/call.
53
+ // Stdio transport is unaffected — uses SDK client directly.
54
+ import { createRequire } from "node:module";
55
+ const _require = createRequire(import.meta.url);
56
+ const { ProxyAgent } = _require("undici");
57
+ const PROXY_URL = process.env.https_proxy || process.env.HTTPS_PROXY || "";
58
+ const proxyDispatcher = PROXY_URL ? new ProxyAgent(PROXY_URL) : undefined;
59
+ let httpSessionId = null;
60
+ let httpReqId = 0;
61
+ async function rawMcpRequest(url, method, params, headers) {
62
+ const body = {
63
+ jsonrpc: "2.0",
64
+ method,
65
+ params,
66
+ id: ++httpReqId,
67
+ };
68
+ const reqHeaders = {
69
+ "Content-Type": "application/json",
70
+ Accept: "application/json, text/event-stream",
71
+ ...(headers || {}),
72
+ };
73
+ if (httpSessionId) {
74
+ reqHeaders["Mcp-Session-Id"] = httpSessionId;
75
+ }
76
+ const fetchOpts = {
77
+ method: "POST",
78
+ headers: reqHeaders,
79
+ body: JSON.stringify(body),
80
+ signal: AbortSignal.timeout(120_000),
81
+ };
82
+ if (proxyDispatcher) {
83
+ fetchOpts.dispatcher = proxyDispatcher;
84
+ }
85
+ const resp = await fetch(url, fetchOpts);
86
+ const sid = resp.headers.get("mcp-session-id");
87
+ if (sid)
88
+ httpSessionId = sid;
89
+ if (!resp.ok) {
90
+ const text = await resp.text();
91
+ throw new Error(`HTTP ${resp.status}: ${text.slice(0, 500)}`);
92
+ }
93
+ const contentType = resp.headers.get("content-type") || "";
94
+ if (contentType.includes("text/event-stream")) {
95
+ // Stream-parse SSE events — the stream may never close (SDK #396),
96
+ // so we read events incrementally and resolve on first JSON-RPC response.
97
+ const reader = resp.body.getReader();
98
+ const decoder = new TextDecoder();
99
+ let buffer = "";
100
+ try {
101
+ while (true) {
102
+ const { value, done } = await reader.read();
103
+ if (done)
104
+ break;
105
+ buffer += decoder.decode(value, { stream: true });
106
+ // Process complete SSE events (terminated by double newline)
107
+ const events = buffer.split("\n\n");
108
+ buffer = events.pop() || ""; // Keep incomplete event in buffer
109
+ for (const event of events) {
110
+ for (const line of event.split("\n")) {
111
+ if (line.startsWith("data: ")) {
112
+ const data = line.slice(6);
113
+ try {
114
+ const parsed = JSON.parse(data);
115
+ // Got a JSON-RPC response — cancel stream and return
116
+ reader.cancel().catch(() => { });
117
+ return parsed;
118
+ }
119
+ catch {
120
+ // Not JSON, continue
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ catch (err) {
128
+ reader.cancel().catch(() => { });
129
+ throw err;
130
+ }
131
+ throw new Error("SSE stream ended without JSON-RPC response");
132
+ }
133
+ return (await resp.json());
134
+ }
135
+ // ── Logging ────────────────────────────────────────────────────────
136
+ function log(...args) {
137
+ console.error("[passthru]", ...args);
138
+ }
139
+ // ── Response unwrapping (salvaged from core.ts) ────────────────────
140
+ // Duplicated here intentionally to avoid importing core.ts which
141
+ // requires MCP_URL at module load time. Zero regression risk.
142
+ function isMcpContentWrapper(obj) {
143
+ if (!obj || typeof obj !== "object" || Array.isArray(obj))
144
+ return false;
145
+ const o = obj;
146
+ if (!Array.isArray(o.content) || o.content.length === 0)
147
+ return false;
148
+ const first = o.content[0];
149
+ return first?.type === "text" && typeof first?.text === "string";
150
+ }
151
+ function deepParseText(text, maxDepth = 5) {
152
+ let value = text;
153
+ let depth = 0;
154
+ while (typeof value === "string" && depth < maxDepth) {
155
+ try {
156
+ const parsed = JSON.parse(value);
157
+ if (isMcpContentWrapper(parsed)) {
158
+ if (parsed.content.length === 1) {
159
+ value = parsed.content[0].text;
160
+ depth++;
161
+ continue;
162
+ }
163
+ return parsed.content.map((c) => c.type === "text" ? deepParseText(c.text, maxDepth - depth - 1) : c);
164
+ }
165
+ return parsed;
166
+ }
167
+ catch {
168
+ break;
169
+ }
170
+ }
171
+ return value;
172
+ }
173
+ function deepUnwrapResult(result) {
174
+ if (!isMcpContentWrapper(result))
175
+ return result;
176
+ if (result.content.length === 1) {
177
+ return deepParseText(result.content[0].text);
178
+ }
179
+ return result.content.map((c) => c.type === "text" ? deepParseText(c.text) : c);
180
+ }
181
+ // ── CLI Parsing ────────────────────────────────────────────────────
182
+ function parseArgs() {
183
+ const args = process.argv.slice(3); // skip node, script, "passthru"
184
+ // Check for --config file
185
+ const configIdx = args.indexOf("--config");
186
+ if (configIdx !== -1 && args[configIdx + 1]) {
187
+ const configPath = args[configIdx + 1];
188
+ try {
189
+ const raw = readFileSync(configPath, "utf-8");
190
+ return JSON.parse(raw);
191
+ }
192
+ catch (err) {
193
+ log("Failed to read config:", err.message);
194
+ process.exit(1);
195
+ }
196
+ }
197
+ // Check for --url (HTTP/SSE mode)
198
+ const urlIdx = args.indexOf("--url");
199
+ if (urlIdx !== -1 && args[urlIdx + 1]) {
200
+ const url = args[urlIdx + 1];
201
+ // Parse --transport (default: streamableHttp)
202
+ const transportIdx = args.indexOf("--transport");
203
+ const transport = transportIdx !== -1 && args[transportIdx + 1] === "sse"
204
+ ? "sse"
205
+ : "streamableHttp";
206
+ // Parse --header flags (repeatable)
207
+ const headers = {};
208
+ for (let i = 0; i < args.length; i++) {
209
+ if (args[i] === "--header" && args[i + 1]) {
210
+ const colonIdx = args[i + 1].indexOf(":");
211
+ if (colonIdx > 0) {
212
+ const key = args[i + 1].slice(0, colonIdx).trim();
213
+ const val = args[i + 1].slice(colonIdx + 1).trim();
214
+ headers[key] = val;
215
+ }
216
+ }
217
+ }
218
+ return {
219
+ type: transport,
220
+ url,
221
+ ...(Object.keys(headers).length > 0 ? { headers } : {}),
222
+ };
223
+ }
224
+ // Check for -- (stdio mode: everything after -- is the command)
225
+ const dashDashIdx = args.indexOf("--");
226
+ if (dashDashIdx !== -1) {
227
+ const cmdArgs = args.slice(dashDashIdx + 1);
228
+ if (cmdArgs.length === 0) {
229
+ log("Error: no command specified after --");
230
+ process.exit(1);
231
+ }
232
+ // Parse --env flags (before the --)
233
+ const env = {};
234
+ for (let i = 0; i < dashDashIdx; i++) {
235
+ if (args[i] === "--env" && args[i + 1]) {
236
+ const eqIdx = args[i + 1].indexOf("=");
237
+ if (eqIdx > 0) {
238
+ env[args[i + 1].slice(0, eqIdx)] = args[i + 1].slice(eqIdx + 1);
239
+ }
240
+ }
241
+ }
242
+ // Parse --cwd
243
+ const cwdIdx = args.indexOf("--cwd");
244
+ const cwd = cwdIdx !== -1 && cwdIdx < dashDashIdx ? args[cwdIdx + 1] : undefined;
245
+ return {
246
+ type: "stdio",
247
+ command: cmdArgs[0],
248
+ args: cmdArgs.slice(1),
249
+ ...(Object.keys(env).length > 0 ? { env } : {}),
250
+ ...(cwd ? { cwd } : {}),
251
+ };
252
+ }
253
+ log("Error: specify either --url <URL>, --config <file>, or -- <command>");
254
+ log("");
255
+ log("Examples:");
256
+ log(" passthru -- npx tsx src/index.ts");
257
+ log(" passthru --url http://localhost:3000/mcp");
258
+ log(" passthru --config server.json");
259
+ process.exit(1);
260
+ }
261
+ function createTransport(config) {
262
+ if (config.type === "stdio") {
263
+ log(`Stdio: ${config.command} ${(config.args || []).join(" ")}`);
264
+ return new StdioClientTransport({
265
+ command: config.command,
266
+ args: config.args || [],
267
+ env: { ...process.env, ...(config.env || {}) },
268
+ stderr: "pipe",
269
+ ...(config.cwd ? { cwd: config.cwd } : {}),
270
+ });
271
+ }
272
+ if (config.type === "sse") {
273
+ log(`SSE: ${config.url}`);
274
+ return new SSEClientTransport(new URL(config.url), config.headers
275
+ ? { requestInit: { headers: config.headers } }
276
+ : undefined);
277
+ }
278
+ // Default: streamableHttp
279
+ log(`HTTP Streamable: ${config.url}`);
280
+ return new StreamableHTTPClientTransport(new URL(config.url), config.headers
281
+ ? { requestInit: { headers: config.headers } }
282
+ : undefined);
283
+ }
284
+ // ── MCP Client Management ──────────────────────────────────────────
285
+ let client = null;
286
+ let transport = null;
287
+ let toolIndex = new Map();
288
+ let serverConfig;
289
+ let connectTime = 0;
290
+ let useRawFetch = false;
291
+ let httpUrl = null;
292
+ let httpHeaders = {};
293
+ async function connectServer(config) {
294
+ transport = createTransport(config);
295
+ // Pipe stderr for stdio servers (helpful for debugging)
296
+ if (transport instanceof StdioClientTransport && transport.stderr) {
297
+ transport.stderr.on("data", (chunk) => {
298
+ process.stderr.write(`[upstream] ${chunk}`);
299
+ });
300
+ }
301
+ client = new Client({ name: "mcp-passthru", version: "1.0.0" }, { capabilities: {} });
302
+ // For HTTP/SSE transports, track URL for raw fetch workaround (SDK #396)
303
+ if (config.type !== "stdio") {
304
+ useRawFetch = true;
305
+ httpUrl = config.url;
306
+ httpHeaders = config.headers || {};
307
+ }
308
+ else {
309
+ useRawFetch = false;
310
+ httpUrl = null;
311
+ httpHeaders = {};
312
+ }
313
+ log("Connecting to upstream MCP server...");
314
+ await client.connect(transport);
315
+ connectTime = Date.now();
316
+ // Capture session ID from transport for raw fetch
317
+ if (useRawFetch && transport instanceof StreamableHTTPClientTransport) {
318
+ httpSessionId = transport.sessionId || null;
319
+ }
320
+ log("Connected. Listing tools...");
321
+ await refreshTools();
322
+ }
323
+ async function refreshTools() {
324
+ if (!client)
325
+ throw new Error("Not connected");
326
+ const { tools } = await client.listTools();
327
+ toolIndex = new Map();
328
+ for (const tool of tools) {
329
+ toolIndex.set(tool.name, tool);
330
+ }
331
+ log(`Indexed ${toolIndex.size} tools`);
332
+ }
333
+ async function disconnectServer() {
334
+ if (client) {
335
+ try {
336
+ await client.close();
337
+ }
338
+ catch (err) {
339
+ log("Close error:", err.message);
340
+ }
341
+ client = null;
342
+ }
343
+ if (transport) {
344
+ try {
345
+ await transport.close();
346
+ }
347
+ catch (err) {
348
+ log("Transport close error:", err.message);
349
+ }
350
+ transport = null;
351
+ }
352
+ toolIndex.clear();
353
+ }
354
+ // ── Tool Dehydration ───────────────────────────────────────────────
355
+ function dehydrateTool(tool) {
356
+ const desc = tool.description || "";
357
+ const truncDesc = desc.length > 120 ? desc.slice(0, 120) + "..." : desc;
358
+ // Build compact param summary: "name: type*" where * = required
359
+ let params = "";
360
+ if (tool.inputSchema?.properties) {
361
+ const required = new Set(tool.inputSchema.required || []);
362
+ const parts = [];
363
+ for (const [name, schema] of Object.entries(tool.inputSchema.properties)) {
364
+ const s = schema;
365
+ let typeStr = s.type || "any";
366
+ if (typeStr === "array" && s.items) {
367
+ const itemType = s.items.type || "any";
368
+ typeStr = `${itemType}[]`;
369
+ }
370
+ parts.push(`${name}: ${typeStr}${required.has(name) ? "*" : ""}`);
371
+ }
372
+ params = parts.join(" | ");
373
+ }
374
+ return { name: tool.name, description: truncDesc, params };
375
+ }
376
+ function searchTools(query) {
377
+ const tools = Array.from(toolIndex.values());
378
+ if (!query)
379
+ return tools.map(dehydrateTool);
380
+ const q = query.toLowerCase();
381
+ return tools
382
+ .filter((t) => {
383
+ const nameMatch = t.name.toLowerCase().includes(q);
384
+ const descMatch = (t.description || "").toLowerCase().includes(q);
385
+ return nameMatch || descMatch;
386
+ })
387
+ .map(dehydrateTool);
388
+ }
389
+ // ── HTTP Helpers ───────────────────────────────────────────────────
390
+ function parseBody(req) {
391
+ return new Promise((resolve) => {
392
+ const chunks = [];
393
+ req.on("data", (chunk) => chunks.push(chunk));
394
+ req.on("end", () => {
395
+ try {
396
+ const raw = Buffer.concat(chunks).toString("utf-8");
397
+ resolve(raw ? JSON.parse(raw) : {});
398
+ }
399
+ catch {
400
+ resolve({});
401
+ }
402
+ });
403
+ req.on("error", () => resolve({}));
404
+ });
405
+ }
406
+ function jsonResponse(res, status, body) {
407
+ res.writeHead(status, {
408
+ "Content-Type": "application/json",
409
+ "Access-Control-Allow-Origin": "*",
410
+ });
411
+ res.end(JSON.stringify(body, null, 2));
412
+ }
413
+ function extractToolName(pathname, prefix) {
414
+ return decodeURIComponent(pathname.slice(prefix.length));
415
+ }
416
+ // ── Route Handlers ─────────────────────────────────────────────────
417
+ const startTime = Date.now();
418
+ let callCount = 0;
419
+ async function handleHealth(_req, res) {
420
+ const transportType = serverConfig.type;
421
+ const target = serverConfig.type === "stdio"
422
+ ? `${serverConfig.command} ${(serverConfig.args || []).join(" ")}`
423
+ : serverConfig.url;
424
+ jsonResponse(res, 200, {
425
+ ok: !!client,
426
+ transport: transportType,
427
+ target,
428
+ tools_count: toolIndex.size,
429
+ uptime: Math.round((Date.now() - startTime) / 1000),
430
+ connected_for: client ? Math.round((Date.now() - connectTime) / 1000) : null,
431
+ callCount,
432
+ });
433
+ }
434
+ async function handleListTools(req, res) {
435
+ const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
436
+ const query = url.searchParams.get("q") || undefined;
437
+ const tools = searchTools(query);
438
+ jsonResponse(res, 200, {
439
+ tools,
440
+ count: tools.length,
441
+ total: toolIndex.size,
442
+ ...(query ? { query } : {}),
443
+ hint: "GET /tools/{name} for full inputSchema",
444
+ });
445
+ }
446
+ async function handleGetTool(_req, res, toolName) {
447
+ const tool = toolIndex.get(toolName);
448
+ if (!tool) {
449
+ return jsonResponse(res, 404, {
450
+ error: `Tool not found: ${toolName}`,
451
+ available: Array.from(toolIndex.keys()),
452
+ });
453
+ }
454
+ jsonResponse(res, 200, tool);
455
+ }
456
+ async function handleCallTool(req, res, toolName) {
457
+ if (!client) {
458
+ return jsonResponse(res, 503, { error: "Not connected to upstream server" });
459
+ }
460
+ const tool = toolIndex.get(toolName);
461
+ if (!tool) {
462
+ return jsonResponse(res, 404, {
463
+ error: `Tool not found: ${toolName}`,
464
+ available: Array.from(toolIndex.keys()),
465
+ });
466
+ }
467
+ const body = await parseBody(req);
468
+ const args = (body.args || body);
469
+ // If body has a top-level "args" key, use that; otherwise treat entire body as args
470
+ const toolArgs = body.args ? body.args : args;
471
+ try {
472
+ callCount++;
473
+ let result;
474
+ if (useRawFetch && httpUrl) {
475
+ // Raw fetch workaround for SDK #396 (StreamableHTTPClientTransport
476
+ // hangs on 2nd+ callTool due to broken session multiplexing)
477
+ const resp = await rawMcpRequest(httpUrl, "tools/call", {
478
+ name: toolName,
479
+ arguments: toolArgs,
480
+ }, httpHeaders);
481
+ if (!resp) {
482
+ return jsonResponse(res, 502, { error: "No response from upstream" });
483
+ }
484
+ if (resp.error) {
485
+ return jsonResponse(res, 502, {
486
+ error: "upstream error",
487
+ detail: resp.error,
488
+ });
489
+ }
490
+ result = resp.result ?? resp;
491
+ }
492
+ else {
493
+ // Stdio transport — SDK client works fine
494
+ result = await client.callTool({
495
+ name: toolName,
496
+ arguments: toolArgs,
497
+ });
498
+ }
499
+ const unwrapped = deepUnwrapResult(result);
500
+ // Check if the upstream reported an error
501
+ const isError = result?.isError === true;
502
+ jsonResponse(res, isError ? 422 : 200, unwrapped);
503
+ }
504
+ catch (err) {
505
+ jsonResponse(res, 500, {
506
+ error: "Tool call failed",
507
+ detail: err.message,
508
+ });
509
+ }
510
+ }
511
+ async function handleRestart(_req, res) {
512
+ try {
513
+ log("Restarting upstream connection...");
514
+ await disconnectServer();
515
+ await connectServer(serverConfig);
516
+ jsonResponse(res, 200, {
517
+ ok: true,
518
+ tools_count: toolIndex.size,
519
+ tools: Array.from(toolIndex.keys()),
520
+ });
521
+ }
522
+ catch (err) {
523
+ jsonResponse(res, 500, {
524
+ ok: false,
525
+ error: err.message,
526
+ });
527
+ }
528
+ }
529
+ // ── Main ───────────────────────────────────────────────────────────
530
+ const PORT = parseInt(process.env.MCP_PORT || "3456", 10);
531
+ const HOST = process.env.MCP_HOST || "0.0.0.0";
532
+ export async function main() {
533
+ serverConfig = parseArgs();
534
+ log("Starting passthru mode...");
535
+ log(`Transport: ${serverConfig.type}`);
536
+ try {
537
+ await connectServer(serverConfig);
538
+ }
539
+ catch (err) {
540
+ log("Failed to connect:", err.message);
541
+ log("Server will start anyway — use POST /restart to retry");
542
+ }
543
+ const httpServer = http.createServer((req, res) => {
544
+ const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
545
+ const pathname = url.pathname;
546
+ // CORS preflight
547
+ if (req.method === "OPTIONS") {
548
+ res.setHeader("Access-Control-Allow-Origin", "*");
549
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
550
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type");
551
+ res.writeHead(204);
552
+ res.end();
553
+ return;
554
+ }
555
+ const handler = async () => {
556
+ // GET /health
557
+ if ((pathname === "/health" || pathname === "/healthz") && req.method === "GET") {
558
+ return handleHealth(req, res);
559
+ }
560
+ // GET /tools
561
+ if (pathname === "/tools" && req.method === "GET") {
562
+ return handleListTools(req, res);
563
+ }
564
+ // GET /tools/:name
565
+ if (pathname.startsWith("/tools/") && req.method === "GET") {
566
+ const toolName = extractToolName(pathname, "/tools/");
567
+ return handleGetTool(req, res, toolName);
568
+ }
569
+ // POST /call/:name
570
+ if (pathname.startsWith("/call/") && req.method === "POST") {
571
+ const toolName = extractToolName(pathname, "/call/");
572
+ return handleCallTool(req, res, toolName);
573
+ }
574
+ // POST /restart
575
+ if (pathname === "/restart" && req.method === "POST") {
576
+ return handleRestart(req, res);
577
+ }
578
+ jsonResponse(res, 404, {
579
+ error: "Not Found",
580
+ endpoints: {
581
+ "GET /health": "Server status",
582
+ "GET /tools": "List tools (dehydrated). ?q=keyword to search",
583
+ "GET /tools/:name": "Full tool schema",
584
+ "POST /call/:name": "Invoke tool. Body: {args: {...}}",
585
+ "POST /restart": "Restart upstream connection",
586
+ },
587
+ });
588
+ };
589
+ handler().catch((err) => {
590
+ log("Unhandled error:", err.message);
591
+ if (!res.headersSent) {
592
+ jsonResponse(res, 500, { error: "Internal Server Error" });
593
+ }
594
+ });
595
+ });
596
+ httpServer.listen(PORT, HOST, () => {
597
+ log(`Passthru listening on http://${HOST}:${PORT}`);
598
+ log("Endpoints: /health, /tools, /tools/:name, /call/:name, /restart");
599
+ if (toolIndex.size > 0) {
600
+ log(`Tools available: ${Array.from(toolIndex.keys()).join(", ")}`);
601
+ }
602
+ });
603
+ const shutdown = async () => {
604
+ log("Shutting down...");
605
+ await disconnectServer();
606
+ httpServer.close(() => {
607
+ log("Stopped");
608
+ process.exit(0);
609
+ });
610
+ setTimeout(() => process.exit(1), 5000).unref();
611
+ };
612
+ process.on("SIGINT", shutdown);
613
+ process.on("SIGTERM", shutdown);
614
+ }
615
+ main().catch((err) => {
616
+ log("Fatal:", err);
617
+ process.exit(1);
618
+ });
619
+ //# sourceMappingURL=passthru.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthru.js","sourceRoot":"","sources":["../src/passthru.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luutuankiet/mcp-proxy-shim",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "description": "MCP proxy shim for mcpproxy-go — transforms call_tool_* args_json:string to native args:object. Supports stdio and HTTP Streamable transports.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,6 +18,7 @@
18
18
  "dev": "npx tsx src/index.ts",
19
19
  "dev:http": "npx tsx src/index.ts serve",
20
20
  "test:daemon": "node test/daemon-e2e.mjs",
21
+ "test:issue7": "node test/issue-7-multiline-args.mjs",
21
22
  "prepublishOnly": "npm run build"
22
23
  },
23
24
  "keywords": [