by abluva
The bridge for remote MCP — seamless OAuth, resilient auth recovery, production-grade reliability
# Add to your Claude Code skills
git clone https://github.com/abluva/mcp-remoteLast scanned: 8/8/2026
{
"issues": [
{
"type": "npm-audit",
"message": "esbuild: esbuild allows arbitrary file read when running the development server on Windows",
"severity": "low"
},
{
"type": "npm-audit",
"message": "fast-uri: fast-uri vulnerable to host confusion via backslash authority introducer",
"severity": "high"
},
{
"type": "npm-audit",
"message": "hono: Hono: ReDoS in CORS middleware via Access-Control-Request-Headers",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "nanoid: nanoid: custom generators can loop indefinitely when size is zero",
"severity": "high"
}
],
"status": "WARNING",
"scannedAt": "2026-08-08T04:57:11.682Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}mcp-remote is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by abluva. The bridge for remote MCP — seamless OAuth, resilient auth recovery, production-grade reliability. It has 53 GitHub stars.
mcp-remote returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/abluva/mcp-remote" and add it to your Claude Code skills directory (see the Installation section above).
mcp-remote is primarily written in TypeScript. It is open-source under abluva on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh mcp-remote against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
@abluva/mcp-remoteAbluva-maintained fork of mcp-remote — a stdio proxy that connects MCP clients (Claude Desktop, Cursor, etc.) to remote MCP servers with OAuth.
Use this package when upstream mcp-remote hangs on auth, drops mid-session re-login, or refuses OAuth callbacks on localhost.
| npm | @abluva/mcp-remote |
| GitHub | abluva-research/mcp-remote |
| Upstream base | geelen/mcp-remote v0.1.38 |
| Also incorporates | jacopoc PR #213 (mid-session re-auth — still open upstream) |
📄 Full fork changelog, upstream issue/PR mapping, and version history: ABLUVA-FORK.md
Upstream mcp-remote is the de facto OAuth bridge for stdio-only MCP clients. Several critical OAuth bugs remain open on geelen/mcp-remote — especially mid-session token expiry, Claude Desktop hangs, and localhost callback connection refused.
@abluva/mcp-remote merges:
{
"mcpServers": {
"remote-example": {
"command": "npx",
"args": [
"-y",
"@abluva/mcp-remote@latest",
"https://your-mcp-gateway.example/mcp-connect/<catalog-id>"
]
}
}
}
Direct stateless server (MCP 2026-07-28, bypass gateway):
{
"mcpServers": {
"sql-sandbox-v2": {
"command": "npx",
"args": [
"-y",
"@abluva/mcp-remote@latest",
"--protocol",
"2026-07-28",
"--allow-http",
"http://127.0.0.1:8095/mcp/v2"
]
}
}
}
--protocol)| Mode | Behavior |
|---|---|
auto (default) |
Probe remote with server/discover; use 2026-07-28 if supported, else legacy |
legacy |
Stateful Streamable HTTP (initialize + session) — use for Obot/gateway URLs |
2026-07-28 |
Stateless POST-only transport with _meta injection and local initialize shim for Claude |
-y — required for Claude (non-interactive npx install).rm -rf ~/.mcp-auth then restart Claude (Cmd+Q).| Problem | Upstream refs | Fixed in |
|---|---|---|
| Claude hangs after OAuth / tool errors | #286, #293 | 0.1.39, 0.1.41 |
refresh_token is invalid at startup |
#181, #91 | 0.1.39 |
Fatal connect after stale Obot OAuth (401 after successful authentication) |
Abluva gateway / Hub logout | 2.0.1 |
Hub logout → localhost connection refused on re-auth |
#248, #245 | 0.1.39, 0.1.42 |
| Port clash with multiple MCP servers (no explicit port) | #306, #262 | 0.1.40, 0.1.42 |
| Silent token expiry → browser re-auth loops | #273 | 0.1.41 (#290) |
| Token exchange to wrong URL (proxy mode) | #270 | 0.1.41 (#302) |
See ABLUVA-FORK.md for the complete table and version notes.
geelen/mcp-remote @ v0.1.38 (main)
│
├── jacopoc/implement-reauth-after-auth-error-on-send → mid-session re-auth (#213)
│
└── abluva-research/mcp-remote (main)
├── v0.1.39 OAuth re-auth + eager callback server
├── v0.1.40 Auto callback port / EADDRINUSE recovery
├── v0.1.41 #297, #290, #302
├── v0.1.42 Stale registration invalidation + port sync
├── v2.0.0 MCP 2026-07-28 stateless transport
└── v2.0.1 Connect-time stale OAuth recovery
initialize immediately while OAuth runs in background (Claude 60s timeout). Requires larger proxy lifecycle change; tracked for a future release.git clone https://github.com/abluva-research/mcp-remote.git
cd mcp-remote
npm install
npm run build
node dist/proxy.js https://your-gateway.example/mcp-connect/<id>
The sections below are inherited from upstream mcp-remote (usage, headers, transport strategies, etc.). For Abluva-specific OAuth behaviour, prefer ABLUVA-FORK.md.
mcp-remote (upstream)Connect an MCP Client that only supports local (stdio) servers to a Remote MCP Server, with auth support:
Note: this is a working proof-of-concept but should be considered experimental.
So far, the majority of MCP servers in the wild are installed locally, using the stdio transport. This has some benefits: both the client and the server can implicitly trust each other as the user has granted them both permission to run. Adding secrets like API keys can be done using environment variables and never leave your machine. And building on npx and uvx has allowed users to avoid explicit install steps, too.
But there's a reason most software that could be moved to the web did get moved to the web: it's so much easier to find and fix bugs & iterate on new features when you can push updates to all your users with a single deploy.
With the latest MCP Authorization specification, we now have a secure way of sharing our MCP servers with the world without running code on user's laptops. Or at least, you would, if all the popular MCP clients supported it yet. Most are stdio-only, and those that do support HTTP+SSE don't yet support the OAuth flows required.
That's where mcp-remote comes in. As soon as your chosen MCP client supports remote, authorized servers, you can remove it. Until that time, drop in this one liner and dress for the MCP clients you want!
All the most popular MCP clients (Claude Desktop, Cursor & Windsurf) use the following config format:
{
"mcpServers": {
"remote-example": {
"command": "npx",
"args": [
"@abluva/mcp-remote",
"https://remote.mcp.server/sse"
]
}
}
}
npx is producing errors, consider adding -y as the first argument to auto-accept the installation of the @abluva/mcp-remote package. "command": "npx",
"args": [
"-y",
"@abluva/mcp-remote",
"https://remote.mcp.server/sse"
]
npx to always check for an updated version, add the @latest flag: "args": [
"-y",
"@abluva/mcp-remote@latest",
"https://remote.mcp.server/sse"
]
@abluva/mcp-remote listens for an OAuth redirect (by default auto-selected per server URL since v0.1.40), add an additional argument after the server URL. If the port is unavailable, an open port will be chosen at random. "args": [
"@abluva/mcp-remote",
"https://remote.mcp.server/sse",
"9696"
]
@abluva/mcp-remote registers as the OAuth callback URL (by default localhost), add the --host flag. "args": [
"@abluva/mcp-remote",
"https://remote.mcp.server/sse",
"--host",
"127.0.0.1"
]
--allow-http flag. Note: This should only be used in secure private networks where traffic cannot be intercepted. "args": [
"@abluva/mcp-remote",
"http://internal-service.vpc/sse",
"--allow-http"
]
--debug flag. This will write verbose logs to ~/.mcp-auth/{server_hash}_debug.log with timestamps and detailed information about the auth process, connections, and token refreshing. "args": [
"@abluva/mcp-remote",
"https://remote.mcp.server/sse",
"--debug"
]
--silent flag. This will prevent logs from being emitted, except in the case where --debug is also passed. "args": [
"@abluva/mcp-remote",
"https://remote.mcp.server/sse",
"--silent"
]