---
name: ftw-mcp
description: Connect an agent to ftw.trade's MCP server and use its tools well. Authentication (OAuth or an API token), live-trading consent, how calls are checked and refused, conventions shared by every tool, and the generated catalog of every tool by area.
---

# The ftw.trade MCP server

One server at two addresses (Streamable HTTP, JSON-RPC 2.0; protocol
versions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05). Every tool is a
call the site's own pages make, through the same functions.

- `https://ftw.trade/api/mcp` lists every tool. For agents that load tools
  as they need them (Claude Code).
- `https://ftw.trade/api/mcp/essentials` lists the few dozen most work needs
  (skills, projects, strategies, pools, orders, workflows, the log). For chat
  apps that put every listed tool in the model's context on each turn
  (Claude on the web, ChatGPT, Codex, Cursor). The rest are one step away:
  `search_tools { search }` finds a tool, `get_tool { name }` gives its
  description and schema, and `run_tool { name, arguments }` calls it with
  the same checks and limits as a direct call.

## Connecting

- **OAuth, one link.** Point the client at the URL. An unauthenticated call
  answers 401 with `WWW-Authenticate: Bearer resource_metadata=…`; the
  client reads `/.well-known/oauth-protected-resource` and
  `/.well-known/oauth-authorization-server`, registers itself, and sends the
  person to `/oauth/authorize` to sign in and approve (PKCE S256). Access
  tokens last 30 days; refresh tokens rotate.
  - Claude (web, desktop, phone): Settings → Connectors → Add custom
    connector, with the essentials address.
  - ChatGPT: Settings → Apps & Connectors → Advanced settings → Developer
    mode on, then Create, with the essentials address and OAuth.
  - Claude Code: `claude mcp add --transport http --scope user ftw-trade https://ftw.trade/api/mcp`,
    then `/mcp` to sign in.
  - Codex: `codex mcp add ftw-trade --url https://ftw.trade/api/mcp/essentials`,
    then `codex mcp login ftw-trade`.
  - Cursor and VS Code: install links on the site's AI & API page.
  - `npx ftw-trade connect claude-code|codex|claude|chatgpt` does or prints
    the same, and installs the skills for Claude Code and Codex.
- **Skills as files.** `https://ftw.trade/skills.zip` holds every skill, a
  folder each, to unpack into `~/.claude/skills` (Claude Code) or
  `~/.agents/skills` (Codex); `/skills/<name>.zip` is one.
  `/skills/ftw-trade.zip` is all of them as one skill, for Claude's Settings
  → Capabilities → Skills upload.
- **API token.** The person makes one under AI & API (`fwb_at_…`, shown
  once) and the client sends `Authorization: Bearer fwb_at_…`.
