{"name":"molt-trading","slug":"molt-trading","description":"Trade via Jester/Grail with delegated agents such as OpenClaw or Hermes. Discover strategies, backtest, positions, PnL, and propose/confirm trades.","homepage":"https://github.com/openclaw/skills","metadata":{"openclaw":{"category":"finance","requires":{"env":["JESTER_BASE_URL","JESTER_API_KEY"]}},"hermes":{"category":"finance","relatedSkillUrl":"https://app.jester.trade/api/agent/skills/jester-trading/SKILL.md"}},"openapi_url":"https://app.jester.trade/api/agent/openapi.json","tools":[{"name":"whoami","description":"Resolve API key to identity. Returns telegramId (use as id in trades) plus legacy compatibility flags. Always call with ?include=summary first.","method":"GET","path":"/api/delegated/whoami","auth":"x-api-key","queryParams":{"include":"summary"}},{"name":"get_usage","description":"Artifice/agent usage for the current period (API POST quota, tokens, compute, x402). Observe class; GET does not consume the daily POST cap. Same payload as GET /api/v1/usage. Auth: x-api-key or PAYMENT-SIGNATURE (paying wallet needs no key).","method":"GET","path":"/api/delegated/usage","auth":"x-api-key or PAYMENT-SIGNATURE"},{"name":"get_positions","description":"Open positions for the authenticated account (Hyperliquid-first).","method":"GET","path":"/api/delegated/positions","auth":"x-api-key"},{"name":"close_position","description":"Stage a close (action=close|close_all) then confirm. Unstaged flatten is disabled. POST /api/delegated/propose with action=close|close_all (or d=close + a) then confirm, or pass proposalId here.","method":"POST","path":"/api/delegated/positions/close","auth":"x-api-key","exampleBody":{"proposalId":"abc123…","action":"close_all"}},{"name":"pnl_summary","description":"Portfolio equity, unrealized PnL, and period PnL summary.","method":"GET","path":"/api/delegated/pnl/summary","auth":"x-api-key"},{"name":"discover_top_backtests","description":"Browse top cached backtests (WR%, return, drawdown). Use filter=good|excellent|all. Read-only strategy discovery.","method":"GET","path":"/api/delegated/strategies/top-backtests","auth":"x-api-key","queryParams":{"filter":"good","includeAll":"false"}},{"name":"discover_top_live","description":"Browse top strategies by live signal replay. Use with discover_top_backtests for live vs cached comparison.","method":"GET","path":"/api/delegated/strategies/top-live","auth":"x-api-key","queryParams":{"windowDays":"7","limit":"20"}},{"name":"discover_top_optimized_combos","description":"Browse top Redis optimizer parameter sets across all strategies (flat list with full parameters). Use for tuning/deploy; filter=good|all; default BTC-USD 5m 30d.","method":"GET","path":"/api/delegated/strategies/top-optimized-combos","auth":"x-api-key","queryParams":{"pair":"BTC-USD","timeframe":"5m","days":"30","perStrategy":"3","limit":"100","filter":"good","minReturnPct":"2.5","minTrades":"5"}},{"name":"discover_strategies","description":"List available strategy catalog entries (id, name, category). Read-only discovery.","method":"GET","path":"/api/delegated/strategies/available","auth":"x-api-key"},{"name":"run_backtest","description":"Enqueue an async strategy backtest. Returns jobId and pollUrl — poll get_backtest_job until status=done.","method":"POST","path":"/api/delegated/backtests","auth":"x-api-key","exampleBody":{"strategyId":"artifice_v2_56","pair":"BTC-USD","timeframe":"5m","days":30,"parameters":{}}},{"name":"get_backtest_job","description":"Poll async backtest job status and results (from run_backtest).","method":"GET","path":"/api/delegated/backtests/{jobId}","auth":"x-api-key"},{"name":"propose_trade","description":"Preferred trade path: stage a trade for human approval. Returns proposalId — call confirm_trade with the same API key to execute.","method":"POST","path":"/api/delegated/propose","auth":"x-api-key","exampleBody":{"id":"69420000738291","strategy":"Agent","a":"ETHUSDT","d":"long","p":"3500","tp":"3800","sl":"3300","o":"market"}},{"name":"confirm_trade","description":"Execute a staged trade or close proposal (from propose_trade). Proposals expire in 5 minutes. Confirm runs in-process (no HTTP loopback).","method":"POST","path":"/api/delegated/confirm","auth":"x-api-key","exampleBody":{"proposalId":"abc123…"}},{"name":"place_order","description":"Submit a trade signal immediately (no confirmation). Requires a webhook:alerts or legacy key. mcp:mutate keys must use propose_trade. platform:trade keys use POST /api/v1/orders. Direct account execute always runs; set fanout:false or X-Jester-Fanout: 0 to skip subscriber fan-out.","method":"POST","path":"/api/v1/trades","auth":"x-api-key","exampleBody":{"id":"69420000738291","strategy":"Agent","a":"BTCUSDT","d":"long","p":"95000","tp":"98000","sl":"93000","o":"market","fanout":false}},{"name":"approve_builder_fee_payload","description":"Return EIP-712 typed data for Hyperliquid ApproveBuilderFee. Sign with the Hyperliquid account (hyperliquidWallet), not the API agent key. If authorized is true, skip signing.","method":"GET","path":"/api/v1/hyperliquid/builder-fee","auth":"x-api-key","queryParams":{"hyperliquidWallet":"0xYourAccount"}},{"name":"approve_builder_fee","description":"Submit the account wallet signature for ApproveBuilderFee. Body: hyperliquidWallet, nonce from the GET payload, signature (0x hex or {r,s,v}). Do this before POST /api/v1/orders.","method":"POST","path":"/api/v1/hyperliquid/builder-fee","auth":"x-api-key","exampleBody":{"hyperliquidWallet":"0xYourAccount","nonce":1706745600123,"signature":"0x…","signatureChainId":"0x3e7"}},{"name":"platform_place_order","description":"Third-party platform order (immediate). Same sizing/SL/TP body as the terminal. No webhook fan-out. Identity is the API key or x402. Optional hyperliquidApiKey + hyperliquidWallet (approved extra-agent key, not the main EOA) signs this request only when no HL key is stored. Requires platform:trade or legacy. Send Idempotency-Key to make retries safe.","method":"POST","path":"/api/v1/orders","auth":"x-api-key","exampleBody":{"pair":"BTC-USD","side":"long","orderType":"market","sizingMode":"account","accountPercentage":10,"leverage":2,"exchange":"hyperliquid","slEnabled":true,"slType":"percentage","slPercentage":2,"tpEnabled":true,"tpType":"percentage","tpPercentage":4}},{"name":"platform_close_position","description":"Close one position immediately (pair or positionId). Flatten (close_all) stays propose → confirm. Optional hyperliquidApiKey + hyperliquidWallet for true headless. Requires platform:trade or legacy. mcp:mutate keys stage close via propose_trade.","method":"POST","path":"/api/v1/positions/close","auth":"x-api-key","exampleBody":{"pair":"BTC-USD","percentage":100,"exchange":"hyperliquid"}},{"name":"platform_cancel_order","description":"Cancel one or more resting Hyperliquid orders by oid. Optional hyperliquidApiKey + hyperliquidWallet for true headless. Requires platform:trade or legacy.","method":"POST","path":"/api/v1/orders/cancel","auth":"x-api-key","exampleBody":{"oid":123456,"coin":"BTC"}},{"name":"list_open_orders","description":"List resting orders for the API key account. Query exchange=hyperliquid|propr|all (default all). Hyperliquid rows include oid for platform_cancel_order.","method":"GET","path":"/api/v1/orders","auth":"x-api-key","queryParams":{"exchange":"all"}},{"name":"list_signal_destinations","description":"List HTTPS URLs that receive catalog BUY/SELL/CLOSE when those strategies fire. Partners execute on their own exchange.","method":"GET","path":"/api/v1/signal-destinations","auth":"x-api-key"},{"name":"create_signal_destination","description":"Register an HTTPS URL. Jester POSTs a signed signal JSON when listed strategyIds fire. signingSecret is shown once. strategyIds: [\"artifice_v2_56\"] or [\"*\"].","method":"POST","path":"/api/v1/signal-destinations","auth":"x-api-key","exampleBody":{"url":"https://your-platform.example/jester/signals","strategyIds":["artifice_v2_56"],"directions":["BUY","SELL","CLOSE"],"name":"My exchange"}},{"name":"list_audit_logs","description":"Recent delegated execute attempts for this API key’s account only (no telegramId override). Returns 503 audit_unavailable if the log store is down.","method":"GET","path":"/api/delegated/logs","auth":"x-api-key","queryParams":{"limit":"50"}},{"name":"list_tools","description":"Return the live Jester agent tool catalog, OpenAPI URL, and install hints for OpenClaw / Hermes.","method":"GET","path":"/api/delegated/tools","auth":"x-api-key"},{"name":"list_mcp_capabilities","description":"Full jester_* MCP tool catalog with JSON schemas (observe/experiment/mutate tiers). Used by the Cursor/Claude stdio bridge. Requires MCP_DELEGATED_ENABLE on the deployment.","method":"GET","path":"/api/delegated/mcp/capabilities","auth":"x-api-key"},{"name":"execute_mcp_tool","description":"Execute a single jester_* MCP tool directly (tool-only mode — your own LLM does the reasoning). Mutate tools may return a confirmToken to re-submit in args.","method":"POST","path":"/api/delegated/mcp/tool","auth":"x-api-key","exampleBody":{"name":"artifice_portfolio_summary","args":{}}},{"name":"mcp_agent_chat","description":"Full Jester Agent turn: the server runs its own LLM + jester_* tool loop using the LLM provider key saved in your Jester settings and returns the final reply.","method":"POST","path":"/api/delegated/mcp/chat","auth":"x-api-key","exampleBody":{"messages":[{"role":"user","content":"Summarize my open positions and PnL"}]}},{"name":"mcp_cli","description":"Deterministic slash-command CLI (no LLM). Use /synapse start <task>, /synapse, /synapse say <message>, /synapse stop, or /help.","method":"POST","path":"/api/delegated/mcp/cli","auth":"x-api-key","exampleBody":{"command":"/synapse start Find me a new BTC edge."}},{"name":"synapse_status","description":"Active Synapse run for this account (Prime + spawned agents). Session, x-api-key, or PAYMENT-SIGNATURE.","method":"GET","path":"/api/terminal/synapse/runs/active","auth":"x-api-key or PAYMENT-SIGNATURE"},{"name":"synapse_start","description":"Start a Synapse run. Prime begins immediately. Follow up with synapse_message; stop with synapse_stop.","method":"POST","path":"/api/terminal/synapse/runs","auth":"x-api-key or PAYMENT-SIGNATURE","exampleBody":{"task":"Find me a new BTC edge."}},{"name":"synapse_message","description":"Send a follow-up to Prime on an active Synapse run.","method":"POST","path":"/api/terminal/synapse/runs/{runId}/message","auth":"x-api-key or PAYMENT-SIGNATURE","exampleBody":{"message":"Ignore strategies requiring options data."}},{"name":"synapse_stop","description":"Stop a Synapse run. Remnants and artifacts remain.","method":"POST","path":"/api/terminal/synapse/runs/{runId}/stop","auth":"x-api-key or PAYMENT-SIGNATURE"}],"example_prompts":["Run whoami with include=summary and show my open positions","Show top backtests with filter=good and recommend one to subscribe to","Propose an ETH long for my approval before executing","Run a 30-day backtest on artifice_v2_56 for BTC-USD 5m","Summarize my portfolio PnL"],"install_instruction":"!add-skill molt-trading","install_cli":"npx clawhub@latest install molt-trading","skill_url":"https://app.jester.trade/api/agent/skills/molt-trading.json"}