
FFxF MCP server
Which MCP servers are FFxF'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-29
- Registry namenet.ffxf/cloudverified in the MCP registry
The registry name sits under ffxf.net. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.
- Stateanswerschecked 2026-10-29
- Tools71
- Server calls itselfffxf
- Server version1.12.0
- Protocol version2025-06-18
On 2026-10-29 the server answered initialize and tools/list without a sign-in. First answer in 234 ms.
- Whether its tools do the product's job has not been judged yet.
- Checked on 6 of the 7 days it takes to judge reliability.
Once connected
- create_vm, set_reverse_dns, create_vpc, delete_vpc, create_firewall change data without a sign-in: anyone with the address can call them.
- Parameters are untyped or undescribed in 27 of 71 tools: check arguments before calling.
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.
- INITE MCP scoreafter a weeka score needs 7 daily checks: 6 so far
- Answeredmeasuring6 of the 7 daily checks it takes to print a share
- Median first answer289 ms
- Space in an agent's context≈ 12,835 tokensthe definitions of all its tools (71), which an agent carries on every turn
- Tool definitionsA · 94 of 100
- Typed results0 of 71 toolsdeclared outputSchema: results come typed, read once
- Parameters without a description: in 27 of 71
What an agent can do with it
- not sure · run self-hosted services such as VPNs or game servers
- can do · host managed PostgreSQL or MySQL databases
- not sure · run GitHub Actions jobs on fresh Canadian virtual machines
Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?
Worth a look
- Tools that change data, on a server that answers without a sign-in: create_vm, set_reverse_dns, create_vpc, delete_vpc, create_firewall
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 →
list_regionsWhere machines can run. Public, no key needed.
list_plansPlans with their resources and prices (hourly and monthly, in CAD). Public, no key needed.
list_imagesOperating systems and ready-to-use application images. The slug is what create_vm expects. Public, no key needed.
get_accountCredit balance, hourly burn rate and runway, quota and budget caps. Scope: billing.read.
list_vmsThe account's machines with their status, addresses and billing. Scope: vms.read.
get_vmOne machine: status, IPv4, IPv6 /64, specs, traffic (Internet only, this traffic month: used_gb, limit_gb, period_ends_at), billing, suspension. Scope: vms.read.
get_vm_metricsCPU, memory, disk and network as measured from outside the machine. Scope: vms.read.
estimate_vmRuns every check of create_vm and prices it, without creating anything: would_succeed, hourly rate, monthly price, credit required. Call it before create_vm. Scope: vms.create.
create_vmOrders a machine and spends credit (hourly) or raises an invoice (monthly). Returns the machine and a provisioning action to poll with get_action. Retrying the same order is safe: it is deduplicated for 24 hours. Scope: vms.create.
power_vmstart, shutdown (clean ACPI), reboot, or stop (hard power-off). Returns an action to poll with get_action. Scope: vms.action.
rename_vmChanges the hostname, inside the guest and in the console. Scope: vms.action.
reinstall_vmERASES THE DISK and redeploys another image. Ask the user first. confirm_hostname must be the machine's exact current hostname. Scope: vms.action.
destroy_vmDESTROYS the machine and its disk, with no undo and no backup kept. Ask the user first. confirm_hostname must be the machine's exact hostname. Scope: vms.destroy.
get_actionFollows an asynchronous action (create, reinstall, power…). Poll until status leaves running; on error it carries the reason. Scope: vms.read.
list_vm_actionsHistory of actions on one machine, from the API and the console. Scope: vms.read.
get_vm_networkIPv4 and IPv6 addresses of a machine with their reverse DNS, and its private networks. Scope: vms.read.
set_reverse_dnsSets the PTR record of one of the machine's addresses; null restores the default. Scope: network.write.
list_vpcsThe account's private networks with their range, gateway and connected machines, plus the quota. Scope: vms.read.
get_vpcOne private network and the machines on it, with their private address. Scope: vms.read.
create_vpcCreates an isolated private network; ready when the call returns. The first usable address (.1) is reserved for the gateway. Scope: network.write.
delete_vpcDeletes an empty private network. Refused while a machine is still on it: disconnect or destroy those first. Ask the user first. Scope: network.write.
connect_vpcHot-adds a card on the private network and sets its address in the system, without a restart. configuration: manual means the address must be set by hand in the guest. Connecting again returns the same address. Scope: network.write.
disconnect_vpcRemoves the machine's private address and card, without a restart. Refused for the only network of a machine with no public address. Scope: network.write.
move_vpcJoins the target network, then leaves this one, so the machine is never cut off. Keeps the same address ending when free. Scope: network.write.
list_firewallsThe account's firewalls with their inbound rules and the machines they protect, plus the quota. Scope: vms.read.
get_firewallOne firewall: its rules and the machines it protects, with the status of each (applied, pending, error). Scope: vms.read.
create_firewallCreates a reusable set of inbound and outbound rules. Without rules it starts with SSH (TCP 22) and ping open from anywhere; pass rules: [] for none. Nothing is filtered until it is attached to a machine. Scope: network.write.
update_firewallrules REPLACES the whole list and is applied at once to every attached machine: send every rule to keep, not only the new one (read get_firewall first). Removing the SSH rule can lock the agent out. pending_machines counts machines not…
delete_firewallDeletes a firewall attached to no machine. Refused while it protects one: detach it first. Scope: network.write.
attach_firewallFrom now on the machine refuses inbound traffic no rule of its firewalls opens; enforced within about ten seconds of the call. Up to 5 firewalls per machine, rules add up. Refused for a machine with no public address. Attaching again is…
detach_firewallRemoves the firewall's rules from the machine; with no other firewall it accepts all inbound traffic again. Scope: network.write.
list_load_balancersThe account's load balancers with their addresses, pools, targets and health, listeners and rules, certificates; plus the quota. Scope: vms.read.
get_load_balancerOne load balancer in full: status, ipv4/ipv6 to put in DNS, pools with targets (health, sessions, response time), listeners with rules in evaluation order, certificates. Scope: vms.read.
get_load_balancer_metricsRequests by response class, connections, bytes in/out and peak sessions over 1h (1-minute buckets), 24h (15 minutes) or 7d (1 hour), plus totals. Scope: vms.read.
create_load_balancerOrders a load balancer in a private network, billed by the hour from now (the account needs 24 hours of credit), or by the month (7.30 CAD) or the year (73 CAD) with billing. A monthly or yearly period comes out of credit if it covers it…
delete_load_balancerDeletes the load balancer, its address and its configuration; billing stops. Target machines are not touched. Ask the user first. Scope: vms.destroy.
upsert_poolWithout pool: creates one (name required, up to 10). With pool: changes only the fields given. Deleting a pool also removes its targets and the rules leading to it. Scope: network.write.
delete_poolRemoves a pool, its targets and the rules leading to it. Scope: network.write.
set_targetsREPLACES the pool's targets with exactly this list (up to 25): send every target to keep. Each machine must be in the load balancer's private network (connect_vpc first). drain: true stops new connections to a target before maintenance…
upsert_listenerAn entry port on the load balancer's address. Without listener: opens one (port and protocol required, up to 5; 22 and 8402 are reserved). https gets certificates for its rules' hostnames; redirect_https makes port 80 redirect to it. A…
delete_listenerCloses the port and removes its rules. Scope: network.write.
set_rulesREPLACES the http/https listener's rules: each sends a hostname and/or path prefix to an http pool (up to 25). They are evaluated most specific first, whatever the order sent; anything unmatched goes to the default pool. No wildcard…
list_databasesThe account's managed databases with their status, private and public addresses, disk, backups and billing (no passwords), plus the quota. Scope: vms.read.
get_database_optionsWhat can be ordered: engines and versions, extensions, sizes with their hourly, monthly and yearly prices per region, and the price of disk beyond what a size includes. Call it before create_database and show the price to the user. Scope…
get_databaseOne database: status, connection (host, private ip, port, defaultdb and ffxfadmin; on Valkey no database and default), public access and sources, disk usage and cap, users with their databases (null: all) and read_only, logical databases…
get_database_credentialsEvery user with its password, databases and read_only, and its own connection_uri; ready-made connection strings for the admin (private network, and public when open). Treat the result as a secret: give it to the application through an…
get_database_metricsCPU, memory, connections and commits per minute (commands per minute on Valkey) over 1h (1-minute buckets), 24h (10 minutes) or 7d (1 hour); only buckets with samples. Scope: vms.read.
get_slow_queriesThe 20 queries with the most total time (pg_stat_statements, values replaced by $1, $2…; performance_schema on MySQL and MariaDB, values replaced by ?): calls, total and mean time, rows. A starting point for indexes. On Valkey, the…
list_database_backupsCompleted backups (weekly full, daily differential; the transaction log is archived continuously) and the restore window: any minute in it can be restored with restore_database. On Valkey, snapshots (rdb) every hour when there were…
create_databaseOrders a managed database (PostgreSQL, MySQL, MariaDB or Valkey) in a private network, billed by the hour from now (the account needs 24 hours of credit), or by the month (730 hours) or the year (ten months) with billing…
restore_databaseCreates a NEW database, billed like any other, holding the data as it was at a given minute of the source's restore window (list_database_backups; Valkey: the last snapshot before that minute), with the same users and passwords. The…
fork_databaseCreates a NEW database, billed like any other, whose data is an instant copy of this one (for a test or staging copy), with the same users and passwords. It stays linked to its source for up to 7 days (no backups of its own, the source…
detach_database_forkGives a linked fork its own copy of the data; the database is unavailable for about 30 seconds, then its backups start. Scope: vms.action.
resize_databaseMoves the database to a LARGER size (more vCPU, memory and included disk; see get_database_options): same data, users, names and addresses. It restarts: one to two minutes of downtime, status maintenance meanwhile (resize.to_gb set), then…
delete_databaseDELETES the database and its data; billing stops. Ask the user first. confirm_name must be the database's exact name. Its backups stay 7 days (restore_database can bring it back meanwhile). Refused while a linked fork depends on it…
update_databaseAny of: the name; the weekly maintenance window (day 0 = Sunday, start hour, Montréal time, 2 hours long; minor updates, usually under 2 minutes of downtime); the disk cap (the disk grows by itself at 80 % full, up to the cap; disk beyond…
set_database_public_accessOpens the database to the internet at its public host and port (IPv4 and IPv6, TLS and password still required), or closes it. sources restricts who may connect (IPv4/IPv6 addresses or ranges); omitted it is left as is, null or [] means…
backup_databaseStarts a differential backup within a minute, e.g. before a risky migration. Not available on a linked fork. Scope: backups.write.
create_database_userCreates a user with a generated password, returned here once (also readable with get_database_credentials); live within seconds. Up to 30 users. It connects only to its databases (every logical database, future ones included, when…
set_database_user_accessSets the logical databases a user connects to (databases: a list, or null for all of them, future ones included) and whether it only reads; a field left out keeps its value. Applied within seconds; where its access is removed or lowered…
The first 60 of 71, as the server listed them.
How to connect
Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:
{
"mcpServers": {
"cloud": {
"type": "http",
"url": "https://ffxf.net/mcp"
}
}
}Add it
Claude Code, in a terminal
claude mcp add --transport http ffxf https://ffxf.net/mcpclaude.ai, ChatGPT and other clients: add https://ffxf.net/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.
Before we count this visit
Analytics and ad measurement tell us which pages and which of our ads do their job: Google Analytics and Google Ads, the Meta pixel, Yandex Metrica, and one first-party id of our own. Nothing is stored until you answer, and declining changes nothing about the site.