- **Live trading** is per connection: the consent page's "may trade live"
  (scope `mcp:live`) or the token's setting, changeable on the AI & API
  page. `initialize` says which in its instructions ("This connection
  may/may not trade live").

## Calling tools

- `tools/list` gives every tool with a title, a description, MCP
  annotations (`readOnlyHint`, `destructiveHint`, `openWorldHint`) and a
  closed JSON schema. `tools/call` checks the arguments against the schema
  before running: an unknown argument is refused naming the ones it takes.
- Names are `verb_noun`. Older names (`project_guide`, `shared_catalog`,
  `place_limit_order`, …) still answer but are not listed; use the listed
  ones.
- A result is JSON as text plus `structuredContent` when it is an object.
- A refusal is a tool error, `isError: true`, with text `<status>: <message>`
  and `structuredContent.error = { status, message, field? }`.
  - 400: the arguments are wrong (the field is named).
  - 403: live trading is not allowed on this connection; the message says
    where the person allows it. Do not retry; ask the person or use paper.
  - 404: no such thing (an id from the wrong list, a deleted project).
  - 409: a conflict (a stale version of a document, a name taken, a limit
    reached). Read the current state and redo the change on top of it.
  - 422: the value is understood but not allowed (a check failed); the
    message names the fix.
  - 500: a fault on ftw.trade's side, with a reference to quote.
- Prompts (`prompts/list`, `prompts/get`) are starts a person picks from
  their app's menu: `start`, `build-strategy { idea, market? }`,
  `design-dashboard { project?, goal? }` and `check-account`. Each is one user message naming the tools to use.
- Skills are also resources: `resources/list` gives
  `ftw://skills/<name>/<file>`, `resources/read` returns the Markdown.

## Conventions shared by every tool

- **Ids** come from the `list_*` tools: projects from `list_projects`,
  pools as `chain:address` from `list_pools`, series from
  `list_backtest_sources`, deployments (`sd_…`) from
  `list_running_strategies`, automations (`au_…`) from `list_automations`.
- **Amounts** in trading tools are decimal strings (`"0.05"`) where
  precision matters, numbers elsewhere; the schema says which.
- **Wallet selectors**: `"all"`, or `{ wallets?: [ids], groups?: [names] }`.
- **Guides first**: `get_project_guide`, `get_strategy_guide`,
  `get_automation_guide` and `get_warming_guide` return the exact shapes
  their tools take, with working examples. They are the source of truth
  for a document's fields; the skills explain how the parts fit.
- **Dry runs**: many destructive tools take `apply` (default false) and
  only describe what would happen until you pass `apply: true`.
- **Versions**: `save_project` refuses a save made from an older copy
  (409); re-read with `get_project` and apply your change again.
  `save_automation` takes `baseVersion` for the same reason.
- **Mode**: every trade answer carries `mode`. Read it back to the person.

## From your own code

`@ftw/sdk/client` (D1264) wraps these same tools in a typed client that runs
anywhere with `fetch`: `new Ftw({ token })`, then one method per tool, with
refusals thrown as `FtwError`. See references/sdk.md in `ftw-scripts`.

## Over plain HTTP

Some things happen outside MCP:

- Pushed sources receive events at `POST /api/sources/<name>/events` with
  `Authorization: Bearer fws_…` (the source's own key, from
  `create_source`). See `ftw-sources`.
- The skills are plain Markdown at `/skills`, `/skills/<name>` and
  `/skills/<name>/references/<file>`, and `/llms.txt` indexes them.

## Every tool

<!-- generated:mcp-tools -->
**Skills**

- `list_skills` (read): Skills: how to use ftw.trade
- `get_skill` (read): Read a skill

**Finding tools**

- `search_tools` (read): Find a tool
- `get_tool` (read): Read one tool
- `run_tool` (trades or moves funds): Call any tool

**Projects and launches**

- `get_project_guide` (read): How a project is written
- `list_projects` (read): List projects
- `get_project` (read): Get a project
- `create_project` (writes): Create a project
- `save_project` (replaces or deletes): Save a project
- `update_dashboard` (writes): Arrange a project's dashboards
- `check_dashboard` (read): Check how a dashboard will look
- `fork_project` (writes): Fork a project
- `copy_dashboard` (writes): Copy a dashboard into a project
- `update_project_sharing` (writes): Make a project public to fork, or private
- `create_dashboard_link` (writes): Share a project's dashboard by link
- `list_dashboard_links` (read): List a project's dashboard links
- `update_dashboard_link` (writes): Change a dashboard link's wallet addresses or backtests
- `revoke_dashboard_link` (replaces or deletes): Revoke a dashboard link
- `list_dashboard_images` (read): List a dashboard's pictures
- `list_public_projects` (read): List public projects
- `delete_project` (replaces or deletes): Delete a project
- `list_project_templates` (read): Project templates
- `get_project_balances` (read): Project balances
- `list_fills` (read): Project fills
- `get_project_automation` (read): What automates a project
- `get_launch` (read): A launch as it stands
- `preview_launch` (writes): Review a launch before it is sent
- `run_launch` (trades or moves funds): Send a reviewed launch
- `get_launch_book` (read): Launch book status
- `run_launch_book` (trades or moves funds): Arm, launch, or pause the book
- `run_launch_step` (writes): Run a launch step now
- `list_launch_pipeline_templates` (read): Launch pipeline templates
- `apply_launch_workflow` (replaces or deletes): Define a whole launch workflow
- `list_launch_strategies` (read): Launch strategies
- `apply_launch_strategy` (replaces or deletes): Add a launch strategy
- `apply_launch_pipeline_template` (replaces or deletes): Apply a launch pipeline template

**Trading and funds**

- `place_order` (trades or moves funds): Trade now
- `press_shortcut` (trades or moves funds): Press a shortcut
- `place_resting_order` (trades or moves funds): Place a resting order
- `list_resting_orders` (read): Resting orders
- `update_resting_order` (writes): Pause, resume or cancel a resting order
- `list_live_trades` (read): Live trades
- `list_wallets` (read): Account wallets
- `get_main_wallet` (read): Main wallet
- `deposit_paper` (writes): Add paper ETH
- `transfer_funds` (trades or moves funds): Move funds
- `transfer_privately` (trades or moves funds): Fund wallets privately
- `list_transfers` (read): Project transfers

**Workflows and snipers**

- `get_memory` (read): Project memory
- `update_memory` (writes): Change project memory
- `save_workflow` (trades or moves funds): Write a workflow
- `list_workflows` (read): Workflows
- `control_workflow` (replaces or deletes): Arm, start, stop or delete a workflow
- `list_launches` (read): Launches on a launchpad
- `list_sniper_runs` (read): A sniper's runs
- `backtest_sniper` (read): Backtest a sniper on past launches

**Strategies**

- `get_strategy_guide` (read): How a strategy is written
- `list_strategies` (read): Strategies
- `save_strategy` (writes): Write a strategy
- `check_strategy` (read): Check a strategy compiles
- `get_protocol_guide` (read): Read a protocol's skill
- `get_protocol_health` (read): How the protocols' data is followed
- `list_modules` (read): Modules a strategy can import
- `get_module` (read): One module, whole
- `test_strategy` (read): Test a strategy
- `list_libraries` (read): Libraries
- `save_library` (writes): Write a library
- `delete_library` (replaces or deletes): Delete a library
- `get_pine_translation` (read): Translate a Pine Script strategy
- `delete_strategy` (replaces or deletes): Delete a strategy
- `list_backtest_sources` (read): What can be backtested
- `backtest_strategy` (writes): Backtest a strategy
- `backtest_sweep` (read): Sweep a strategy's settings
- `run_optimization` (writes): Optimize a strategy's settings
- `get_optimization` (read): Read an optimization
- `list_optimizations` (read): Past optimizations
- `control_optimization` (writes): Stop an optimization
- `apply_optimization` (writes): Apply an optimization's best settings
- `export_strategy_run` (read): Export a run to run locally
- `list_backtests` (read): Past backtests
- `run_strategy` (trades or moves funds): Deploy, stop or restart a strategy
- `start_preset` (trades or moves funds): Start a no-code strategy template
- `control_strategy_close_out` (trades or moves funds): Close out a run on wallets
- `list_running_strategies` (read): Running strategies
- `add_run_flow` (writes): Record money put into or taken out of a live run
- `get_log` (read): What ran, did, failed and why
- `add_strategy_dashboard` (writes): Chart a running strategy in a project
- `add_desk_dashboard` (writes): Chart several wallets of one strategy together
- `remove_running_strategy` (replaces or deletes): Remove a running strategy

**Strategy search across markets**

- `get_perp_universe` (read): Perps history the platform keeps
- `backtest_rotation` (read): Backtest a cross-sectional book
- `start_strategy_search` (writes): Search for a cross-sectional strategy
- `get_strategy_search` (read): Read a strategy search
- `list_strategy_searches` (read): List strategy searches
- `start_rotation` (writes): Paper-trade a cross-sectional book
- `get_rotation` (read): Read a running book
- `list_rotations` (read): List running books
- `control_rotation` (writes): Stop a running book

**Reading links**

- `read_link` (read): Read a post, thread or article

**Pools and market data**

- `list_pools` (read): Indexed pools
- `list_chains` (read): What works on each chain
- `add_chain` (writes): Add a chain
- `add_pool` (writes): Index a pool
- `search_pools` (read): Find pools by pair
- `get_pool` (read): A pool now
- `get_pool_candles` (read): Pool candles
- `list_pool_swaps` (read): Pool trades
- `get_pool_liquidity` (read): Pool liquidity
- `search_market_data` (read): Shared market data

**Perps and bridges**

- `list_perps_markets` (read): Perps markets
- `add_perps_market` (writes): Add a perps market
- `remove_perps_market` (replaces or deletes): Remove a perps market
- `get_project_perps` (read): A project's perps accounts
- `update_perps_mainnet` (trades or moves funds): Let a wallet trade perps on mainnet
- `run_perps_move` (trades or moves funds): Send a perp order or fund move
- `get_bridge_quote` (read): Quote a bridge
- `get_project_bridges` (read): A project's bridge transfers

**Prediction markets**

- `list_prediction_markets` (read): Prediction markets
- `get_prediction_market` (read): A prediction market
- `get_prediction_wallets` (read): A project's Polymarket wallets
- `run_prediction_setup` (trades or moves funds): Make wallets ready for Polymarket
- `place_prediction_order` (trades or moves funds): Buy or sell a prediction
- `get_prediction_orders` (read): Resting prediction orders
- `remove_prediction_orders` (trades or moves funds): Cancel prediction orders

**Market changes**

- `list_market_changes` (read): Markets opened and closed
- `get_market_status` (read): A market's status

**Order books**

- `get_order_book` (read): A market's order book
- `update_book_recording` (writes): Record a market's order book
- `get_book_history` (read): A market's recorded order book

**Liquidations**

- `get_liquidations` (read): A perp's liquidation map
- `get_liquidation_history` (read): A perp's liquidation summaries over time

**Derive options**

- `get_derive_markets` (read): Derive's options markets
- `get_derive_chain` (read): Derive's options chain
- `get_derive_quote` (read): A Derive quote
- `get_derive_book` (read): A Derive order book
- `get_project_derive` (read): A project's Derive accounts
- `run_derive_move` (trades or moves funds): Trade on Derive from project wallets

**Your trading terminal on ftw.trade**

- `get_terminal_layout` (read): Read your trading terminal
- `update_terminal_layout` (writes): Arrange your trading terminal
- `restore_terminal_layout` (writes): Undo the last terminal change
- `list_chart_studies` (read): Chart studies

**Trading terminal**

- `get_terminal_status` (read): Trading terminal status
- `search_terminal_funding_pairs` (read): Find funding pairs
- `backtest_terminal_pair` (read): Backtest a funding pair
- `run_terminal_pair` (trades or moves funds): Run a funding pair
- `create_terminal_strategy` (read): Write and backtest a strategy
- `update_terminal_strategy` (writes): Change a strategy
- `run_terminal_strategy` (trades or moves funds): Run a strategy
- `search_terminal_strategies` (read): Find strategies that held up
- `search_terminal_portfolios` (read): Find portfolios that held up
- `get_terminal_market_ranking` (read): Rank the perp markets
- `get_terminal_result_explanation` (read): Explain a backtest or run
- `get_terminal_comparison` (read): Compare backtests side by side
- `test_terminal_result_again` (read): Re-test a backtest on another window
- `create_terminal_portfolio` (read): Build and backtest a portfolio
- `update_terminal_portfolio` (writes): Change a portfolio
- `run_terminal_portfolio` (trades or moves funds): Run a portfolio
- `list_terminal_runs` (read): Terminal runs
- `control_terminal_run` (writes): Pause, resume or close a run
- `update_terminal_watch` (writes): Watch a run
- `add_terminal_monitor` (writes): Set a monitor in the terminal
- `list_terminal_monitors` (read): Terminal monitors
- `remove_terminal_monitor` (writes): Remove a terminal monitor
- `update_terminal_chart` (writes): Show a market on the terminal chart
- `add_terminal_indicator` (writes): Add an indicator to the terminal chart
- `update_terminal_chart_levels` (writes): Mark a level on the terminal chart
- `get_terminal_chart` (read): Read the terminal chart
- `update_terminal_ticket` (writes): Fill the terminal order ticket
- `list_terminal_positions` (read): List the terminal positions
- `get_terminal_market` (read): A perps market on both venues

**Perps agent**

- `get_perps_agent` (read): The perps agent
- `update_perps_agent` (trades or moves funds): Set or switch the perps agent
- `add_perps_agent_monitor` (writes): Add a monitor to the perps agent
- `remove_perps_agent_monitor` (writes): Remove a perps agent's monitor
- `control_perps_agent_pair` (trades or moves funds): Close one of the perps agent's pairs

**Liquidity**

- `backtest_lp_ranges` (read): Backtest liquidity ranges
- `list_lp_positions` (read): Liquidity positions
- `control_lp_position` (trades or moves funds): Run a liquidity position
- `add_dashboard_metric` (writes): Add a dashboard metric

**Scripts (automations)**

- `get_automation_guide` (read): How to write an automation
- `list_automations` (read): Automations
- `save_automation` (writes): Write an automation
- `list_automation_versions` (read): An automation's versions
- `run_automation` (trades or moves funds): Deploy, roll back, start, stop or run an automation
- `get_automation_run` (read): An automation run
- `get_automation_logs` (read): An automation's log
- `run_action` (trades or moves funds): Call an action
- `get_automation_memory` (read): Inspect execution memory
- `get_automation_rows` (read): An automation's data
- `delete_automation` (replaces or deletes): Delete an automation

**Flow and monitoring**

- `get_flow` (read): The flow, and what needs a look

**Sources**

- `get_source_guide` (read): Source contracts and metric recipes
- `list_sources` (read): Typed sources
- `get_source` (read): One typed source in depth
- `save_flow_source` (writes): Write a source in Flowscript
- `backtest_flow_source` (read): Backtest a Flowscript source over events
- `save_machine_source` (writes): Run a source on a machine of your own
- `list_machine_sources` (read): The source machine and its sources
- `get_machine_source` (read): A machine source's code
- `update_machine_source` (replaces or deletes): Roll a machine source to a version, or take it off the machine
- `update_source_machine` (writes): Pause or start the source machine
- `create_source` (writes): Declare a pushed, contract-event, call or deploy source
- `create_source_ingress` (writes): Bind durable JetStream ingestion to a pushed source
- `list_source_ingresses` (read): Durable input bindings and committed cursors
- `delete_source_ingress` (replaces or deletes): Revoke a durable input binding
- `create_source_key` (replaces or deletes): Replace a pushed source's key
- `delete_source` (replaces or deletes): Delete a source
- `list_public_sources` (read): Public sources
- `add_public_source` (writes): Subscribe to a public source
- `unsubscribe_public_source` (replaces or deletes): Unsubscribe from a public source
- `update_source_sharing` (writes): Make a source public or private
- `create_source_version` (writes): Release a new major version of a public source
- `update_source_version` (writes): Move an added public source to a newer version
- `get_public_source` (read): One public source, with its code
- `get_source_events` (read): Wait for a source's next events

**Signals**

- `list_signal_types` (read): Signal types
- `list_signals` (read): Signals
- `create_signal` (trades or moves funds): Publish a signal

**Account wallets**

- `list_account_wallets` (read): Account wallets
- `create_account_wallet` (writes): Make an account wallet
- `get_wallet_protocol_positions` (read): Wallet protocol positions
- `get_wallet_history` (read): Wallet history
- `add_wallet_to_project` (writes): Put an account wallet in a project
- `remove_wallet_from_project` (replaces or deletes): Free a wallet from its project
- `control_project` (replaces or deletes): End or reopen a project
- `transfer_wallet_funds` (trades or moves funds): Sweep a wallet's funds to the account
- `update_account_wallet` (writes): Rename, archive or restore a wallet

**Session keys**

- `list_session_keys` (read): Session keys
- `create_session_key` (writes): Make a session key for another agent
- `rotate_session_key` (writes): Rotate this key
- `revoke_session_key` (replaces or deletes): Revoke a session key

**Admin (admin keys only)**

- `run_withdrawal` (trades or moves funds): Withdraw to any address (admin)
- `list_withdrawals` (read): Withdrawals and the withdrawal setting (admin)
- `update_withdrawal_setting` (writes): Turn withdrawals on or off (admin)
- `list_ai_access` (read): Every key and connected app (admin)
- `update_ai_access` (writes): Change a key's or app's access (admin)
- `revoke_ai_access` (replaces or deletes): Revoke a key or disconnect an app (admin)

**Portfolio, level and RPC credits**

- `get_gas_limits` (read): Gas limits
- `update_gas_limits` (writes): Tighten gas limits
- `get_account_level` (read): Level, points and limits
- `get_portfolio` (read): Portfolio value, P&L and positions
- `delete_portfolio_history` (writes): Reset portfolio history
- `list_tracked_wallets` (read): Tracked wallets and their performance
- `add_tracked_wallet` (writes): Track a wallet
- `get_wallet_performance` (read): A tracked wallet's performance
- `remove_tracked_wallet` (replaces or deletes): Stop tracking a wallet
- `get_profile` (read): Public profile
- `update_profile` (writes): Set public profile
- `get_rpc_credits` (read): Hosted RPC use and credits
- `add_rpc_payment` (writes): Credit an RPC payment

**Strategy vaults**

- `list_vaults` (read): Strategy vaults
- `get_vault` (read): One strategy vault
- `create_vault` (writes): Make a strategy vault
- `update_vault` (writes): Rename, close, wind down or upgrade a vault
- `create_vault_dashboard` (writes): Build a vault its own dashboard
- `place_vault_order` (writes): Subscribe to or redeem from a vault
- `update_vault_take_profit` (writes): Take profit from a vault at each dealing
- `delete_vault_order` (writes): Cancel a vault order
- `list_protocol_vaults` (read): Protocol vaults in the registry
- `add_protocol_vault` (writes): List a protocol vault in the registry
- `update_protocol_vault` (writes): Edit a protocol vault listing
- `remove_protocol_vault` (writes): Remove a protocol vault listing

**Buying and funding wallets**

- `list_wallet_marketplace` (read): Wallets for sale
- `create_wallet_purchase` (writes): Order wallets
- `create_wallet_funding` (writes): Fund wallets through Husher
- `list_wallet_orders` (read): Wallet orders
- `delete_wallet_order` (writes): Cancel a wallet order
- `create_wallet_order_approval` (writes): Prepare paying an invoice
- `run_wallet_order_payment` (trades or moves funds): Pay an invoice
- `get_wallet_order_payment` (read): Invoice payment status
- `get_wallet_payment_options` (read): Approving wallets
- `add_purchased_wallets` (writes): Take delivery of bought wallets

**Wallet warming**

- `get_warming_guide` (read): Wallet warming guide
- `list_warming_campaigns` (read): List warming campaigns
- `get_warming_campaign` (read): Get warming campaign
- `create_warming_campaign` (writes): Start wallet warming
- `update_warming_campaign_state` (writes): Pause or resume warming
- `get_warming_status` (read): Warming dashboard
- `get_warming_progress` (read): Warming progress
- `get_warming_funding_status` (read): Husher funding status
- `run_warming_trade` (writes): Schedule warming trade
- `remove_wallets_from_project` (writes): Reclaim wallets from project spec
- `add_warming_wallets_to_project` (writes): Attach warmed wallets to project

**Templates**

- `export_project_template` (read): Export a project as a template
- `preview_template` (read): Preview a template
- `import_template` (writes): Import a template

**Project history**

- `get_project_history` (read): A project’s history
- `get_project_diff` (read): Compare two versions of a project
- `get_project_file` (read): Read a file from a project’s history
- `commit_project` (writes): Commit a project with a message
- `restore_project` (replaces or deletes): Restore a project from its history
- `control_project_branch` (replaces or deletes): Create, switch, rename or delete a project branch
- `get_project_git_access` (writes): Clone a project with git
- `pull_project_branch` (writes): Pull a branch pushed with git

295 tools. Every tool's description and arguments: references/tools.md.
<!-- /generated:mcp-tools -->
