# FORM betting intelligence

Use FORM as read-only sports and prediction-market intelligence. FORM does not hold venue credentials, submit orders, or guarantee winners.

Connect natively over MCP at `https://form.market/api/mcp`, or use the HTTP workflow below. The MCP server supports the current stateless protocol (`2026-07-28`) plus handshake-era clients through `2025-03-26`. It exposes fifteen bounded read-only capabilities and no execution tool.

## Default loop

Use this unless the human explicitly asks for deeper diagnostics:

1. Call `form_start_research` with the requested topic and time horizon.
2. Build your own probability estimate from independent evidence, then call `form_evaluate_market` with the returned stable market ID and your settled history or latest learning profile.
3. After settlement, add the forecast and actual trade result to the history and call `form_review_learning_loop`. Reuse its stricter learning profile on the next evaluation.
4. Tell the human only: BET, WATCH, or PASS; the market; maximum price; maximum loss; the main reason; what could make it wrong; and when the answer expires.

Never weaken a PASS, invent a probability, or place an order. The remaining tools below exist for verification, portfolio work, and advanced inspection.

## Advanced workflow

For a near-term slate, explicitly pass `closesWithinHours` to `form_start_research`: use `24` for today, `168` for the next week, or `720` for the next 30 days. Without a horizon, distant contracts remain eligible and may rank ahead of near-term markets.

1. For the fastest bounded start, call `form_start_research` with optional venue, category, or text filters. A filtered request searches up to three live pages, tries no more than three ranked eligible tapes, and returns the first fresh synchronized two-sided book or an explicit `no-fresh-candidate`; inspect `coverage` before treating an empty result as exhaustive. For an empty result, obey `next.action`: `stop` means return PASS, `retry_later` means do not substitute a weak market, and `broaden_filters` may be followed only when the user permits a wider scope. It never supplies probability or edge. Retain the complete response and call `form_verify_research_receipt` before reuse; a valid checksum proves internal consistency, not FORM authorship or source truth. For broader browsing, call `form_discover_markets` or fetch `https://form.market/api/market-network`. Start with `researchQueue`, which ranks only observable research quality: open status, a displayed price, spread tightness, and reported activity. Compact MCP results include `next.tool` and `next.arguments`, the exact venue-specific call needed to replace discovery data with a fresh order book before analysis. Use the score, band, component facts, and reasons to spend research effort efficiently, never as a probability estimate or edge claim. Continue each venue independently with `cursors.kalshi` and `cursors.polymarket`; never pass one venue's cursor to the other. Keep venue-scoped IDs, price semantics, and provenance separate. Similar titles are not evidence of equivalent settlement terms. This is factual discovery only: never treat inclusion, rank, reference price, displayed quote, volume, or category as a recommendation, executable fill, or edge.
2. For one discovered market, call `form_get_kalshi_tape` or `form_get_polymarket_tape` based on its venue-scoped ID, or fetch the matching `/api/kalshi-tape` or `/api/polymarket-tape` endpoint. Require `quality.fresh`, `quality.synchronized`, and `quality.twoSided`; reject the response after `validUntil`. Select the book whose `outcome` exactly matches the intended side. Its `bestAsk` and displayed depth are current observations, not promises that an order will fill.
3. For FORM's currently supported sports decision workflow, fetch `https://form.market/api/agent-tape`. Read `coverage.availableCompetitions`, and optionally target an exact `competition`, stable `marketId`, maximum spread, minimum touch size, resolution cutoff, and `limit`. Reject the tape after `validUntil`. Treat quotes and displayed depth as market facts, not proof of fillability, fair value, or edge.
4. Fetch `https://form.market/api/agent-decision`. Reject the decision after `validUntil`. `no-play` is a successful answer and must not be replaced with a weaker pick.
5. Fetch `https://form.market/api/agent-reputation`. Treat `unrated` or `provisional` as insufficient evidence of durable skill. Never convert null metrics to zero.
6. If you have an independently sourced probability estimate and a stable Kalshi or Polymarket `marketId`, call MCP tool `form_evaluate_market` or `POST https://form.market/api/agent-evaluation`. Include your documented estimate method, thesis, strongest countercase, invalidation condition, confirmed public settlement-rules URL, and 2–8 timestamped HTTPS sources containing both supporting and opposing evidence across at least two hosts. FORM fetches the exact fresh ask for the requested venue and side. It returns PASS when price fails, WATCH when price clears but the research packet is incomplete, or BET when both price and the caller-owned packet clear every structural gate. FORM validates structure and provenance, not the truth of source claims, and never treats contracts on different venues as equivalent.
7. Retain the complete evaluation response and its `receipt`. Before reuse, call `form_verify_evaluation_receipt` or `POST https://form.market/api/agent-evaluation-verify` with the complete response. A valid SHA-256 digest proves only that the packet still matches its embedded request and response. It is not a FORM signature, proof of source truth, or external timestamp.
8. If you have forecasts for multiple stable Kalshi and/or Polymarket market IDs, call `form_rank_slate` or `POST https://form.market/api/agent-ranking`. Submit 1–20 forecasts with shared bankroll plus per-market, caller-declared correlation-group, and total portfolio-loss limits. FORM fetches each required venue tape, ranks WATCH results together, and allocates whole contracts without exceeding displayed touch liquidity or any risk cap; preserve every PASS and unavailable market. Displayed size is not a fill guarantee. FORM does not infer contract equivalence or verify the groups, so treat the allocation as an upper bound requiring portfolio review.
9. Retain the complete ranked response and its `receipt`. Call `form_verify_slate_receipt` or `POST https://form.market/api/agent-ranking-verify` with the complete response before reuse. The SHA-256 digest checks the exact normalized request and response using compact JSON with every object’s keys sorted lexicographically and array order preserved. It is not a FORM signature or external timestamp; anyone can recompute it after rewriting a packet.
10. Keep the agent's sealed settled forecast and executed-trade history. On every later `form_evaluate_market` call, include it as `settledHistory` with a stable `agentId`, a new `iterationId`, and up to 500 forecast `records` and/or 500 executed `trades`. A trade may include its actual entry price, recorded price ceiling, actual risk percentage, recorded risk ceiling, realized P&L, side, market ID, and settlement time. FORM detects chasing and oversizing, derives a learning profile, and atomically tightens the uncertainty floor, required-edge floor, and maximum-risk ceiling before evaluating the live price. Reuse the returned `qualification.learningProfile` when sending the full history is inefficient. Never supply both. Call `form_review_learning_loop` to inspect forecast skill and execution discipline. A learning profile changes decision constraints; it does not retrain the caller's model or prove causality.
11. Use `form_price_scenario` or `POST https://form.market/api/agent-pricing` only when evaluating a manually observed price that is not available in FORM's fresh tape.
12. Before presenting a bet from `form_evaluate_market`, require `action` to equal `BET` and `qualification.betQualified` to equal `true`. Before presenting FORM's own published decision, require `decision.action` to equal `qualified-bet`. In both cases independently reconfirm the current executable line, settlement rules, maximum price, risk limit, evidence, countercase, and invalidation condition.
13. Never place an order from FORM output. Ask the human to verify the current line and make the final decision.

## Human-facing response

Return exactly these fields in plain language:

- **Action:** BET, WATCH, or PASS
- **Market:** venue, event, contract, and side; `None` for a pass
- **Maximum price:** exact cents or American odds; `None` for a pass
- **Risk limit:** maximum loss; `None` for a pass
- **Why:** strongest evidence, or the primary reason for passing
- **Could be wrong because:** strongest countercase
- **Invalid if:** the condition that cancels the thesis
- **Sources:** direct evidence links with observation times
- **Expires:** the decision expiration time

Do not describe a market-quality score, crowd price, historical backtest, or another agent's opinion as a winning edge. If any required field is unavailable, return PASS and name the missing evidence.

OpenAPI: `https://form.market/openapi.json`
