MCPcopy
hub / github.com/amalshaji/portr

github.com/amalshaji/portr @v1.0.14 sqlite

repository ↗ · DeepWiki ↗ · release v1.0.14 ↗
4,208 symbols 12,122 edges 246 files 57 documented · 1%
README

GitHub License GitHub Release Docs

Portr is a tunnel solution that allows you to expose local http, tcp or websocket connections to the public internet. It utilizes SSH remote port forwarding under the hood to securely tunnel connections.

Portr is primarily designed for small teams looking to expose development servers on a public URL. It is not recommended for use alongside production servers.

Features

  • 🎉 Expose local HTTP, TCP, and WebSocket services on public URLs.
  • 🚨 Built-in local inspector on http://localhost:7777 for request inspection, replay, and WebSocket session debugging. Watch video.
  • 🤖 Agent-friendly local request logs with portr logs, backed by ~/.portr/db.sqlite.
  • 👾 Admin dashboard for team, user, and connection management. Watch video.

Quick Start

  1. Set up a Portr server or use an existing one.
  2. Install the Portr client on your machine.
  3. Start a local service, then expose it:
portr http 9000

To pin the tunnel to a subdomain:

portr http 9000 --subdomain amal-test

Starting an HTTP tunnel does three useful things immediately:

  • Creates a public HTTPS URL that forwards to your local service.
  • Starts the Portr inspector locally at http://localhost:7777.
  • Persists HTTP request logs locally so they can be queried from the CLI.

Inspector And Logs

The local inspector lets you:

  • inspect incoming HTTP requests and responses
  • replay stored requests
  • inspect headers and payloads
  • monitor upgraded WebSocket sessions and captured frames

The same stored request data is available from the CLI:

# Show the latest logs for a subdomain
portr logs amal-test

# Filter by URL substring
portr logs amal-test /api/

# Emit the full stored records as JSON
portr logs amal-test --json

Setup

Agent Skills

This repo includes a portr-cli skill for Claude Code and Codex through Vercel Labs skills.

Install it into both agents from GitHub:

npx skills add amalshaji/portr --skill portr-cli -a claude-code -a codex -y

To install it globally instead:

npx skills add amalshaji/portr --skill portr-cli -a claude-code -a codex -g -y

Contributing

Please read through our contributing guide and set up your development environment.

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for the full license text.

Extension points exported contracts — how you extend this code

AnimatedSpanProps (Interface)
(no doc)
docs-v2/components/magicui/terminal.tsx
CronFunc (FuncType)
(no doc)
internal/server/cron/tasks.go
TypingAnimationProps (Interface)
(no doc)
docs-v2/components/magicui/terminal.tsx
User (Interface)
(no doc)
internal/server/admin/web-v2/src/types/index.ts
TerminalProps (Interface)
(no doc)
docs-v2/components/magicui/terminal.tsx
Team (Interface)
(no doc)
internal/server/admin/web-v2/src/types/index.ts
Sparkle (Interface)
(no doc)
docs-v2/components/magicui/sparkles-text.tsx
CurrentTeamUser (Interface)
(no doc)
internal/server/admin/web-v2/src/types/index.ts

Core symbols most depended-on inside this repo

r
called by 184
internal/server/admin/static/assets/index-CFj_F95x.js
e
called by 160
internal/server/admin/static/assets/index-CFj_F95x.js
t
called by 144
internal/server/admin/static/assets/index-CFj_F95x.js
Close
called by 142
internal/client/logs/logs.go
n
called by 140
internal/server/admin/static/assets/index-CFj_F95x.js
oe
called by 125
internal/server/admin/static/assets/index-CFj_F95x.js
cn
called by 108
internal/server/admin/web-v2/src/lib/utils.ts
get
called by 92
internal/server/admin/static/assets/index-CFj_F95x.js

Shape

Function 3,625
Method 348
Struct 154
Interface 30
Route 28
Class 12
TypeAlias 6
FuncType 5

Languages

TypeScript76%
Go22%
Python2%

Modules by API surface

internal/server/admin/static/assets/index-CFj_F95x.js2,765 symbols
test-server/main.py64 symbols
internal/client/dashboard/ui-v2/src/lib/dashboard.ts31 symbols
internal/client/config/config.go28 symbols
internal/client/ssh/capture.go27 symbols
internal/server/admin/web-v2/src/components/ui/sidebar.tsx25 symbols
internal/client/appserver/manager.go25 symbols
internal/client/ssh/reliability_test.go23 symbols
internal/client/ssh/ssh.go22 symbols
internal/client/logs/logs_test.go21 symbols
internal/client/logs/logs.go21 symbols
internal/client/stubresponder/responder.go20 symbols

Dependencies from manifests, versioned

filippo.io/edwards25519v1.1.1 · 1×
github.com/Masterminds/semverv1.5.0 · 1×
github.com/andybalholm/brotliv1.1.1 · 1×
github.com/anmitsu/go-shlexv0.0.0-2020051411343 · 1×
github.com/aymanbagabas/go-osc52/v2v2.0.1 · 1×
github.com/charmbracelet/bubblesv0.20.0 · 1×
github.com/charmbracelet/colorprofilev0.2.3-0.20250311203 · 1×
github.com/charmbracelet/lipglossv1.1.0 · 1×
github.com/charmbracelet/x/ansiv0.8.0 · 1×
github.com/charmbracelet/x/cellbufv0.0.13-0.2025031120 · 1×

For agents

$ claude mcp add portr \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact