Skip to content
Portal logo

Portal MCP server

Which MCP servers are Portal's own, from the official registry and from asking its own domain, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.

read 2026-10-10

← Back to Portal

Whose server it is
  • Addresshttps://mcp.makeportals.com/mcpnot in the official registry: answered when asked

No entry in the official MCP registry names this server. It answered on makeportals.com when the Atlas asked at the address servers are usually mounted on, so it is the vendor's own. Clients and catalogues that list servers from the registry do not show it.

When we asked itchecked 2026-10-27
  • Stateanswerschecked 2026-10-27
  • Tools54
  • Server calls itselfportal-mcp
  • Server version1.0.0
  • Protocol version2025-06-18

On 2026-10-27 the server answered initialize and tools/list without a sign-in. First answer in 83 ms.

Should an agent connect itNot proven either way yet
  • Whether its tools do the product's job has not been judged yet.

Once connected

  • upload_source, upload_source_chunk, upload_env, builder_publish, update_portal_env change data without a sign-in: anyone with the address can call them.
  • Its definitions take about 15566 tokens of context: enable only the tools a task needs.

Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.

Measured dailydaily checks: 9, the first on 2026-10-27
  • INITE MCP score70 of 100answers 100 · definitions 80 · context 56 · connects 100 · lowered by the warning signs below
  • Answered100% of days9 of 9 daily checks
  • Median first answer240 ms
  • Space in an agent's context≈ 15,566 tokensthe definitions of all its tools (54), which an agent carries on every turn
  • Tool definitionsB · 80 of 100
  • Typed results0 of 54 toolsdeclared outputSchema: results come typed, read once
  • Parameters without a description: in 12 of 54
  • Not saying whether it only reads or can destroy: 53 of 54

Worth a look

  • Tools that change data, on a server that answers without a sign-in: upload_source, upload_source_chunk, upload_env, builder_publish, update_portal_env

A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (25%), doing the product's job (25%), definitions (20%), context (10%), use (10%) and how readily a client connects (10%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →

