# polymarket_edges

Scan top Polymarket markets and return opportunities where Pipeworx data disagrees with market price. Built for "what should I bet on today" — agents discover opportunities without paging hundreds of markets. FIVE MODEL FAMILIES grouped into three response segments under by_segment: (1) MODEL_DRIVEN — crypto_price (lognormal barrier from 90d FRED log-returns) and news_momentum (GDELT 7d/21d article-volume ratio, soft signal w/ halved Kelly). (2) STRUCTURAL_ARBITRAGE — partition_overround on mutually-exclusive events; per-leg favorite-longshot bias correction with per-sport α (tennis 1.02, soccer 1.10, MMA 1.15, default 1.0); placeholder-slug filter drops will-person-X / will-team-Y / will-manager-Z / will-someone-else- backstops; partitions with >20% placeholder fraction skipped entirely. (3) CONCENTRATED_LONGSHOT — basket trade when one leg ≥75% AND ≥2 longshots ≤8% AND portfolio return ≥25:1; rare-by-design (gates relaxed Run 8 from prior 85%/5%/50:1). EVERY OPPORTUNITY carries edge_pp_net (after slippage), kelly_fraction + kelly_fraction_half (capped at 0.25), market.liquidity, market.spread_pp, market.volume, plus a 24h-move warning ("Market moved X.Xpp in 24h") when the recent move alone exceeds the edge — your edge may already be in the price. TRADEABLE-EDGE KNOBS: min_liquidity / max_spread_pp drop opportunities where edge isn't realizable; min_partition_leg_kelly filters partitions by best per-leg Kelly. RESPONSE TOP-LEVEL: by_segment{model_driven,structural_arbitrage,concentrated_longshot}, fed_candidates/fed_note (Fed bets surface here, excluded from ranking — 1m-T vs EFFR signal is unreliable at meeting-month horizons without paid OIS/SOFR-futures data), and _diagnostics{concentrated_longshot:{...funnel counters},category_counts,filter_skips} so callers can see WHY a segment is empty (top-N stale, all candidates failed gates, knob dropped them). Cached 1h at the KV level keyed on all knobs.

Agent View of the PolicyLayer registry record for `polymarket_edges`. HTML page: https://policylayer.com/tools/io-github-pipeworx-io-19hz/polymarket-edges

## Facts

- Tool: `polymarket_edges`
- Server: 19hz (`https://gateway.pipeworx.io/19hz/mcp`) — https://policylayer.com/tools/io-github-pipeworx-io-19hz.md
- Homepage: https://github.com/pipeworx-io/mcp-19hz
- Risk category: Financial (Critical risk)
- Registry record: grade F, identity unverified
- Server auth posture: open
- Server CORS policy: *
- Server rate-limited: yes
- Parameters: 9
- Recommended policy verdict: Approval-gated

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | number | no | Top N edges to return after ranking. Default 10, max 25. |
| `window` | string | no | Polymarket volume window to filter markets. Default 1wk. |
| `min_kelly` | number | no | Minimum half-Kelly fraction (as decimal, e.g. 0.005 = 0.5% of bankroll) to include single-leg opportunities. Default 0 (no filter). Skips opportunities that are |
| `min_edge_pp` | number | no | Minimum \|edge\| in percentage points to include (default 0.5). Edge is evaluated NET of slippage. |
| `slippage_pp` | number | no | Assumed execution slippage in percentage points per leg (default 0.3). Subtracted from raw \|edge\| before ranking and Kelly sizing. Polymarket has zero trading f |
| `max_spread_pp` | number | no | Tradeable-edge filter. Maximum bid/ask spread in percentage points on the representative market. Default null (no filter). Set to 2 to require tight books — any |
| `min_liquidity` | number | no | Tradeable-edge filter. Minimum $ liquidity on the representative market (or for partition_overround, on at least one top_leg). Default 0 (no filter). Set to 500 |
| `category_filter` | string | no | Comma-separated list to restrict the output: "model_driven" (crypto_price + news_momentum), "structural_arbitrage" (partition_overround), "concentrated_longshot |
| `min_partition_leg_kelly` | number | no | Minimum BEST per-leg half-Kelly fraction across a partition_overround opportunity's top_legs (or longshot_basket legs). Default 0 (no filter). Partition arbs al |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "polymarket_edges",
    "arguments": {}
  }
}
```

## Why polymarket_edges is rated Critical

This tool directly facilitates financial wagering decisions on Polymarket, a real-money prediction market. It scans markets, calculates Kelly criterion-based bet sizing, and surfaces actionable betting opportunities. Misuse by an AI agent could result in real financial losses, placing it squarely in the Financial category with critical severity.

From the tool's own definition: "'what should I bet on today', 'discover opportunities', 'Polymarket markets', 'partition_overround on mutually-exclusive events', 'favorite-longshot bias correction', 'Kelly' — the tool is explicitly designed to identify and recommend betting opportunities on…"

Risk signals: Bulk/mass operation — affects multiple targets

## Use case

AI agents use polymarket_edges to commit financial operations through 19hz, usually the final step of a payment, billing, or trading workflow. A call moves real money.

## Recommended policy (PolicyLayer)

Verdict: **Approval-gated**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches 19hz:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "polymarket_edges": {
      "deny_if": [
        {
          "conditions": [],
          "on_deny": "Requires human approval."
        }
      ]
    }
  }
}
```

