LIVE PORTAL OPEN STANDARD · V0.1 DRAFT docs bench directory github↗
BUILT WITH OPUS 4.7 · HACKATHON ENTRY APR 2026
The drop-in visit layer for Claude Code & any LLM client

MCP solved
integration.
Portal solves
scale.

Every MCP server you connect burns tokens on every message, forever. Portal loads tools on visit, drops them on exit. Fire and forget — the way the long tail of services was always going to need.
claude-code · portal visit · demo.visitportal.dev
~/fleet claude --visit demo.visitportal.dev/portal
GET /portal ................................. 200 OK (340ms)
loading manifest "trending-demo" into context
3 tools available: top_gainers, search_repos, maintainer_profile
context cost: 172 tokens (measured · vs 13,929 for 100 MCP tools preloaded)
~/fleet find me the top 3 AI repos trending this week
calling top_gainers({ limit: 3 })
3 results in 180ms
"agnt-network/portal" +1,240 stars this week
"anthropics/claude-code" +890 stars this week
"modelcontextprotocol/mcp" +720 stars this week
~/fleet exit
session closed · manifest dropped · 0 tokens retained

The claude --visit terminal above shows the intended UX. What ships today is the portal.visit() TS SDK + visit-portal CLI, which produce this exact flow in three lines. Client-side integration into Claude Code is an SDK proposal, not an existing flag.

01THE SCALING WALL

MCP's success created its next problem.

As the number of connected tools grows, loading all tool definitions upfront and passing intermediate results through the context window slows down agents and increases costs. Once too many servers are connected, tool definitions can consume excessive tokens, reducing agent efficiency. — paraphrased, Anthropic engineering guidance on MCP scaling, 2026

Every connected MCP server injects its full tool schema into every turn. Measured on Claude Sonnet 4.5 and Opus 4.5 via Anthropic's count_tokens API: 10 tools = 1,956 tokens. 100 tools = 13,929. 400 tools = 54,677. Projected at 1,000 tools: ≈137,000 — 69% of Sonnet's 200k window, gone before the user types a word.

Scalekit's controlled benchmark on Claude Sonnet 4 across 75 identical tasks: MCP cost 4× to 32× more tokens than lightweight alternatives. A single repo-language check burned 44,026 tokens via MCP vs 1,365 via CLI.

Real Claude Code user, real session: 82,000 tokens — 41% of the window — consumed by tool definitions on an empty conversation. Our bench (below) measures the same shape of waste across a reproducible 48-cell matrix.

02THE NUMBERS

Context tokens consumed, per turn.

benchmark · mcp-vs-portal.json MEASURING

Schema overhead by tool count

Every message. Whether the agent uses them or not.
MCP · preloaded Portal · on visit
10 tools
1,956tok
172tok
50 tools
7,343tok
172tok
100 tools
13,929tok
172tok
400 tools
54,677tok
172tok
1,000 tools*
~137,000tok
172tok
02bPROOF & POSTURE

What's running, not what's promised.

Submission-day snapshot of what the repo produces. Every card is traceable to a file or a commit. If you clone the repo and run pnpm -r test && bash scripts/demo.sh && pnpm --filter @visitportal/bench bench, every number below is reproducible on your box in under ninety seconds.

TESTS
121/121
across spec · bench · visit · cli · reference
pnpm -r test
BENCH CELLS
48
real Anthropic count_tokens · seed 42 · Sonnet + Opus
packages/bench/results/tokens-matrix-v1.json
SDK SIZE
2.25 kB
@visitportal/visit · gzipped · 6.7× under 15 kB ceiling
pnpm --filter @visitportal/visit size
DEMO TIME
7s
boot → manifest → call → conformance → clean shutdown
bash scripts/demo.sh
SPEC SURFACE
2 endpoints
GET /portal · POST /portal/call · one manifest schema
docs/spec-v0.1.1.md
CONFORMANCE
30/30
vectors · ajv ↔ lean validator agree on every one
packages/spec/conformance/vectors.json

As of 2026-04-19, one commit per phase on main: c82c882 · 98ec8d9 · d1c40ba · 272cd53 · f6c8b32 · 8f1c997. Full phase table in docs/status.md.

03THE IMPACT
01
81×
less context tax at
100-tool scale (measured)
02
99.9%
schema-overhead tokens
eliminated at 1k tools
03
0
installs required
on visitor side

Cost math: Sonnet 4.5 input ($3/M tokens), 100 turns/day, 30 days. 100-tool MCP burns ~$125/user/mo of pure schema overhead; Portal equivalent ~$1.55. Projected 1,000-tool MCP ≈ $1,230/user/mo. Scale across an enterprise fleet and the numbers become structural.

04SIDE-BY-SIDE

What changes mechanically.

MCP (today) Portal (v0.1)
When tools load Every turn, every message, forever Once per visit, then dropped
Where they live Permanently in context window In context only during the visit
Cost shape Fixed tax on every message One-time read, fire-and-forget
Visitor install Client must pre-configure server None. Any LLM client visits cold
Scaling ceiling ~1,500 tools saturates Sonnet's 200k window (projected from measured linear fit) Unbounded — 172 tokens per visit, flat
Residue after use Still loaded, still billed Gone. No trace. Next turn free.
Monetization surface None per use Every visit = billable event
05THE ENTIRE SPEC

Two endpoints. One manifest.

Portal is deliberately small. The base spec fits on a napkin. Anything a provider already has — an MCP server, a REST API, a function list — can be wrapped in an afternoon.

portal.json · v0.1 SPEC · PUBLIC DOMAIN
# GET /portal — the manifest
{
  "portal_version": "0.1",
  "name": "Star Screener",
  "brief": "I screen trending GitHub repos. Ask for top
            gainers, keyword matches, maintainer profiles.",
  "tools": [
    {
      "name": "top_gainers",
      "params": { "limit": "number" }
    }
  ],
  "call_endpoint": "https://demo.visitportal.dev/portal/call",
  "auth": "none",          // optional: api_key, erc8004
  "pricing": { "model": "free" }  // optional: x402 micropayment
}

# POST /portal/call — execute a tool
→ request:  { "tool": "top_gainers", "params": { "limit": 5 } }
← response: { "ok": true, "result": { ... } }

# That's the whole spec. Everything else is optional.
06THE VISIT

A drop-in in under ten seconds.

01 ARRIVE URL handed in Agent receives a URL. Zero prior config.
02 READ Manifest fetched GET /portal returns name, brief, tools.
03 CALL Tool executed LLM picks, POST /portal/call runs it.
04 USE Result lands Output flows back into context.
05 LEAVE Session ends Manifest drops. Zero residue. Next turn free.
06bTHE WIRE

Two calls. One manifest. Nothing sticks around.

No runtime, no daemon, no registration. The visitor does HTTP; the provider does HTTP. Everything between the first GET and the final POST is the manifest — in context during the visit, gone after.

Portal visit sequence diagram Two HTTP calls between an LLM visitor and a provider. GET /portal returns a 172-token manifest. POST /portal/call runs a tool and returns the result. Session ends; manifest is dropped from context; zero residue remains. VISITOR Claude Code · any LLM client PROVIDER your service · two endpoints 1 · ARRIVE GET /portal no body · Accept: application/json 200 OK · manifest (172 tokens) portal_version, name, brief, tools[], call_endpoint 2 · CALL POST /portal/call { tool: "top_gainers", params: { limit: 3 } } 200 OK · result { ok: true, result: [...] } | { ok: false, error, code } 3 · LEAVE session ends · manifest dropped · next turn pays 0 tokens
Rule 1. Everything under /portal/call is stateless. If a tool needs a session, use A2A — it's the next layer up.
Rule 2. The manifest is the contract. If an SDK can validate it against manifest.schema.json, the SDK can call any Portal on the internet.
Rule 3. Base stays neutral. Auth, pricing, identity, registry — all are optional Portal Extensions, never in the base spec.
07POSITIONING

Portal is not a competitor. It's a subset.

The agent-interop space is consolidating. Portal slots in as the lightweight entry point — everything else upgrades from here.

MCP
Trusted, installed tools your agent uses daily. The foundation. Portal wraps MCP servers in a one-line adapter for drive-by visits.
A2A
Long-running multi-agent task coordination with lifecycles, artifacts, state. Portal is a strict subset — visits upgrade to A2A when they need tasks.
SKILLS
Procedural knowledge preloaded into an agent. Portal is the opposite: capability loaded only for the visit, then released.
› PORTAL
Two endpoints. No install. Any LLM client, any service, any time. The visitor-side half of the open agent web.
07bWHO BENEFITS

Three personas. One architecture.

The scaling wall is not abstract — it hits different roles differently. Portal's unit economics change the answer for each.

Persona Pain today With Portal
Claude Code power user 82k tokens burned on preloaded tool schemas every turn — 41% of Sonnet's window gone before typing. Visits exactly what's needed, 172 tokens per visit, nothing carried forward.
Service provider No low-friction way to expose tools to agents. An MCP server is an afternoon of protocol plumbing plus ongoing maintenance. Two HTTP endpoints, one manifest, ship in an hour. Any existing REST/GraphQL service is wrappable.
Enterprise fleet 1,000-tool MCP deployment at 100 turns/user/day = projected ~$1,230/user/mo in pure schema overhead on Sonnet. Same fleet on Portal: ~$1.55/user/mo. The 99.9% savings compounds across seats.

Enterprise math: Sonnet 4.5 input $3/M · 100 turns/day · 30 days · 1,000 tools projected at ~137k tokens per turn via the linear fit of measured counts. Portal's 172 tokens per visit are measured directly. Re-derive: packages/bench/results/tokens-matrix-v1.md.

08WHAT PORTAL UNLOCKS

A transaction surface, by construction.

MCP tools are installed once and used forever — there's no natural moment to charge, gate, or monetize. Portal's visit model creates that moment on every interaction.

Pay-per-visit

new surface

Every visit is a billable event. x402 micropayments per call. The Stripe-of-agents primitive.

$0.001/ call

Gated tiers

new surface

Manifest exposes 3 free tools openly; 10 premium tools revealed after payment or identity check.

3 → 10tools

Session-scoped skills

new surface

Visitor buys a specialized skill for this session only. Uses it. Leaves. No install, no subscription.

1visit

Identity-gated access

new surface

ERC-8004 verified agents get writes; anonymous visitors get reads only. Trust scales with the visit.

verified→ writes
Every visit is a billable event. Portal doesn't just solve the scaling problem — it creates the monetization surface the agent economy has been missing.
09WHAT WE'RE BUILDING

The visitor-side half of the agent-interop story.

A published v0.1 spec. A reference Portal at a live service. A portal.visit() SDK in TypeScript and Python. A Claude Code demo where the agent visits a Portal cold, executes real work, and leaves — all in under ten seconds with zero configuration.

A reproducible MCP-vs-Portal benchmark suite so every claim on this page is independently verifiable. Ten popular MCP servers Portal-wrapped as proof of compatibility. A public directory so Claude Code users can discover Portals the way they already discover repos.

Built by operators, not researchers — the team behind ClawPulse (streaming intelligence for agents), AGNT (agent marketplace), and the AGP envelope. We've been shipping this category for a year. Portal is the piece that makes the rest of the stack compounding.