Tools it offers54 tools · read 2026-10-27
  • portal_login

    Sign in to Portal. Returns a verification_url and device_code. After this tool returns, do these steps IN ORDER: Step 1 (REQUIRED FIRST): Run a shell command to open the browser: macOS: open "VERIFICATION_URL" Linux: xdg-open…

  • portal_login_check

    Wait for login approval after portal_login returned a device_code. This tool polls for up to 30 seconds, then returns. IMPORTANT: Only call AFTER you have opened the browser with the verification_url. If status is "pending", call this…

  • portal_logout

    Sign out of Portal for this session.

  • portal_status

    Check if you're signed in to Portal. Call this first — if not authenticated, run portal_login. Portal creates shareable links to live, sandboxed browser sessions for any website. AFTER AUTH, follow this flow: CRITICAL RULE: NEVER ask for…

  • normalize_ptl

    Normalize a .ptl Portal spec into canonical form.

  • validate_ptl

    Validate a .ptl Portal spec without creating a portal.

  • upload_source

    Send a local project to Portal for deployment. Returns a shell command to upload the zip. IMPORTANT: Do NOT base64-encode files or pass file contents as tool arguments. That wastes tokens. This tool returns a shell command that uploads…

  • upload_source_chunk

    Upload a project zip through this MCP connection, in base64 chunks. Use when the shell command from upload_source is blocked or your sandbox cannot reach the upload host. Max 25 MB zip; each chunk must decode to at most 512 KB. Steps (run…

  • import_github_repo

    Import a public GitHub repository as the source for a local-file Portal. Returns a source_id to use in make_portal. This creates a snapshot of a repository commit for reproducible deployment. It is NOT live branch sync. Use this when the…

  • upload_env

    DEPRECATED — prefer configure_runtime instead (opens a secure browser form so values never enter chat). Upload environment variables for a local-file/GitHub Portal. Returns an env_id to use in make_portal. Read the .env file and pass its…

  • configure_runtime

    Open a hosted form for the user to securely enter runtime variables (API keys, DB URLs, etc). Values never pass through AI chat. Returns a hosted_url — open it for the user. Before opening, tell the user: "This app needs setup values…

  • make_portal

    STOP: You MUST show the user a draft summary (greeting, selectors, mode, URL) and ask for a name BEFORE calling this tool. If you have not done that yet, do it now instead of calling make_portal. Create a Portal and get a shareable link…

  • get_portal

    Check if a portal is ready. Returns "provisioning", "ready" (with URL), or "failed". Poll every 15s for up to 5 min — cold starts take time. When "ready", open the URL for the user.

  • list_portals

    List the user's recent portals (up to 20, newest first). Use this to check if a portal already exists for the same URL before creating a new one. Also useful for the user to re-open or share a previous portal.

  • get_portal_sessions

    Get session replays for a portal. Returns viewer sessions with conversation logs and signed recording URLs (10 min). If the user says "get me session replays for X", call list_portals first to find the matching portal_id, then call this…

  • configure_portal

    Name a portal, set usage limits, and add a call-to-action button. Auto-refill stays enabled. The user can adjust further in the web UI. Call after make_portal to customize the link before sharing. The URL slug is set at creation time via…

  • browser_start_link_session

    Start driving a portal's live browser using only its share link (no API key needed). You get what a visitor with that link gets: it spends ONE use of the link, lasts the portal's session time (10-30 min), real clicks/typing/scrolling only…

  • browser_end_link_session

    End a link session early (does not refund the use).

  • browser_list_portals

    List the portals your API key can drive: your persistent portals, including ones built at makeportals.com/create. Use the `portal` value with the other browser_ tools.

  • browser_status

    Is the portal in use right now (in_use), when was it last opened (last_opened_at) and last left (last_session_ended_at)? Use this for "has my teammate opened it yet?". Also: controllable by you now, uptime, compute estimate, watch_url…

  • browser_screenshot

    Screenshot of the portal's live browser tab. Coordinates for browser_action: CSS px = screenshot px / device_pixel_ratio.

  • browser_action

    One real input in the portal's live browser (the page cannot tell it from a person; blocked controls stay blocked). action: click | hover (x,y or selector; clicks:2 for double) · type (text, optional selector to click first, submit:true…

  • browser_live_view

    Show the user a live, view-only picture of the portal's browser right here in the chat. Call this ONCE at the start of any task in a portal (before browser_action), so the user can watch you work. It does not take the seat or interrupt…

  • browser_open_portal

    Embed the portal's interactive viewer right here in the chat — the user can click, type and use it inline. Pass `link` (a https://www.makeportals.com/demo/... share link) or `portal` (name/slug/portal_id — its first share link is used)…

  • browser_eval

    Run JavaScript in the page of YOUR OWN portal (not available with a share link). Returns the value (JSON). ≤ 20 KB of code, ≤ 30 s. It runs as the signed-in site: use it to read the page, not to bypass what the portal blocks.

  • builder_start

    Open a Portal Builder session: the same Builder as makeportals.com/create, with you as the creator. Claims a live cloud browser on `url` and talks to the Builder AI, which configures the Portal: mode (play/watch), what the AI says and is…

  • builder_message

    Send the next message to the Builder AI in a session (answer its questions or ask for changes: "make the VC tougher", "block billing and settings", "sessions of 20 minutes", "add this FAQ to what the AI knows"). Returns its replies, any…

  • builder_status

    Settings, recent conversation and publication state (share link once published) for a Builder session.

  • builder_publish

    Publish the Builder session as a Portal. Show the user the settings and get their OK first. Returns share_url immediately; it starts working when publication finishes. Poll builder_status until publication.state is "ready".

  • builder_end

    Close a Builder session without publishing and release its cloud browser.

  • update_portal_env

    Update environment variables on an existing portal without spending a credit. Pass the env_id from a completed configure_runtime session. IMPORTANT: This only updates the pool config. Already-running VMs keep their old env until they are…

  • create_link

    Create a new share link for a portal with optional per-link greeting and goal. Each link gets its own URL. Use greeting/goal to personalize the experience per recipient. Example: create a link for "John" with a greeting mentioning his…

  • list_links

    List all share links for a portal, including their dynamic greeting/goal if set. Shows each link's URL, label, uses remaining, session count, and any per-link greeting/goal overrides.

  • configure_embed

    Enable embedding for a portal on a specific website. Ask the user what site they want to embed on (e.g. "https://yoursite.com"). Returns the embed URL, an <iframe> snippet, and a console_snippet. The console_snippet is a…

  • save_login

    Spin up a sandbox browser so the user can sign into a site. This is the ONLY way to handle authentication — NEVER ask for credentials in chat. You only need the URL. Call this tool, then IMMEDIATELY open the hosted_url in the user's…

  • save_login_complete

    Save the login state after the user has logged in via the hosted UI. After save completes, the hosted UI shows a "Keep this Portal logged in?" prompt where the user can optionally store credentials for auto re-login. This is handled…

  • record_demo

    Record a demo by clicking through a site. After this returns, in your next tool call batch: 1. Run shell: open "HOSTED_URL" (macOS) | xdg-open (Linux) | start (Windows) 2. Call get_session with the session_id to start polling Then poll…

  • start_recording

    Begin the actual recording after user is ready at the hosted UI.

  • stop_recording

    Stop recording and compile the demo into structured scenes. Returns compiled scenes with narration, actions, selectors, and Q&A. Show the user the compiled scenes/greeting/Q&A. Ask: "What do you want to call this? Look good to go?" Once…

  • pick_selectors

    Open a hosted browser where the user visually clicks elements to block in play mode. After this returns, in your next tool call batch: 1. Run shell: open "HOSTED_URL" (macOS) | xdg-open (Linux) | start (Windows) 2. Call get_session with…

  • pick_selectors_complete

    Retrieve the selectors the user picked in the hosted selector UI. Call this after get_session shows status "selectors_saved". Returns the selectors array to use as blocked_selectors in make_portal. Show the user the selectors. Ask: "What…

  • get_session

    Wait for a login, recording, or selector session to reach a terminal status. This tool polls the server for up to 30 seconds, then returns. If status is still pending, call this tool again immediately — do NOT ask the user. Repeat up to…

  • create_script

    Explore a website and auto-generate a demo plan, guardrails, Q&A, and knowledge (~10s for public URLs). Returns script_id. Poll get_script every 5-15s until status is "draft". With saved_state_id: uses headless browser with saved login…

  • get_script

    Check if a script is ready. Statuses: "generating", "draft" (ready for review), "failed". CRITICAL: When "draft", you MUST show ALL of these to the user. Do NOT skip any step: 1. MODE: "Should this be a guided demo (watch) or free-browse…

  • create_credential

    Create a credential vault entry for automated login. Credentials are encrypted at rest and never returned via API. Use with save_login or create_script for pre-authenticated sessions. IMPORTANT: ONLY use this tool when the user…

  • list_credentials

    List all credential vault entries (metadata only, no secrets).

  • generate_totp

    Generate a TOTP 6-digit code from a stored credential vault entry. The credential must have a totp_secret. Returns the current code and seconds remaining. Use this when re-authenticating a session that requires 2FA.

  • delete_credential

    Delete a credential vault entry.

  • buy_credits

    Buy Portal credits ($0.40 each). Starter: 10/$4, Builder: 50/$20, Pro: 100/$40. Opens Stripe checkout. Returns checkout_url — open it in the user's browser. Credits are added automatically after payment.

  • subscribe

    Subscribe to the Builder plan ($20/month). Opens a Stripe checkout page. Builder plan includes: 5 active Portals, 50 demo sessions/month, 10 min sessions, 5 concurrent viewers, analytics, and additional sessions at $0.80 each. Returns…

  • subscription_status

    Check the current subscription status (tier, billing period, trial end). Returns: tier (free/builder), subscription status, period end date, and trial end date. Use this to check if the user is subscribed before suggesting subscribe or…

  • cancel_subscription

    Cancel the Builder subscription. Access continues until end of billing period. Cancellation is immediate but access remains active until the period ends. Returns the date when access will expire.

  • deploy_example

    Deploy a built-in example app to demonstrate a Portal feature. Available examples: "rate-limit-demo" — React + Express chat app with a mock LLM backend. Demonstrates Portal's API rate limiting: each chat message calls POST /api/chat…

  • get_creation_logs

    Retrieve the tool call log for an MCP session. Shows every tool called, inputs, outputs, errors, and timing. Use this to debug portal creation issues — see exactly what tools were called and what they returned. The current session's ID is…

How to connect

Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:

{
  "mcpServers": {
    "makeportals": {
      "type": "http",
      "url": "https://mcp.makeportals.com/mcp"
    }
  }
}

Add it

Claude Code, in a terminal

claude mcp add --transport http makeportals https://mcp.makeportals.com/mcp

Add to CursorAdd to VS Code

claude.ai, ChatGPT and other clients: add https://mcp.makeportals.com/mcp as a custom connector in the settings.

Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.