Portal

Portal

Enables MCP clients to connect to a local workspace over a public tunnel and lets them run shell commands and transfer files bidirectionally.

Category
Visit Server

README

Portal

Portal

English · 简体中文

Portal is a VS Code extension that exposes the current workspace as a public MCP endpoint. It is deliberately small: commands and file transfer only.

Connect any MCP client (Claude, ChatGPT, Cursor, a custom agent, curl) to your machine over a tunnel. The agent can run shells and move files.

What you get

Surface Role
MCP Streamable HTTP https://<tunnel>/mcp/<token>
File HTTP API https://<tunnel>/files/<token>/… (same token)
Sidebar + settings Flat Win10-style panel: start/stop, copy URL, tunnel health
Portal Agent terminal Optional live mirror of run_command I/O

MCP tools (exactly five)

Tool Purpose
run_command Foreground command. Default timeout 120s (max 600s). Use command + shell, or executable + args (preferred when you do not need shell syntax).
start_command Start a long-running process. Returns command_id and PID. Up to four concurrent jobs.
read_command Incremental stdout/stderr by offset. Omit command_id to list retained jobs. Completed records expire after 10 minutes.
stop_command Stop a background job and its process tree (force skips the 2s graceful window).
file_transfer_info Public file-API base URL, size limit, and curl examples.

Shells: powershell (Windows default), pwsh, cmd, bash / sh (Git Bash when present). UTF-8 is set up automatically.

Session: reuse the Mcp-Session-Id from initialize. If it is lost or rejected, initialize again — do not invent an ID.

There are no read_file / write_file / edit_file / list_* / search_files tools. Read and write with the shell or the HTTP file API.

File transfer (bidirectional HTTP)

Same tunnel and token as MCP. Default max size: 64 MiB (portal.maxTransferBytes). Uploads replace atomically. Downloads support Range and return SHA-256.

GET    {base}?op=info              capability + workspace
GET    {base}?glob=**/*            list files
GET    {base}/<relpath>            download
HEAD   {base}/<relpath>            metadata
PUT    {base}/<relpath>            upload
DELETE {base}/<relpath>            delete
POST   {base}?op=pack              zip  JSON { "paths": ["src"] }
POST   {base}?op=unpack&dest=.     unzip (raw zip body)

Free ngrok domains need the header ngrok-skip-browser-warning: 1.

# download
curl -fsSL -H "ngrok-skip-browser-warning: 1" \
  "$BASE/README.md" -o README.md

# upload
curl -fsSL -H "ngrok-skip-browser-warning: 1" \
  -T ./photo.png "$BASE/incoming/photo.png"

# pack a folder
curl -fsSL -H "ngrok-skip-browser-warning: 1" \
  -H "Content-Type: application/json" \
  -d '{"paths":["src"]}' "$BASE?op=pack" -o src.zip

Tunnel providers

Provider URL Notes
cloudflare-quick (default) new random trycloudflare.com each start Fast to try; not stable
cloudflare-named fixed hostname Needs stored Tunnel token, public hostname, fixed local port
ngrok-reserved reserved domain (e.g. *.ngrok-free.dev) Persistent URL
custom your command or an existing URL Placeholders: {{port}} {{token}} {{workspace}}. Empty command + customTunnelUrl = attach mode

Route token is the secret path segment. MCP lives at /mcp/<token>. Leave portal.routeToken empty to generate one on start.

Commands (palette)

  • Portal: Start / Stop
  • Portal: Copy URL
  • Portal: Check Tunnel
  • Portal: Settings
  • Portal: Install cloudflared / Install/Upgrade ngrok
  • Portal: Show Log / Show Agent Terminal

Useful settings: portal.startOnActivation (default on), portal.showCommandsInTerminal, portal.localPort (0 = auto, except named Cloudflare).

Build

Requires Node 18+ and VS Code ^1.95.0.

npm install
npm run build      # esbuild → dist/extension.js
npm run typecheck
npm run package    # .vsix (no bundled node_modules)

Load the packaged VSIX, or run the extension in a desktop VS Code host (extensionKind: ui + workspace).

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured