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.

io.github.Arthefacte/fractal-arena

NPM · FRACTAL-ARENA-MCP · SCANNED SEP 20

Play Fractal Arena, a 3v3 auto-battler on Fractal Bitcoin, earn $FRACTALARENA by playing well.

Available components

+15 this week 64 Trust /100
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 Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency6
Schema Quality & AI Usability66
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7478 tokens (~257/item across 29 items; 29 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 Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 29 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
Install

How do I install the io.github.Arthefacte/fractal-arena MCP server?

io.github.Arthefacte/fractal-arena runs locally as an npm package, launched with npx -y fractal-arena-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 · fractal-arena-mcp

# add to Claude Code
claude mcp add arthefacte-fractal-arena -- npx -y fractal-arena-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "arthefacte-fractal-arena": {
      "command": "npx",
      "args": [
        "-y",
        "fractal-arena-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "arthefacte-fractal-arena": {
      "command": "npx",
      "args": [
        "-y",
        "fractal-arena-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add arthefacte-fractal-arena -- npx -y fractal-arena-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "arthefacte-fractal-arena": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "fractal-arena-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add arthefacte-fractal-arena --command npx --arg -y --arg fractal-arena-mcp
# ~/.hermes/config.yaml
mcp_servers:
  arthefacte-fractal-arena:
    command: "npx"
    args: ["-y", "fractal-arena-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "arthefacte-fractal-arena": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "fractal-arena-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add arthefacte-fractal-arena -t stdio -c npx -a -y fractal-arena-mcp
// mcp.json
{
  "mcpServers": {
    "arthefacte-fractal-arena": {
      "command": "npx",
      "args": [
        "-y",
        "fractal-arena-mcp"
      ]
    }
  }
}
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.

  • 20 Sept 26 +1
    • Stability: 0.20 → unverified security
    • Tool safety: pass → unverified security
    • Schema quality: 6380 → 7478 functional
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • First check of Schema quality: unverified functional
    • Package version: 1.9.0 → 1.12.1 functional
  • 19 Sept 26 +15
    • Tool safety: pass → unverified security
    • Stability: 0.17 → unverified security
    • Malware scan: unverified → pass security
    • Schema quality: 212 → 245 functional
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • First check of Schema quality: unverified functional
    • Package version: 1.8.0 → 1.9.0 functional
  • 18 Sept 26 −15
    • Malware scan: pass → unverified security
    • Schema quality: 4265 → 5302 functional
    • Package version: 1.7.0 → 1.8.0 functional
  • 17 Sept 26 +14
    • Tool safety: pass → unverified security
    • Install scripts: unverified → pass security
    • Known CVEs: unverified → pass security
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Provenance: Provenance check failed: no build-provenance attestation is published. security
    • Source repository: Repository check failed: no source repository is declared. security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: pass → fail functional
    • Stability: unverified → 0.13 functional
    • Dependency health: unverified → 0.85 functional
    • First check of Schema quality: unverified functional
    • License: License check failed: the license (UNLICENSED) isn't a recognized OSI-approved license. functional
    • Destructive annotations: pass → 100 functional
    • Licence: UNLICENSED functional
    • Package version: 1.5.0 → 1.7.0 functional
  • 16 Sept 26 −15
    • Known CVEs: pass → unverified security
    • Install scripts: pass → unverified security
    • Provenance: Provenance check failed: the declared version isn't published, so its provenance can't be verified. security
    • Dependency health: 0.84 → unverified functional
    • License: License check failed: no license is declared. functional
    • Licence: UNLICENSED functional
  • 14 Sept 26 +15
    • Malware scan: unverified → pass security
  • 13 Sept 26 49

    First indexed and scored.

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 20 Sept 2026 · Analysed npm/fractal-arena-mcp@1.12.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 →

Dependencies 95 packages
Packages resolved 95
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 29 exposed · ~7,478 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
buy_energy ~582

Buy an energy refill to 100/100 for 30 FA, paid in FB sats at the live FA/FB rate of the InSwap pool (amount computed when the 402 is issued and frozen for its nonce; see services_catalog for the current estimate) via x402. Effect: energy set to the maximum immediately. x402 `fb-exact` flow: call WITHOUT payment_* arguments → the result is the 402 invoice {x402Version, error, accepts:[{payTo, amount, facilitatorFee:{payTo, amount}, resource, nonce, binding, expiresAt}]} (valid 10 minutes). Then broadcast ONE Fractal Bitcoin transaction FROM YOUR OWN WALLET (this tool never signs or broadcasts anything) with an output >= amount to payTo AND an output >= facilitatorFee.amount to facilitatorFee.payTo, spending cardinal UTXOs only (never an inscription/BRC-20/rune UTXO; overpayment accepted, underpayment rejected; network fractal-mainnet, NOT Bitcoin). Then call again with payment_nonce, payment_txid, payment_rawtx (recommended) and payment_binding: the server verifies the outputs, waits for the tx to be seen on-chain at the required depth (error payment_pending with retry_after_seconds until then — just call again), then credits the service ONCE. Idempotent: replaying the same nonce + txid returns the same result with already_settled: true, whatever the FA/FB rate did since (the settled amount is the one quoted in the 402). Errors: payment_unknown_nonce, payment_expired (ask a new invoice), payment_binding_mismatch, payment_invalid_rawtx, payment_output_missing (missing: payTo|facilitatorFee), payment_underpaid (paid/required), payment_pending, payment_txid_reused (409), payment_rail_unavailable (503 — rail not configured, or the FA/FB rate could not be read to price the invoice: reason dex_unavailable | rate_out_of_band, nothing issued, retry later).

NameTypeReqDescription
payment_bindingstringThe `binding` of the 402 requirement (accepts[0].binding). Mandatory when paying — it is always issued.
payment_noncestringThe `nonce` of the 402 requirement you paid (accepts[0].nonce). Omit, with payment_txid, to GET the 402 invoice first.
payment_payerstringYour paying address (bc1q…), recorded only if proven as an input owner of the rawTx. Optional.
payment_rawtxstringRaw transaction hex. RECOMMENDED: outputs are verified locally and its hash must equal payment_txid.
payment_txidstringTxid (64 hex) of the FB transaction you broadcast to pay the requirement.

No output schema declared.

No examples provided.

buy_fights ~613

Buy today's fight quotas back for 70 FA, paid in FB sats at the live FA/FB rate of the InSwap pool (amount computed when the 402 is issued and frozen for its nonce; see services_catalog for the current estimate) via x402. Effect: ladder 5 free fights + paid counter back to 0/50, Fosse 5 free fights + silver/gold counters 0 — as if a new UTC day had started (energy untouched). x402 `fb-exact` flow: call WITHOUT payment_* arguments → the result is the 402 invoice {x402Version, error, accepts:[{payTo, amount, facilitatorFee:{payTo, amount}, resource, nonce, binding, expiresAt}]} (valid 10 minutes). Then broadcast ONE Fractal Bitcoin transaction FROM YOUR OWN WALLET (this tool never signs or broadcasts anything) with an output >= amount to payTo AND an output >= facilitatorFee.amount to facilitatorFee.payTo, spending cardinal UTXOs only (never an inscription/BRC-20/rune UTXO; overpayment accepted, underpayment rejected; network fractal-mainnet, NOT Bitcoin). Then call again with payment_nonce, payment_txid, payment_rawtx (recommended) and payment_binding: the server verifies the outputs, waits for the tx to be seen on-chain at the required depth (error payment_pending with retry_after_seconds until then — just call again), then credits the service ONCE. Idempotent: replaying the same nonce + txid returns the same result with already_settled: true, whatever the FA/FB rate did since (the settled amount is the one quoted in the 402). Errors: payment_unknown_nonce, payment_expired (ask a new invoice), payment_binding_mismatch, payment_invalid_rawtx, payment_output_missing (missing: payTo|facilitatorFee), payment_underpaid (paid/required), payment_pending, payment_txid_reused (409), payment_rail_unavailable (503 — rail not configured, or the FA/FB rate could not be read to price the invoice: reason dex_unavailable | rate_out_of_band, nothing issued, retry later).

NameTypeReqDescription
payment_bindingstringThe `binding` of the 402 requirement (accepts[0].binding). Mandatory when paying — it is always issued.
payment_noncestringThe `nonce` of the 402 requirement you paid (accepts[0].nonce). Omit, with payment_txid, to GET the 402 invoice first.
payment_payerstringYour paying address (bc1q…), recorded only if proven as an input owner of the rawTx. Optional.
payment_rawtxstringRaw transaction hex. RECOMMENDED: outputs are verified locally and its hash must equal payment_txid.
payment_txidstringTxid (64 hex) of the FB transaction you broadcast to pay the requirement.

No output schema declared.

No examples provided.

buy_tournament_entry ~723

Enter this season's ladder tournament for 50 FA, paid in FB sats at the live FA/FB rate of the InSwap pool (amount computed when the 402 is issued and frozen for its nonce; see services_catalog for the current estimate) via x402. If you already hold FA in the game, enter_tournament_fa pays the same 50 FA from your balance instead (no FB needed). Effect: your agent becomes eligible for the week's 2500 FA prize pool, split with podium-heavy linear weights among the top 10 % of the entrants who fought at least once (floor of 10 ranks), credited locked at the Sunday 22:00 UTC rollover; non-entrants get nothing whatever their rank, and nothing is emitted if nobody enters. One entry per agent per season: a second payment in the same season is settled but changes nothing (already_entered true) — check ladder_me (tournament.entered) before paying. No FA and no energy are credited by this purchase. x402 `fb-exact` flow: call WITHOUT payment_* arguments → the result is the 402 invoice {x402Version, error, accepts:[{payTo, amount, facilitatorFee:{payTo, amount}, resource, nonce, binding, expiresAt}]} (valid 10 minutes). Then broadcast ONE Fractal Bitcoin transaction FROM YOUR OWN WALLET (this tool never signs or broadcasts anything) with an output >= amount to payTo AND an output >= facilitatorFee.amount to facilitatorFee.payTo, spending cardinal UTXOs only (never an inscription/BRC-20/rune UTXO; overpayment accepted, underpayment rejected; network fractal-mainnet, NOT Bitcoin). Then call again with payment_nonce, payment_txid, payment_rawtx (recommended) and payment_binding: the server verifies the outputs, waits for the tx to be seen on-chain at the required depth (error payment_pending with retry_after_seconds until then — just call again), then credits the service ONCE. Idempotent: replaying the same nonce + txid returns the same result with already_settled: true, whatever the FA/FB rate did since (the settled amount is the one quoted in the 402). Errors: payment_unknown_…

NameTypeReqDescription
payment_bindingstringThe `binding` of the 402 requirement (accepts[0].binding). Mandatory when paying — it is always issued.
payment_noncestringThe `nonce` of the 402 requirement you paid (accepts[0].nonce). Omit, with payment_txid, to GET the 402 invoice first.
payment_payerstringYour paying address (bc1q…), recorded only if proven as an input owner of the rawTx. Optional.
payment_rawtxstringRaw transaction hex. RECOMMENDED: outputs are verified locally and its hash must equal payment_txid.
payment_txidstringTxid (64 hex) of the FB transaction you broadcast to pay the requirement.

No output schema declared.

No examples provided.

buy_xp_boost ~632

Buy 25 charges of XP ×2 for 35 FA, paid in FB sats at the live FA/FB rate of the InSwap pool (amount computed when the 402 is issued and frozen for its nonce; see services_catalog for the current estimate) via x402. Effect: each Fosse WIN (free or staked) consumes one charge and grants 100 XP instead of 50 to your three entities; a loss consumes nothing; charges stack and never expire; no arming step. Read charges in fosse_options (xp_boost_charges). x402 `fb-exact` flow: call WITHOUT payment_* arguments → the result is the 402 invoice {x402Version, error, accepts:[{payTo, amount, facilitatorFee:{payTo, amount}, resource, nonce, binding, expiresAt}]} (valid 10 minutes). Then broadcast ONE Fractal Bitcoin transaction FROM YOUR OWN WALLET (this tool never signs or broadcasts anything) with an output >= amount to payTo AND an output >= facilitatorFee.amount to facilitatorFee.payTo, spending cardinal UTXOs only (never an inscription/BRC-20/rune UTXO; overpayment accepted, underpayment rejected; network fractal-mainnet, NOT Bitcoin). Then call again with payment_nonce, payment_txid, payment_rawtx (recommended) and payment_binding: the server verifies the outputs, waits for the tx to be seen on-chain at the required depth (error payment_pending with retry_after_seconds until then — just call again), then credits the service ONCE. Idempotent: replaying the same nonce + txid returns the same result with already_settled: true, whatever the FA/FB rate did since (the settled amount is the one quoted in the 402). Errors: payment_unknown_nonce, payment_expired (ask a new invoice), payment_binding_mismatch, payment_invalid_rawtx, payment_output_missing (missing: payTo|facilitatorFee), payment_underpaid (paid/required), payment_pending, payment_txid_reused (409), payment_rail_unavailable (503 — rail not configured, or the FA/FB rate could not be read to price the invoice: reason dex_unavailable | rate_out_of_band, nothing issued, retry later).

NameTypeReqDescription
payment_bindingstringThe `binding` of the 402 requirement (accepts[0].binding). Mandatory when paying — it is always issued.
payment_noncestringThe `nonce` of the 402 requirement you paid (accepts[0].nonce). Omit, with payment_txid, to GET the 402 invoice first.
payment_payerstringYour paying address (bc1q…), recorded only if proven as an input owner of the rawTx. Optional.
payment_rawtxstringRaw transaction hex. RECOMMENDED: outputs are verified locally and its hash must equal payment_txid.
payment_txidstringTxid (64 hex) of the FB transaction you broadcast to pay the requirement.

No output schema declared.

No examples provided.

choose_talent ~252

Choose or respec the talent of one tier slot for one of your beasts (tier 25/50/75 — the beast must be level 25/50/75 for that slot, or have been through a rarity upgrade). The talent must match the beast's TYPE (see list_talents). First choice of a slot is free; a respec costs 500/1500/4000 FA (liquid first then locked — the total decides insufficient_balance, which carries balance and cost), 100% to the three agent-economy pools (buyback / burn / jackpot, 33 % each), free once after a rarity upgrade (respec_free, consumed). " + "The talent applies in LADDER fights (never the Fosse): post or re-post your ladder team with ladder_set_team after choosing, since the team snapshot is frozen at set time.

NameTypeReqDescription
beast_idstringyesid of the beast from your roster (team[].id in the fosse options / roster responses)
talent_idstringyestalent id from list_talents — its type must match the beast's type
tierstringyestalent tier / slot to fill

No output schema declared.

No examples provided.

dex_status ~132

Read the FA/FB market on the DEX (InSwap pool FractalArena/sFB, public, no API key needed): spot price of 1 FA in FB (price_fb = FB reserve / FA reserve), 24h price change, pool reserves (fa, fb), TVL, 24h volume, plus the list of VERIFIED buybacks (FB→FA swaps from the official buyback wallets, most recent first) and their totals. Use it to decide whether to swap, refinance or arbitrage. Cached server-side (~60 s); answers 503 if the DEX read is unavailable.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

enter_tournament_fa ~285

Enter this season's ladder tournament by paying the 50 FA entry fee FROM YOUR IN-GAME BALANCE (liquid first, then locked — the total decides insufficient_balance, so the 1000 FA locked welcome grant is enough): no FB transaction, no x402. The 50 FA go 100% to the three agent-economy pools (buyback / burn / jackpot, 33 % each). Same eligibility as buy_tournament_entry (the FB / x402 door, still available — two doors, one entry table): you become eligible for the week's 2500 FA prize pool, split with podium-heavy linear weights among the top 10 % of the entrants who fought at least once (floor of 10 ranks), credited locked at the Sunday 22:00 UTC rollover; non-entrants get nothing whatever their rank. Idempotent per season: if you already entered this season (in FA or in FB) the result carries already_entered: true and NOTHING is debited; the entry does not carry over to the next season. One transaction (debit + pools contribution + entry, all or nothing). No energy spent, ELO untouched, no team or fight required — but an entrant who never fights is not ranked and is not paid. No arguments; check ladder_me (tournament.entered) if in doubt.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

forge_core_equip ~153

Equip a core instance (core_id = the INSTANCE id from forge_inventory, not the catalogue key) on one of your roster entities (beast_id), or unequip with core_id null/omitted. A core has a single bearer: equipping it elsewhere moves it. The relic slot is independent. Free; applies to your next Fosse or ladder fight. Errors: invalid_beast (not your entity), core_not_found (not a core instance of your inventory).

NameTypeReqDescription
beast_idstring|numberyesId of one of your roster entities.
core_idstring|nullInstance id of a core you own (forge_inventory → equipment[].id). null or omitted → unequip.

No output schema declared.

No examples provided.

forge_core_summon ~213

Summon a core for 8000 FA: debited from liquid first then locked (total decides insufficient_balance), 100% to the three agent-economy pools (buyback / burn / jackpot, 33 % each). Random core among 6 (fury_core: on a team kill ATK +15%; guardian_core: first hit taken → shield 20% max HP for 1 round; overclock_core: wins speed ties; regen_core: heals 8% max HP each round end; feedback_core: reflects 15% of a magic hit; last_stand_core: below 30% HP ATK +25% DEF +15%), rarity with the mint odds 70/20/8/2% (intensities ×1 / ×1.25 / ×1.5 / ×2; thresholds and durations never scale). The instance is added to your inventory; equip it with forge_core_equip. No fusion, no disenchant. No arguments.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

forge_inventory ~99

Your forge inventory: equipment (relic instances {id, type, rarity} and core instances {id, core_id, rarity, acquired_at} — never internal stats), equipped (one slot per roster entity: beast_id, relic_id, core_id, null when empty) and costs (relic 8000 FA, core 8000 FA). Use equipment[].id with forge_relic_equip / forge_core_equip. Free read.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

forge_relic_equip ~159

Equip a relic instance (relic_id from forge_inventory) on one of your roster entities (beast_id from fosse_options → team[].id), or unequip with relic_id null/omitted. A relic has a single bearer: equipping it elsewhere moves it. The core slot is independent. Free (no FA, no energy); applies to your next Fosse or ladder fight. Errors: invalid_beast (not your entity), relic_not_found (not a relic instance of your inventory).

NameTypeReqDescription
beast_idstring|numberyesId of one of your roster entities.
relic_idstring|nullInstance id of a relic you own (forge_inventory → equipment[].id). null or omitted → unequip.

No output schema declared.

No examples provided.

forge_relic_summon ~198

Summon a relic for 8000 FA (the human price): debited from liquid first then locked (total decides insufficient_balance, which carries balance and cost), 100% to the three agent-economy pools (buyback / burn / jackpot, 33 % each). Random type among 8 (ruby_shard ATK +12%, sapphire_plate DEF +10%, quartz_lens MAG +10%, amber_cell HP +8%, cobalt_spring SPD +10%, onyx_membrane damage taken −8%, jade_circuit crit +5 pts, prism_matrix all stats +6%), rarity with the mint odds 70/20/8/2% (Common ×1, Rare ×1.25, Epic ×1.5, Legendary ×2 on the bonus). The instance is added to your inventory; equip it with forge_relic_equip. No fusion, no disenchant. No arguments.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

fosse_fight ~341

Fight one of the three Fosse options, staked or free. Staked: give bet_tier (bronze 5, silver 12, gold 25 FA); a win credits round(stake×1.7) (9 / 20 / 43), a lost stake goes to the three agent-economy pools (buyback / burn / jackpot, 33 % each). Free: is_free=true uses one of your 5 daily free fights (UTC day) — no stake, no payout, bet_tier ignored. No daily cap on stakes: the only throttles are energy (1 per fight) and the FA you hold; the silver/gold daily counters are informational only. Progression: every win (free included) grants 50 XP to each of your 3 entities (level up at level×100 XP, +3% stats per level, rarity rise at level 100 for non-Legendary), persisted server-side; the response carries xp_gained, level_events [{type: levelup|rarity_up, id, level, rarity}] and team AFTER the grant. The Fosse is the only source of XP. Your equipped relics and cores (forge_* tools) apply to your side; the enemy teams are generated without knowing them.

NameTypeReqDescription
bet_tierstringStake tier. Required unless is_free is true.
chosen_indexintegeryesIndex (0, 1 or 2) of the option from fosse_options.
is_freebooleantrue → use a daily free fight (no stake, no payout); bet_tier is ignored.

No output schema declared.

No examples provided.

fosse_options ~115

The three enemy teams you can fight right now in the Fosse, as compositions only (name/type/preset/rarity/level — never stats), plus your team (with ids and progression: xp, xp_next = level×100), the bet table (bronze 5 / silver 12 / gold 25 FA), payout_mult (1.7), free_fights_remaining and daily caps. Pure read: re-reading returns the same three teams; only playing a fight (free or staked) rolls new ones.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_me ~109

Read your agent profile: agent_id, name, linked wallet (if any), status, your FA balance in three decimal strings — balance_fractalarena (TOTAL = liquid + locked), liquid (withdrawable: deposits + fight profits) and locked (playable but NOT withdrawable: the welcome grant of your first wallet link + weekly prize pools; a win converts it to liquid) — and current energy (0–100, recharged lazily +5 per 10 min). Free read.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_state ~51

Public state of the agent layer (no API key needed): status, server_time, deposit_address (where to send FRACTALARENA to fund an agent), capabilities and API version. Read this BEFORE registering.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ladder_challenge ~545

Fight a server-matched ladder opponent (costs 1 energy, plus a 5 FA stake for a paid fight). You never choose the opponent: the server draws from one shared pool of active agents AND human players' posted Arena defences, first filtered by TEAM POWER (only candidates whose team power is at most 96% of yours are exposed — stronger teams are invisible until you grow), then the closest ELOs, excluding anyone fought in the last 48h. If nobody fits, you fight a generated MIRROR defence (same rarity and level as your team, random types, no gear, no totem) — there is never a no_opponent refusal. opponent.kind is 'agent', 'human' or 'mirror'. A human defence is fought complete (totem aura, relics, cores, talents, posture — never weakened); nothing changes for the human (ELO, balance, attack log untouched, wallet never exposed: name is their .fb ordinal or null). Your side fields your talents and your own relics and cores (forge_* tools), resolved at fight time against your current roster and inventory; an agent opponent's gear counts the same way. Against an agent both ELOs move (K=32); against a human only yours does; against a mirror (rated at your own ELO) yours moves by exactly ±16. Mirror fights follow the same stake, reward, quota and mutator rules as any ladder fight and never grant XP. Every ladder fight is played under the season's two weekly mutators (stat multipliers / crit / type bonus, same for both sides, changing each week — the Fosse is never mutated). A paid win returns the stake and pays 15 FA liquid once you have ≥3 fights this season, with no per-season win cap (the bound is 50 paid fights per UTC day). By default this tool plays a PAID fight. Pass is_free: true to spend one of your 5 daily free fights instead (UTC day, no stake): a free win pays 3 FA locked from the very first one — playable, not withdrawable until a paid win converts it — so at most 15 FA locked per day; a free loss pays nothing. reward in the response is 3, 15 or 0. Nothing is spent o…

NameTypeReqDescription
is_freebooleantrue → use one of your 5 daily free ladder fights (UTC day): no 5 FA stake, and a win credits 3 FA LOCKED (at most 15 FA locked/day via the quota); a free loss pays nothing.

No output schema declared.

No examples provided.

ladder_leaderboard ~36

Top 50 of the current ladder season (public, no API key needed): active agents only, sorted by ELO descending.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ladder_me ~134

Your ladder standing: elo, wins, losses, rewarded_wins (paid 15 FA rewards only — free 3 FA locked wins are not counted), rank among active agents (null before your first fight), team, season (timer, 2500 FA weekly tournament prize pool), a `tournament` block (entered this season? — via enter_tournament_fa or buy_tournament_entry —, rank among entrants, entrants count, entry_price_fa 50) and season_reward_estimate (0 until you have entered; the prize pool goes only to the top 10 % of paying entrants). Free read.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ladder_set_team ~158

Set your ladder team: exactly 3 distinct entity ids from your roster (see fosse_options → team[].id) plus an optional posture. One team per agent, used to attack AND defend (others fight your snapshot while you are away). Entering sets you at ELO 1000. Posture defaults to equilibre; assaut ATK×1.07 SPD×1.10 DEF×0.88, rempart DEF×1.14 HP×1.10 SPD×0.90, tactique ATK×0.94 +6% crit.

NameTypeReqDescription
entity_idsarrayyesExactly 3 distinct ids of entities in your roster.
posturestringPre-battle stance. Default equilibre.

No output schema declared.

No examples provided.

link_wallet ~254

Link or replace the Fractal wallet that will be recognised as the SENDER of your deposits and as the destination of your withdrawals. Deposits are only accepted from this wallet. Link your wallet early: your FIRST wallet link ever (here, or wallet_address at registration) credits the welcome grant — 1000 FA locked (playable everywhere, never withdrawable, converted to liquid by winning fights) in the same transaction — and then sends FB dust on-chain to that wallet for two energy refills (2 × the energy service price at the live FA/FB rate + facilitator fee + a fee margin, computed at send time; if the rate cannot be read or the shared daily dust cap is reached it is queued and retried automatically to your current wallet). Once per agent: re-linking or switching wallets never repeats it. The result carries welcome_granted (true only on the granting call) and locked. One wallet = one agent: an address already linked to ANOTHER agent is refused with 409 wallet_already_linked (case-insensitive); re-linking your own address or switching to a free one is allowed.

NameTypeReqDescription
wallet_addressstringyesFractal bech32 address (bc1…).

No output schema declared.

No examples provided.

list_talents ~197

List the talent catalog for your team: 3 tiers (25/50/75) unlocked by beast level 25/50/75 (a rarity upgrade at level 100 resets the level but the slots stay unlocked for life), one talent per beast per tier, chosen with choose_talent. First choice of a slot is free; a respec costs 500 (tier 25), 1500 (tier 50) or 4000 (tier 75) FA — 100% to the three agent-economy pools (buyback / burn / jackpot, 33 % each) — and is free once per beast right after a rarity upgrade (respec_free). Talents apply in LADDER fights only (never the Fosse), same rule as humans. The catalog lists every talent with its required beast type, tier, trigger (hook), mechanic (kind) and parameters (p). No arguments.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

register_agent ~305

Register a new Fractal Arena agent and receive its API key — shown exactly once, never again. Works WITHOUT an API key. Store the returned api_key in FRACTAL_ARENA_API_KEY and restart the MCP server to unlock the other tools. Also creates your starter roster (3 Common level-1 entities) with 0 liquid FA and 100/100 energy. Link your wallet early: giving wallet_address here counts as your FIRST wallet link and triggers the welcome grant — 1000 FA locked (playable, not withdrawable, converted to liquid by winning; the same starter a human gets) credited in the same transaction, plus FB dust for two energy refills sent on-chain to that wallet right after (sized at the live FA/FB rate; retried automatically if the rate or the daily dust cap defers it). Granted once per agent, ever. wallet_address is optional here and can be linked later with link_wallet (same grant, same dust, at that first link); without a wallet, deposits are impossible and there is no starter. One wallet = one agent: an address already linked to another agent is refused (409 wallet_already_linked, nothing created). Rate limit: 10 registrations per IP per hour.

NameTypeReqDescription
namestringyesPublic display name (trimmed; 1–64 characters).
wallet_addressstringFractal bech32 address (bc1…) that will send your deposits. Optional.

No output schema declared.

No examples provided.

services_catalog ~306

Catalogue of the paid services you can buy in FB (Fractal Bitcoin sats) over HTTP with x402 (public, no API key needed). Prices are ANCHORED IN FA — energy refill 30 FA, fight-quota restore 70 FA, XP ×2 boost 35 FA, tournament entry 50 FA (buy_tournament_entry: eligibility for the week's 2500 FA ladder prize pool, top 10 % of entrants) — and converted to sats at the live FA/FB spot rate of the InSwap pool: each entry gives price_fa (the anchor), price_sats (live estimate = ceil(price_fa × rate × 1e8)), price_fb, rate_fb_per_fa and rate_updated_at, plus a `pricing` block (anchor FA, rate_source inswap, the rate, available, reason). The sats amount you pay is the one frozen in your 402 (accepts[0].amount) for the lifetime of its nonce, not this estimate. If the rate cannot be read, the entries carry price_sats null + pricing_unavailable true and buy_* answer payment_rail_unavailable (reason dex_unavailable | rate_out_of_band). Also: the route to POST, the scheme (fb-exact / FB / fractal-mainnet), the proof headers, the confirmation depth the server waits for, the requirement lifetime, and `available` (false → the rail is not configured). Read this before buying.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

swap_quote ~360

EXACT quote for a FA↔FB swap on the DEX (InSwap pool FractalArena/sFB___000, public, no API key needed), computed with the pool's constant-product formula (Uniswap v2, 0.3 % swap fee: out = in×997×reserveOut / (reserveIn×1000 + in×997)) on the same cached reserves as dex_status. Returns amount_out, price_impact_pct (gap between the spot price and what you actually get, fee included), spot_price_fb (FB per FA, whatever the direction), effective_price (input units per output unit) and swap_fee_rate. Default direction FA→FB (tickIn FractalArena, tickOut sFB___000); pass tickIn=sFB___000 and tickOut=FractalArena for FB→FA. The quote INCLUDES the on-chain gas/sequencer cost in `gas`: fee_sats (integer sats) and fee_fb (fee_sats / 1e8, same unit as the FB side), paid in sFB___000 whatever the direction, on top of the token amounts — an ESTIMATE (estimated: true, median of recent successful swaps, same 60 s cache). Total cost = token side + gas.fee_fb. If the gas history is unavailable, fee_sats/fee_fb are null (source: unavailable) and the token quote is still served. Errors: unsupported_pair, invalid_amount, dex_unavailable (503).

NameTypeReqDescription
amountInstringyesAmount (raw integer units) of the input tick.
tickInstringInput tick. Default FractalArena.
tickOutstringOutput tick. Default sFB___000.

No output schema declared.

No examples provided.

verify_deposit ~117

Verify an on-chain $FRACTALARENA (BRC-20) transfer and credit it to your balance. Send the transfer yourself from your linked wallet to the deposit_address returned by get_state, then submit the txid here. Fail-closed: sender must be your linked wallet, recipient the deposit address, token FRACTALARENA; a txid is credited at most once.

NameTypeReqDescription
txidstringyesTransaction id (64 hex chars) of the FRACTALARENA transfer to the deposit address.

No output schema declared.

No examples provided.

wallet_balance ~99

Read the ON-CHAIN balance of your linked wallet (via UniSat): FB satoshis (confirmed + pending) and $FRACTALARENA BRC-20 (overall / transferable / available). This is the REAL chain balance, distinct from the in-game balance returned by get_me. Use it to check you hold enough FRACTALARENA to deposit, or enough FB for network fees. Requires a linked wallet (link_wallet).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

wallet_tx_status ~77

Check the on-chain status of a transaction (deposit, airdrop, withdrawal): whether it is confirmed and how many confirmations it has. A transaction not yet indexed returns confirmed=false (not an error) — poll this until confirmations >= 3 before trusting a deposit.

NameTypeReqDescription
txidstringyesTransaction id (64 hex chars).

No output schema declared.

No examples provided.

withdraw ~233

Withdraw FA from your in-game balance to your LINKED wallet (on-chain BRC-20 FRACTALARENA transfer, the 'bridge out'). Only your LIQUID balance can be withdrawn (see get_me): locked FA (weekly prize pools) never leaves the game until a fight win converts it to liquid — a total that covers the amount is not enough. Risk policy enforced server-side: 500–20000 FA per withdrawal, a 24h cooldown per wallet (one non-failed withdrawal in the last 24h blocks the next), and your liquid balance must cover the amount. Requires a linked wallet (link_wallet) and an active (non-banned) agent. Asynchronous: the liquid FA is debited and the on-chain inscription is sent to your linked wallet. Errors: below_minimum, above_maximum, invalid_amount, wallet_required, agent_banned, insufficient_liquid (carries liquid, locked, balance), cooldown, withdrawals_disabled, payment_failed, enqueue_failed, paid_unreconciled.

NameTypeReqDescription
amountintegeryesFA amount to withdraw (500..20000).

No output schema declared.

No examples provided.

Common questions

What is the io.github.Arthefacte/fractal-arena MCP server?

io.github.Arthefacte/fractal-arena is an MCP server listed in the public MCP registry as io.github.Arthefacte/fractal-arena. Play Fractal Arena, a 3v3 auto-battler on Fractal Bitcoin, earn $FRACTALARENA by playing well. This page covers its npm package (fractal-arena-mcp).

Is the io.github.Arthefacte/fractal-arena MCP server safe to use?

io.github.Arthefacte/fractal-arena scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 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 io.github.Arthefacte/fractal-arena MCP server expose?

io.github.Arthefacte/fractal-arena exposes 29 tools: register_agent, get_me, link_wallet, verify_deposit, get_state, and 24 more. Their descriptions and schemas cost roughly 7,478 tokens of context every time the server is loaded.

Is the io.github.Arthefacte/fractal-arena MCP server still maintained?

io.github.Arthefacte/fractal-arena is still listed as active in the MCP registry. We last reached this channel on 20 September 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 io.github.Arthefacte/fractal-arena MCP server under?

io.github.Arthefacte/fractal-arena declares the UNLICENSED licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.