vibedev-bridge
Provides tools for inspecting local Git repositories, including status, diffs, and commit logs.
Provides integration with Postman's AI agent and desktop app, including status/eval tools, renaming conversations, fullwidth panel control, and a CDP-driven control daemon for interacting with Postman.
Provides tools for working with SQLite databases, including reading schema information and running queries.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vibedev-bridgeshow the last 40 lines of ~/logs/app.log and run git status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vibedev-bridge
A local MCP server that gives web-based AI agents (claude.ai, ChatGPT, Grok — experimental: Gemini, plus Postman's AI agent) read/edit access to your machine's files and a shell allowlist, over HTTPS through a swappable public edge.
Transport: Streamable HTTP MCP behind OAuth 2.1
Default edge: Tailscale Funnel — bring-your-own Cloudflare named tunnel or any stable HTTPS origin also supported
Platforms: Windows · Linux · macOS (Node.js 22)
npm: private/unpublished — run from source
Why
Web AI subscriptions (Claude Pro, ChatGPT Plus…) are far cheaper than per-token API use for everyday work, but an agent without access to your files can only talk. The official desktop apps tie local access to a device ID and one login at a time; with a remote MCP server you instead get:
Web-quota file and shell access directly from the browser
Multi-account flexibility — switch browser profiles, point every account at the same machine
Fail-safe execution — the shell tool is a hand-curated allowlist, not a blocklist (Security)
Typical scenarios: at your desk use a native CLI (fastest). Away from the desk — mobile/web/another machine — use this to check jobs, read logs, pull code or clean temp files. Combined with Grok's scheduled prompts it also runs as a headless cloud-triggered local node.
Related MCP server: universal-dev-mcp
Install & run
git clone https://github.com/hoan9an/vibedev-bridge.git
cd vibedev-bridge
npm install# Development mode (~/.vibedev/mcpsv-dev, ports 9997/9996)
npm run dev
# Production mode (~/.vibedev/mcpsv, ports 9999/9998)
npm startnpm start (foreground; Ctrl+C to stop) handles everything:
Passphrase and OAuth client ID/secret generated once under
~/.vibedev/mcpsv/, reused on later runsFunnel: checks
tailscale funnel status; if port 9999 is not Funnel-enabled yet, runstailscale funnel --bg 9999(idempotent)Prints the four values you need for the connectors: MCP URL, Client ID, Client Secret, Passphrase
Opens the control panel at
http://127.0.0.1:9998/?t=<token>— sections:0 Setup(ingress picker) →1 Connectors→2 Install vibedev-rules→3 Instructions→4 Browser utilities→5 Folders→6 Shell allowlist
Nothing is installed system-wide, no background daemon is created, and no admin rights are required. Closing the terminal stops the server.
Allowed folders
The default allowed root is your home directory. Add/remove absolute paths in panel section 5 — saves take effect on the next tool call, no restart. Beyond the configured roots, the tools are also granted ~/.vibedev (where vibedev-rules deploys) and ~/.claude, so web agents can read your native CLAUDE.md and the rule corpus the way Claude Code does. ~/.claude is granted at folder level (known tradeoff — session tokens inside it are reachable; the panel row is locked, edit ~/.vibedev/mcpsv/setting.json directly if you want it removed).
Connecting
All clients use the same MCP URL and the same passphrase consent screen; only how they authenticate differs.
Claude web (claude.ai) — primary
claude.ai → Settings → Connectors → Add custom connectorPaste the Remote MCP server URL (
https://your-machine.ts.net/mcp)Advanced settings → paste Client ID + Client Secret printed by
npm startClick Connect → enter the passphrase on the local consent page
ChatGPT — needs Developer mode
Enable Developer mode (Settings → Security and login)
Add a custom connector with the same MCP URL
Same passphrase on the consent page
ChatGPT self-registers via RFC 7591 DCR (POST /register, PKCE, no secret). Do not paste Claude's credentials — each client binds to its own registration.
Grok
Self-registers via the same DCR path — paste only the MCP URL, no Client ID. Its redirect URI is allowlisted; if Grok ever moves it, the server logs register REJECTED (redirect_uri not allowlisted) with the new value to re-allowlist.
Gemini (experimental)
Same confidential-client flow as Claude (client ID + secret). The OAuth handshake works, but tool discovery/drive is unreliable in testing — treat Claude and Grok as the dependable clients today.
Postman (AI agent)
No OAuth redirect and no persistent system prompt on Postman's side:
Panel → Postman tab → copy the filled JSON (live MCP URL + minted token)
Postman → Settings → Connected Accounts → add MCP server → paste the JSON
Paste the panel's prompt at the start of each chat
The Postman tab also hosts a Launch button that attaches a CDP-driven control daemon to the Postman desktop app (auto-clicking Approve/Run, toggling Thinking/Auto-run, opening a new window). It starts only when you click Launch — never at boot. Its injected overlay is the VibeSoft MCP for Postman panel; external links (the vibedev-bridge and vibedev-rules repos) open in your OS default browser.
Official tool suite (39 tools)
Chromium control:
vibe__chrome_profilesvibe__chrome_launchvibe__chrome_tabsvibe__chrome_interactvibe__chrome_probe_aivibe__chrome_stopDevTools / CDP:
vibe__devtools_targetsvibe__devtools_evalvibe__devtools_screenshotSystem:
vibe__notify_uservibe__clipboard_readvibe__clipboard_writeHTTP:
vibe__local_fetch(SSRF-protected localhost/LAN)Background tasks:
vibe__task_startvibe__task_manageFilesystem:
vibe__read_text_filevibe__write_filevibe__edit_filevibe__create_directoryvibe__move_filevibe__get_file_infovibe__list_allowed_directoriesSearch & shell:
vibe__find_pathvibe__search_contentvibe__run_cmdPorts & dev servers:
vibe__port_statusvibe__kill_portGit:
vibe__git_statusvibe__git_diffvibe__git_logSQLite:
vibe__sqlite_schemavibe__sqlite_queryAgents & context:
vibe__agy_runvibe__kiro_readvibe__vibedev-rules_contextPostman:
vibe__postman_statusvibe__postman_evalvibe__postman_rename_conversationvibe__postman_panel_fullwidth
Requirements
Node.js 22 — Windows, Linux or macOS
Windows only: Git for Windows on
PATH— the shell/search tools shell out to Unix binaries (grep,find, …);usr/binships what's needed. Prerequisite, not a code dependency.Tailscale (default edge, one-time): install, sign in, and enable Funnel for your tailnet once (
login.tailscale.com/f/funnel) — free on every plan.npm startenables port 9999 automatically after that.
Architecture
Claude web / ChatGPT / Grok
│ HTTPS + OAuth 2.1 (Claude: pre-registered client · others: DCR self-register)
▼
Tailscale Funnel (https://your-machine.ts.net)
│
▼
gatekeeper.js — public port 9999
│ /.well-known/oauth-* + openid-configuration (discovery)
│ /authorize, /token minimal authorization server (oauth.js)
│ /register RFC 7591 dynamic client registration
│ /mcp Bearer-token protected → streamable-bridge.js (Streamable HTTP)
▼
tools-server.js — one shared in-process McpServer (InMemoryTransport) mounting:
filesystem · search · shell (allowlisted) · agy · kiro · rule-context · chrome/CDP ·
postman · fetch · task · port · git · system · sqlite
panel.js — loopback-only control panel (:9998), token-gated, never exposedThe ingress is swappable: Tailscale Funnel (default) → your own PUBLIC_ORIGIN → a Cloudflare named tunnel (--tunnel <cred.json> --origin <host>). Precedence follows that order; OAuth and tools are unchanged either way. The panel (section 0) also accepts a cloudflared credentials JSON for no-CLI setups.
Funnel troubleshooting: a "Couldn't connect" while tailscale funnel status says "on" is usually a serve-config sync failure to Tailscale's edge, not a code bug. Don't test with a bare curl https://<host> from the tailnet-joined machine (the mesh shortcut hides the failure) — test the public path:
dig @8.8.8.8 <host> A +short
curl --resolve <host>:443:<IP> https://<host>/.well-known/oauth-authorization-serverA TLS error there → re-run tailscale funnel --bg 9999 to force a re-push. Avoid toggling Funnel repeatedly (Let's Encrypt rate limits).
Configuration
Copy .env.example to .env for overrides — PUBLIC_ORIGIN, GATEKEEPER_PORT, PANEL_PORT, MCP_DATA_DIR, MCP_REQUEST_TIMEOUT_MS. Boot falls back to defaults silently without the file.
Directory layout
vibedev-bridge/
├── bin/vibedev-bridge.js # global CLI entry (npm package stays private)
├── scripts/
│ ├── start.js # single process: gatekeeper + panel + warm tools server
│ ├── gatekeeper.js / oauth.js # public edge: OAuth server + /mcp proxy
│ ├── streamable-bridge.js # Streamable HTTP shim → in-process MCP server
│ ├── tools-server.js # mounts every tool register() module
│ ├── filesystem-mcp.js · search-mcp.js · shell-mcp.js (+ allowlist.js)
│ ├── chrome-mcp.js · chrome-profile.js · cdp-mcp.js · cdp-engine.js
│ ├── postman-mcp.js · rule-context{,-mcp}.js · fetch-mcp.js · task-mcp.js
│ ├── port-mcp.js · git-mcp.js · system-mcp.js · sqlite-mcp.js · agy-mcp.js · kiro-mcp.js
│ ├── panel.js · config-page.js # loopback control panel
│ ├── vibe-pmcontrol/ # CDP-driven Postman desktop control daemon
│ ├── roots.js · log.js · http.js · html.js · open-browser.js · userdata.js
│ └── update-check.js # local-only version snapshot, no remote check
├── test/ # suite (npm test)
└── public/ # panel CSS/JS + imagesUser data lives outside the repo at ~/.vibedev/mcpsv/ (settings, tokens, passphrase, DCR clients — all 0600), the same convention as ~/.aws / ~/.docker. A clone never produces a diff from panel edits.
Security
Whitelist, not blocklist. Only allowlisted commands run; the default set is read-only (flag-rich binaries whose own flags escape read-only — e.g.
find -delete— stay out). Adding commands is a deliberate panel edit, and any command you add runs under your responsibility.OAuth 2.1 over token-in-URL. One pre-issued confidential client (Claude) + DCR public clients (ChatGPT/Grok); tokens bound to their issuing client ID. Details:
docs/ref/security-model.md.Single public entry point (
gatekeeper.js); the panel binds127.0.0.1only, is token-gated per request, and is never exposed.Tokens persist in
~/.vibedev/mcpsv/tokens.json(0600) — a connector is long-lived file access, not a login. Revoke by deletingtokens.json(oroauth-dcr-clients.json) and restarting.
Whitelist rationale
Fail-safe by default (unknown commands blocked), minimal attack surface, subcommand granularity (git scoped to status/log/diff/show), neutralized prompt-injection escalation (nothing unlisted to reach for), read-only by construction. Distinct from Desktop Commander's local blocklist approach by design.
Notes
Connector icon: claude.ai queries Google's favicon service with the tailnet apex domain, which has no public DNS record — a default letter icon is what you'll see. The gatekeeper still serves a valid
/favicon.ico; the browser just never asks this server for it.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Use your own Mac from ChatGPT, Claude or Codex: files, commands, documents, and a browser.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Hosted AI agents and workflows with app OAuth, human approval gates, and a run ledger.
OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to access files and terminal of a local computer via a public HTTPS endpoint, secured with GitHub OAuth.-
- AlicenseAqualityCmaintenanceConnects AI tools to local dev servers, enabling them to view pages, call APIs, read/edit files, and run commands with safety guardrails.13MIT
- FlicenseNot gradedqualityBmaintenanceEnables external AI (ChatGPT, Claude) to securely access a local workspace via Cloudflare Tunnel, providing file operations, shell commands, Git operations, and more with bearer token authentication and sandbox isolation.1-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search, update, manage files, and run terminal commands on a computer, with remote access via Streamable HTTP and OAuth 2.0 for integration with ChatGPT and web agents.140,347 npmMIT