## Other tools on 19hz (31)

- `forget` — Destructive — https://policylayer.com/tools/io-github-pipeworx-io-19hz/forget.md
- `polymarket_arbitrage` — Financial — https://policylayer.com/tools/io-github-pipeworx-io-19hz/polymarket-arbitrage.md
- `ai_visibility_check` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/ai-visibility-check.md
- `ask_pipeworx` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/ask-pipeworx.md
- `ask_pipeworx_grounded` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/ask-pipeworx-grounded.md
- `bet_research` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/bet-research.md
- `compare_entities` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/compare-entities.md
- `deep_research` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/deep-research.md
- `discover_tools` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/discover-tools.md
- `entity_profile` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/entity-profile.md
- `events` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/events.md
- `list_subscriptions` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/list-subscriptions.md
- `pipeworx_trending` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/pipeworx-trending.md
- `polymarket_edge_tracker` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/polymarket-edge-tracker.md
- `polymarket_kalshi_spread` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/polymarket-kalshi-spread.md
- `recall` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/recall.md
- `recent_alerts` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/recent-alerts.md
- `recent_changes` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/recent-changes.md
- `regions` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/regions.md
- `resolve_entity` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/resolve-entity.md
- `scan_competitor_ai_presence` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/scan-competitor-ai-presence.md
- `scan_dependency` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/scan-dependency.md
- `search_within` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/search-within.md
- `suggest_questions` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/suggest-questions.md
- `validate_claim` — Read — https://policylayer.com/tools/io-github-pipeworx-io-19hz/validate-claim.md
- `generate_llms_txt` — Write — https://policylayer.com/tools/io-github-pipeworx-io-19hz/generate-llms-txt.md
- `pipeworx_feedback` — Write — https://policylayer.com/tools/io-github-pipeworx-io-19hz/pipeworx-feedback.md
- `polymarket_fill_risk` — Write — https://policylayer.com/tools/io-github-pipeworx-io-19hz/polymarket-fill-risk.md
- `remember` — Write — https://policylayer.com/tools/io-github-pipeworx-io-19hz/remember.md
- `subscribe` — Write — https://policylayer.com/tools/io-github-pipeworx-io-19hz/subscribe.md
- …and 1 more: https://policylayer.com/tools/io-github-pipeworx-io-19hz.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=io-github-pipeworx-io-19hz · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/io-github-pipeworx-io-19hz
