MCP Server

AnchoredIP

com.anchoredip/anchoredip
Cloud & Infrastructure Public & reachable MCP 2025-11-25

What this MCP does

Provisions and manages dedicated static IPv4 leases over WireGuard, including tunnels, renewals, routing, and reverse DNS.

create_tunnel
Provision a peer and return its WireGuard configuration. Three routing modes, and the right one depends on the machine. source (the default) sends only traffic from the leased address through us and leaves the default route alone — but it is written with wg-quick PostUp rules that invoke `ip`, so it runs on Linux under wg-quick and nowhere else. On macOS it aborts and deletes the interface. full works in every client but claims the default route, so it cannot run beside an always-on corporate VPN. destinations routes only the addresses you name. It needs no PostUp and takes no default route, so it runs in any client on any platform, and it matches what is usually being bought — one partner seeing a fixed address. It survives beside a VPN that installs a default route, but not one that captures traffic below the routing table. It cannot receive inbound connections from anywhere but those destinations.
Input schema
{'type': 'object', 'required': ['access_token'], 'properties': {'label': {'type': 'string', 'description': "For the customer's own reference."}, 'transport': {'enum': ['wireguard', 'amneziawg'], 'type': 'string', 'description': 'Defaults to wireguard. Use amneziawg where deep packet inspection blocks a plain WireGuard handshake; it needs an AmneziaWG client rather than wg-quick.'}, 'access_token': {'type': 'string', 'description': 'Returned by order_lease. The only credential for a lease.'}, 'destinations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Addresses or ranges to route through the tunnel, like 203.0.113.10 or 203.0.113.0/24. Required with routing_mode=destinations and rejected without it. Ask the user which partner requires the address rather than guessing a range.'}, 'routing_mode': {'enum': ['source', 'full', 'destinations'], 'type': 'string', 'description': 'Defaults to source, which is Linux only. Use destinations when the machine is not a Linux server, or when only certain partners need to see the address.'}}}
lease_status
Everything about one lease: whether it is active, which addresses it holds, its tunnels and when it renews.
Input schema
{'type': 'object', 'required': ['access_token'], 'properties': {'access_token': {'type': 'string', 'description': 'Returned by order_lease. The only credential for a lease.'}}}
list_plans
The published catalogue with live prices and which payment methods each plan accepts. Prices are never hardcoded; read them here.
Input schema
{'type': 'object', 'properties': {}}
order_lease
Place an order. The trial plan is free and activates immediately; paid plans return payment details and stay pending until settled. No account or card is needed to order. A second trial for the same billing email is refused — order a paid plan instead, which needs no approval.
Input schema
{'type': 'object', 'required': ['plan', 'organization_name', 'country', 'billing_email'], 'properties': {'plan': {'type': 'string', 'description': 'Slug from list_plans.'}, 'country': {'type': 'string', 'description': 'ISO 3166-1 alpha-2.'}, 'billing_email': {'type': 'string'}, 'organization_name': {'type': 'string'}}}
renew_lease
Raise an invoice for another term and keep the same addresses. This is how a trial becomes a paying customer: the address does not change, so whatever the customer's partner has already allowlisted goes on working. A trial cannot renew into itself, so name the plan to move to — called without one it returns the plans that can be moved to. Pressing it twice quotes the same reference rather than raising a second invoice.
Input schema
{'type': 'object', 'required': ['access_token'], 'properties': {'plan': {'type': 'string', 'description': 'Slug from list_plans. Defaults to the plan the lease is already on; required to leave a trial.'}, 'access_token': {'type': 'string', 'description': 'Returned by order_lease. The only credential for a lease.'}}}
revoke_tunnel
Retire a peer and hand its slot back to the plan's allowance. An agent that provisions a tunnel per short-lived worker and never revokes one exhausts the allowance and then cannot bring the next machine up. Revoking the peer that holds the public address stops inbound connections to it and cannot be undone by promoting another — only by bringing a new machine up.
Input schema
{'type': 'object', 'required': ['access_token', 'tunnel_id'], 'properties': {'tunnel_id': {'type': 'integer', 'description': 'The id lease_status reports for the tunnel.'}, 'access_token': {'type': 'string', 'description': 'Returned by order_lease. The only credential for a lease.'}}}
set_autorenew
Stop this lease charging the customer's card again, or start it again. Only a card subscription can be stopped — a bank transfer is a payment the customer sends us, so there is nothing of ours to cancel. Stopping is not a cancellation: the lease runs to the end of the period already paid for, and the same call turns it back on.
Input schema
{'type': 'object', 'required': ['access_token', 'enabled'], 'properties': {'enabled': {'type': 'boolean', 'description': 'false stops the next charge, true resumes it.'}, 'access_token': {'type': 'string', 'description': 'Returned by order_lease. The only credential for a lease.'}}}
set_reverse_dns
Publish a PTR record for an address on the lease. Live within a second; an empty hostname removes it.
Input schema
{'type': 'object', 'required': ['access_token', 'address', 'hostname'], 'properties': {'address': {'type': 'string'}, 'hostname': {'type': 'string', 'description': 'Empty removes the record.'}, 'access_token': {'type': 'string', 'description': 'Returned by order_lease. The only credential for a lease.'}}}
Added
set_reverse_dns
Sept. 17, 2026, 12:33 p.m.
Added
set_autorenew
Sept. 17, 2026, 12:33 p.m.
Added
renew_lease
Sept. 17, 2026, 12:33 p.m.
Added
revoke_tunnel
Sept. 17, 2026, 12:33 p.m.
Added
create_tunnel
Sept. 17, 2026, 12:33 p.m.
Added
lease_status
Sept. 17, 2026, 12:33 p.m.
Added
order_lease
Sept. 17, 2026, 12:33 p.m.
Added
list_plans
Sept. 17, 2026, 12:33 p.m.