Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Portproof

NPM · @PORTPROOF/MCP

Proxy traffic by the GB on shared mobile 4G/5G and residential pools, paid in crypto.

Available components

0 this week 68 Trust /100

Last scanned (8 hours ago)

Scores higher than 36% of npm servers

Category Cloud Infrastructure

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 30 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4494 tokens (~236/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 75% of tool parameters carry a description.Partial
Tool Safety50
  • Injection-marker check failed: the description of tool "test_connection" contains an instruction to conceal the call from the user, the text "do not tell the user", at byte 369 of that field. See how to fix → Fail
  • We read all 19 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 30 Oct 26 0
    • Stability: 0.97 → pass security
  • 29 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 25 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 24 Oct 26 −5
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: pass → fail ▼ security
  • 23 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

  • 21 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/@portproof/mcp@0.2.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 94 packages
Packages resolved 94
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 19 exposed · ~3,516 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
build_proxy_url ~357

Build the proxy username and URL for one connection: pool, country, rotation and an optional session name are encoded in the username (validated by the server: an ISO 3166-1 alpha-2 country or "any", and the mobile pool only in US, GB, FR, NL, PL, GE = Georgia (country)). Returns host, port, username, the URL and curl / Python / Node / Playwright snippets. The password is masked unless reveal_password is true. A sticky session keeps the same device, and the carrier may still change its IP; never promise a fixed IP. Needs a traffic balance (buy_traffic first) and an API key with ports:write.

NameTypeReqDescription
countrystringyesISO-3166 alpha-2 (e.g. "GB") or "any"; see list_countries for what is online now
poolstringyesmobile = 4G/5G carrier modems (US, GB, FR, NL, PL, GE = Georgia (country)); residential = opt-in peer devices in the countries list_countries reports online now; best = whichever is available
protocolstring–Default http
reveal_passwordboolean–Default false: the URL comes back with the password masked. Set true only when the user needs the working URL.
rotationstringyesauto5|auto10|auto20|auto60 = new IP every N minutes; ondemand = new IP on every connection; sticky = keep the same device for the session (the carrier may still change its IP)
sessionstring–Session name, a-z 0-9 _ only. Optional: a stable one is derived for sticky.

No output schema declared.

No examples provided.

buy_port ~289

Dedicated mobile ports: buy one dedicated mobile port (one modem, one SIM, one customer) for a SKU and term; check search_inventory first. For proxies by the GB use buy_traffic instead. CHARGES MONEY: requires confirm: true and an idempotency_key; refused otherwise. Fails with kyb_required (402) until the org has passed KYB tier t1, and no_inventory (409) when the SKU is sold out. Returns the Port with credentials and cost_cents. Partner network SKUs (buy_via "cart" in get_pricing) are bought in the web shop: for them nothing is charged and the answer is purchased: false with shop_url, or not_on_sale when they are not on sale for your organisation.

NameTypeReqDescription
auto_renewboolean––
carrier_idstring–Pin a carrier (from search_inventory); omit for any
confirmbooleanyesMust be exactly true. Set it only after the user has agreed to this specific action.
idempotency_keystringyesCaller-chosen unique key (e.g. a UUID). Re-sending the same key with the same input replays the stored result instead of acting twice.
skustringyesSKU from get_pricing (field skus), e.g. "lt-4g"
termstringyes–

No output schema declared.

No examples provided.

buy_traffic ~416

Buy whole GB of proxy traffic (or the one-off 0.5 GB trial) from the wallet balance. CHARGES MONEY: requires confirm: true, accept_terms: true (the user accepts the terms, the acceptable-use policy and the immediate start of the service; ask them) and an idempotency_key; refused otherwise. Needs an API key with ports:write. The server prices the order from the tier table (see get_pricing, field traffic); the GB are added to the same balance and credentials. Validity is what get_traffic reports: limits.validity_days 0 means GB never expire. Fails with insufficient_funds (402) when the wallet is too low, kyb_required_for_volume (402) above the monthly volume for unverified organisations, trial_already_used (409), idempotency_conflict (409) when the idempotency_key was already used for a different purchase. A refused purchase stays stored under its idempotency_key for 24 h: after fixing the cause (for example a wallet top-up), buy with a new key. Returns the order with gb and cost_cents as the server recorded them.

NameTypeReqDescription
accept_termsboolean–Must be exactly true: the user accepts the terms (https://portproof.org/legal/terms), the acceptable-use policy (https://portproof.org/legal/aup) and the immediate start of the service. Ask the user;…
confirmbooleanyesMust be exactly true. Set it only after the user has agreed to this specific action.
gbinteger–Whole GB to add to the balance. Omit when trial is true.
idempotency_keystringyesCaller-chosen unique key (e.g. a UUID). Re-sending the same key with the same input replays the stored result instead of acting twice.
trialboolean–Buy the one-off 0.5 GB trial instead (once per customer).

No output schema declared.

No examples provided.

get_passport ~116

Port details (API object: passport): label (country, carrier, port id), network (own = Own network, partner = Partner network), carrier, egress IPs, geo consensus, reputation, rotation and uptime statistics, throughput and exclusivity. Own network ports add the SIM contract class, usage against the daily cap and concurrent sessions (proof the port is not shared); a Partner network port has none of these, because nothing of ours runs on its device. Credentials are never included.

NameTypeReqDescription
port_idstringyes–

No output schema declared.

No examples provided.

get_port ~146

Full detail for one port: label, network, state, carrier, listeners, credentials (only if you own it), allowlist, egress IPs, rotation settings, usage today, uptime and subscription. Partner network ports also carry credentials.http and credentials.socks5 (each with its own host, port, login and password), capabilities (controls the port supports), renewal (price_cents, ends_at, auto_renew, can_renew) and rotation_url: the Portproof link that rotates the IP when fetched (60 s cooldown). proxy_urls gives ready-to-use http and socks5 URLs, each built from its own credential set.

NameTypeReqDescription
port_idstringyes–

No output schema declared.

No examples provided.

get_pricing ~215

Public price table. Field traffic: proxy traffic by the GB (tier table with the per-GB price by order size in EUR cents ex VAT, package sizes, the 0.5 GB trial, validity days, monthly GB without company verification); buy it with buy_traffic. Field skus: dedicated mobile ports with monthly price in cents (EUR, USD for us-4g), supply (evidence signed = Own network, observed = Partner network), volume ladder, weekly/daily term ratios and the 24 h trial. Each SKU says how it is bought (buy_via): "ports" SKUs work with quote and buy_port; "cart" SKUs are Partner network ports, one SKU per term, sold only through the web shop (quote and buy_port answer them with the shop link). Partner network ports are listed only while they are on sale for your organisation, so the list can differ with and without an API key. No API key needed. Prices are quotes only; nothing is charged.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_receipt ~132

Fetch one rotation record from the rotation log by id (rot_...): old/new IPs, whether the IP actually changed, attempts, timing, carrier, geo and reputation snapshot, plus the Ed25519 signature. Records of Own network ports (evidence: signed) are signed on the device; records of Partner network ports (evidence: observed) are recorded by our monitoring and signed by the control plane key cp-2026. The server also verifies the signature against the published keys and reports the result.

NameTypeReqDescription
receipt_idstringyesRotation record id (equals the rotation id, rot_...)

No output schema declared.

No examples provided.

get_status ~62

Public status page data: platform state, per-site uptime and live port counts, per-carrier uptime / first-attempt rotation success / p50 rotation time / published rotation floor, public incidents from the last 30 days and support response time. No API key needed.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_traffic ~112

Proxy traffic balance of the organisation: GB total / used / left, expiry, whether the key is enabled, daily usage and the purchase limits (validity days, monthly GB without company verification, whether the trial is still available). Connection details (host, ports, username base) are included when the API key holds ports:write (credentials is null otherwise); the password is masked here, use build_proxy_url with reveal_password: true when the user needs a working URL. Usage is synced every 5 minutes.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_usage ~99

Traffic for one port over a time window: bytes in/out, peak concurrent sessions, new connections and rotations per bucket, plus totals. Default granularity is hour; use day for long windows to keep the response small.

NameTypeReqDescription
fromstring–ISO 8601 UTC, default: API default window
granularitystring–minute | hour | day (default hour)
port_idstringyes–
to–––

No output schema declared.

No examples provided.

list_countries ~103

Countries with devices online now, per pool: mobile (4G/5G carrier modems, only in US, GB, FR, NL, PL, GE = Georgia (country)) and residential (opt-in peer devices), with totals. Coverage changes through the day: quote the numbers this tool returns and never an older or rounded count. Counts only; exit addresses are never listed. Empty lists mean the numbers are not available right now. No API key needed.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_ports ~105

List the ports owned by this API key as compact summaries: label (country, carrier, port id), network (own = Own network, partner = Partner network), state, egress IPs, rotation, usage, subscription end and auto_renew. No credentials: use get_port for those. Paginated: pass next_cursor as cursor to continue.

NameTypeReqDescription
cursorstring–next_cursor from the previous page
limitinteger–Page size, default 50

No output schema declared.

No examples provided.

quote ~129

Price a purchase before buying: unit price, volume discount and total in cents for a SKU, term (monthly | weekly | daily) and quantity. For a Partner network SKU (buy_via "cart") the answer is its listed price per port and the web shop link, where the cart shows the total; not_on_sale when it is not on sale for your organisation. Read-only, nothing is charged.

NameTypeReqDescription
quantityintegeryes–
skustringyesSKU from get_pricing (field skus), e.g. "lt-4g"
termstringyes–

No output schema declared.

No examples provided.

renew_port ~228

Dedicated ports: renew one port for one more term now, paid from the account balance. Read get_port first: renewal.can_renew says whether it can be renewed now and renewal.price_cents what one more term costs. A Partner network port is renewed on the network first and ends_at is the end it confirmed; there is no grace period after a term ends. CHARGES MONEY: requires confirm: true and an idempotency_key; refused otherwise. Errors: insufficient_funds (402, nothing charged: top up the balance), conflict (409, for example while an earlier renewal is still being confirmed), supply_source_error (502, the renewal was refused and the charge refunded). Returns ends_at and cost_cents.

NameTypeReqDescription
confirmbooleanyesMust be exactly true. Set it only after the user has agreed to this specific action.
idempotency_keystringyesCaller-chosen unique key (e.g. a UUID). Re-sending the same key with the same input replays the stored result instead of acting twice.
port_idstringyes–

No output schema declared.

No examples provided.

rotate ~226

Rotate IP: request a new egress IP for a port and wait (up to 180 s in all) for the rotation record, signed on the device for Own network ports (evidence: signed) or recorded by our monitoring for Partner network ports (evidence: observed). A rotation still running after the API's first answer is followed on its status link. Changes live proxy state: requires confirm: true and an idempotency_key; refused otherwise. Carriers sometimes return the same IP (rotated: false, reason carrier_sticky); a rotation record is written either way. 429 port_cooldown (with retry_after seconds) inside the 60 s cooldown. Included in the subscription: no charge.

NameTypeReqDescription
confirmbooleanyesMust be exactly true. Set it only after the user has agreed to this specific action.
idempotency_keystringyesCaller-chosen unique key (e.g. a UUID). Re-sending the same key with the same input replays the stored result instead of acting twice.
port_idstringyes–

No output schema declared.

No examples provided.

search_inventory ~111

Dedicated mobile ports: available Own network dedicated mobile ports per country / site / carrier, with the number available and whether new ports are wait-listed. Use the returned carrier_id to pin a carrier in buy_port. Partner network ports are not listed here: get_pricing lists the ones on sale for you. No API key needed.

NameTypeReqDescription
carrierstring–Carrier name filter, exactly as search_inventory returns it
countrystring–ISO-3166 alpha-2, e.g. "LT"

No output schema declared.

No examples provided.

set_auto_renew ~189

Dedicated ports: switch auto-renew of one port on or off. On: the port is renewed from the account balance shortly before its term ends (a short balance means it ends). Off: the port ends at the end of its current term, with no refund. Changes the subscription: requires confirm: true and an idempotency_key; refused otherwise. No charge now.

NameTypeReqDescription
confirmbooleanyesMust be exactly true. Set it only after the user has agreed to this specific action.
enabledbooleanyestrue = renew from the account balance before the term ends; false = the port ends at the end of its term
idempotency_keystringyesCaller-chosen unique key (e.g. a UUID). Re-sending the same key with the same input replays the stored result instead of acting twice.
port_idstringyes–

No output schema declared.

No examples provided.

set_rotation_schedule ~199

Set the automatic rotation interval for a port: 0 = sticky (never rotate on a schedule), otherwise 60..86400 seconds. The schedule keeps running between API calls. When get_port shows capabilities.rotation_interval: false the port has no schedule control. A change the network has not confirmed yet answers conflict (409); try again later. Changes live proxy state: requires confirm: true and an idempotency_key; refused otherwise. No charge.

NameTypeReqDescription
confirmbooleanyesMust be exactly true. Set it only after the user has agreed to this specific action.
idempotency_keystringyesCaller-chosen unique key (e.g. a UUID). Re-sending the same key with the same input replays the stored result instead of acting twice.
interval_sintegeryes0 = sticky (no scheduled rotation), otherwise seconds between rotations (60..86400)
port_idstringyes–

No output schema declared.

No examples provided.

test_connection ~282

The API sends one request through the gateway with the given pool, country and rotation and reports ok, the exit IP it saw, the latency and, on failure, the gateway error_code (for example E_NO_STOCK_COUNTRY, E_CAP_EXCEEDED, timeout). exit_country is only a country that was observed for the exit, never the requested one: when country_verified is false it is null, so do not tell the user the country was confirmed. Uses a few kilobytes of the balance; limited to 6 per minute; needs an API key with ports:write. With the development mock the result is simulated (simulated: true).

NameTypeReqDescription
countrystring–ISO-3166 alpha-2 (e.g. "GB") or "any"; see list_countries for what is online now
poolstring–mobile = 4G/5G carrier modems (US, GB, FR, NL, PL, GE = Georgia (country)); residential = opt-in peer devices in the countries list_countries reports online now; best = whichever is available
rotationstring–auto5|auto10|auto20|auto60 = new IP every N minutes; ondemand = new IP on every connection; sticky = keep the same device for the session (the carrier may still change its IP)

No output schema declared.

No examples provided.

Install

How do I install the Portproof MCP server?

Portproof runs locally as an npm package, launched with npx -y @portproof/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @portproof/mcp

# add to Claude Code
claude mcp add org-portproof-mcp -- npx -y @portproof/mcp
Common questions

What is the Portproof MCP server?

Portproof is an MCP server listed in the public MCP registry as org.portproof/mcp. Proxy traffic by the GB on shared mobile 4G/5G and residential pools, paid in crypto. This page covers its npm package (@portproof/mcp).

Is the Portproof MCP server safe to use?

Portproof scores 68 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Portproof MCP server expose?

Portproof exposes 19 tools: get_pricing, search_inventory, quote, buy_port, list_ports, and 14 more. Their descriptions and schemas cost roughly 3,516 tokens of context every time the server is loaded.

Is the Portproof MCP server still maintained?

Portproof is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Portproof MCP server under?

Portproof declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.