Skip to main content
Glama

Server Details

Polymarket, Manifold, Metaculus compared: one fair probability per question. No API key needed.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
81.1% over 75 days
Last Tested
Transport
Streamable HTTP
URL

TDQS

A4.7/5.0

Scored across 9 tools

Disambiguation5/5

Every tool targets a distinct resource and action: create_forecast is the only write tool, get_* reads single entities (market probabilities, history, research, forecaster record), and list_* scans collections (markets, movers, discrepancies, platforms). No two tools overlap in purpose, and the three market reads are clearly separated as current vs. historical vs. qualitative.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: get_ for single-item reads, list_ for collection reads, and create_ for the sole write operation. There are no mixed conventions or vague verbs.

Tool Count5/5

9 tools is well-scoped for a prediction-market server: one deliberate write action, four single-market/forecaster reads, and four collection-browsing tools. Nothing feels redundant, and the count is right in the sweet spot for the domain.

Completeness4/5

The server covers the core workflow: discover markets (list_markets), analyze current price/history/research (get_market_*), detect cross-venue disagreement and movement (list_discrepancies, list_movers, list_platforms), and commit a forecast (create_forecast) with auditing via get_forecaster_record. A minor gap is the lack of a tool to fetch a single forecast's details after submission, though the returned URL and aggregate record mitigate this.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updates
    • Addedcreate_forecast
    • Removedfind_discrepancies
    • Changedget_forecaster_record1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "Public track record for one forecaster or agent handle.",
        +  "properties": {
        +    "accuracy_pct": {
        +      "description": "The most flattering and least informative figure here.",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "attribution": {
        +      "type": "string"
        +    },
        +    "calibration": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "calibration_error_pts": {
        +            "description": "Signed percentage points; positive = overconfident in YES.",
        +            "type": "number"
        +          },
        +          "forecasts": {
        +            "type": "integer"
        +          },
        +          "mean_forecast": {
        +            "type": "number"
        +          },
        +          "observed_yes_rate": {
        +            "type": "number"
        +          },
        +          "probability_bucket": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "forecaster_kind": {
        +      "type": "string"
        +    },
        +    "generated_at": {
        +      "type": "string"
        +    },
        +    "handle": {
        +      "type": "string"
        +    },
        +    "mean_brier": {
        +      "description": "LOWER is better. Do not lead with it - it rewards forecasting only near-certain markets.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "methodology": {
        +      "type": "string"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "notice": {
        +      "description": "Set INSTEAD of data when the call succeeded but has nothing to return: unknown slug, empty result, a tool not on this tier, or quota spent. Not an error.",
        +      "type": "string"
        +    },
        +    "provisional": {
        +      "description": "When true, report the figures as provisional alongside resolved_forecasts, never as a standing.",
        +      "type": "boolean"
        +    },
        +    "public_url": {
        +      "type": "string"
        +    },
        +    "publication_threshold": {
        +      "type": "integer"
        +    },
        +    "published": {
        +      "type": "boolean"
        +    },
        +    "ranking_threshold": {
        +      "type": "integer"
        +    },
        +    "requests_remaining_today": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "resolved_forecasts": {
        +      "description": "Open forecasts prove nothing; read every figure here against this count.",
        +      "type": "integer"
        +    },
        +    "skill_vs_market": {
        +      "additionalProperties": true,
        +      "description": "THE NUMBER TO READ: `brier_skill` above 0 beats the market, about 0 means the forecaster is reproducing it, below 0 is worse.",
        +      "properties": {
        +        "baseline_mean_brier": {
        +          "type": "number"
        +        },
        +        "baseline_source": {
        +          "type": "string"
        +        },
        +        "brier_skill": {
        +          "description": "baseline_mean_brier minus mean_brier.",
        +          "type": "number"
        +        },
        +        "brier_skill_score": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "comparable_forecasts": {
        +          "type": "integer"
        +        },
        +        "interpretation": {
        +          "type": "string"
        +        },
        +        "mean_brier": {
        +          "type": "number"
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "skipseek_score": {
        +      "description": "100 * (1 - mean Brier); inherits the same bias.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "tier": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_market_history2 fields changed
      • changedInput schema / properties / market / description
        Previous value: -"Market slug, exactly as returned in the `slug` field by list_markets, find_discrepancies or get_movers (e.g. \"fed-cuts-rates-by-september\"). Opaque — do not construct or guess one; a slug that does not exist returns a not-found message rather than data."New value: +"Market slug, exactly as returned in the `slug` field by list_markets, list_discrepancies or list_movers (e.g. \"fed-cuts-rates-by-september\"). Opaque — do not construct or guess one; a slug that does not exist returns a not-found message rather than data."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "Consensus snapshots for one market.",
        +  "properties": {
        +    "attribution": {
        +      "type": "string"
        +    },
        +    "consensus_history": {
        +      "description": "OLDEST FIRST.",
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "captured_at": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "cross_market_spread_pts": {
        +            "description": "In percentage points.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "fair_probability": {
        +            "description": "Decimal 0-1.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "sources_count": {
        +            "description": "Venues feeding this snapshot; a series whose count changes is not measuring one thing throughout.",
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "generated_at": {
        +      "type": "string"
        +    },
        +    "market": {
        +      "type": "string"
        +    },
        +    "notice": {
        +      "description": "Set INSTEAD of data when the call succeeded but has nothing to return: unknown slug, empty result, a tool not on this tier, or quota spent. Not an error.",
        +      "type": "string"
        +    },
        +    "requests_remaining_today": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "tier": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_market_probabilities2 fields changed
      • changedInput schema / properties / market / description
        Previous value: -"Market slug, exactly as returned in the `slug` field by list_markets, find_discrepancies or get_movers (e.g. \"fed-cuts-rates-by-september\"). Opaque — do not construct or guess one; a slug that does not exist returns a not-found message rather than data."New value: +"Market slug, exactly as returned in the `slug` field by list_markets, list_discrepancies or list_movers (e.g. \"fed-cuts-rates-by-september\"). Opaque — do not construct or guess one; a slug that does not exist returns a not-found message rather than data."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "Current cross-venue picture for one market.",
        +  "properties": {
        +    "attribution": {
        +      "type": "string"
        +    },
        +    "confidence": {
        +      "additionalProperties": true,
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "fair_probability": {
        +      "description": "Decimal 0-1.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "gaps": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "captured_at": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "gap_points": {
        +            "description": "Signed distance from fair value in percentage POINTS; positive = venue prices it higher.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "label": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "platform_id": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "generated_at": {
        +      "type": "string"
        +    },
        +    "market": {
        +      "type": "string"
        +    },
        +    "notice": {
        +      "description": "Set INSTEAD of data when the call succeeded but has nothing to return: unknown slug, empty result, a tool not on this tier, or quota spent. Not an error.",
        +      "type": "string"
        +    },
        +    "requests_remaining_today": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "sources": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "match_type": {
        +            "description": "How closely this contract matches the standardized question; a loose match discounts the gap.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "price": {
        +            "description": "That venue's own probability, 0-1, before consensus weighting.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "venue": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "tier": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_market_research
    • Removedget_movers
    • Addedlist_discrepancies
    • Changedlist_markets1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "The SkipSeek board, filtered and ordered as requested.",
        +  "properties": {
        +    "attribution": {
        +      "type": "string"
        +    },
        +    "generated_at": {
        +      "type": "string"
        +    },
        +    "markets": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "category": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "closesAt": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "confidence": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "confidenceBand": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "crossSpreadPts": {
        +            "description": "Highest-to-lowest venue spread, in percentage points.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "fair": {
        +            "description": "Consensus probability as a decimal 0-1, not a percentage.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "history": {
        +            "items": {
        +              "type": "number"
        +            },
        +            "type": "array"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "move24hPts": {
        +            "description": "24h change in percentage POINTS, signed; negative means it fell.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "slug": {
        +            "type": "string"
        +          },
        +          "sources": {
        +            "type": "integer"
        +          },
        +          "status": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "topGapLabel": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "topGapPts": {
        +            "description": "Signed, in percentage points.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "venues": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "notice": {
        +      "description": "Set INSTEAD of data when the call succeeded but has nothing to return: unknown slug, empty result, a tool not on this tier, or quota spent. Not an error.",
        +      "type": "string"
        +    },
        +    "requests_remaining_today": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "tier": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedlist_movers
    • Changedlist_platforms1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "description": "The venues SkipSeek currently publishes.",
        +  "properties": {
        +    "attribution": {
        +      "type": "string"
        +    },
        +    "generated_at": {
        +      "type": "string"
        +    },
        +    "notice": {
        +      "description": "Set INSTEAD of data when the call succeeded but has nothing to return: unknown slug, empty result, a tool not on this tier, or quota spent. Not an error.",
        +      "type": "string"
        +    },
        +    "platforms": {
        +      "description": "Current coverage, authoritative: venues under a restrictive licence are never returned.",
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "homepage": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "kind": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "slug": {
        +            "type": "string"
        +          },
        +          "weight": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "requests_remaining_today": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "tier": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Removedresearch_market
    • Removedsubmit_forecast
  2. 1 tool update
    • Changedget_forecaster_record1 field changed
      • changedInput schema / properties / handle / description
        Previous value: -"The forecaster's public handle, with or without a leading @ (both \"@calibrated_owl\" and \"calibrated_owl\" work), or the profile's public id as it appears in a https://skipseek.com/forecasters/<id> URL. Case-insensitive. Handles are a single namespace across humans and agents, so one handle identifies exactly one forecaster. Omit it to read the record of the API key making the call — which needs a real key, since the shared demo key has no record of its own."New value: +"WHICH forecaster to read. Accepts exactly three forms, in this order of preference. (1) A HANDLE: \"@calibrated_owl\" or \"calibrated_owl\" — the @ is optional and matching is case-insensitive. (2) A PUBLIC ID: the uuid as it appears in a https://skipseek.com/forecasters/<id> URL, useful when you have the link but not the name. (3) OMITTED ENTIRELY: reads the record of the API key making this call, which is how an agent audits itself — this form needs a real key, because the shared demo key has no record of its own. Handles are one namespace across humans and AI agents, so any handle identifies exactly one forecaster and you never need to say which kind you mean."
  3. 2 tool updates
    • Addedget_market_history
    • Removedmarket_history
  4. 9 tool updates
    • First observedfind_discrepancies
    • First observedget_forecaster_record
    • First observedget_market_probabilities
    • First observedget_movers
    • First observedlist_markets
    • First observedlist_platforms
    • First observedmarket_history
    • First observedresearch_market
    • First observedsubmit_forecast

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Aggregates prediction market data from 5 major platforms (Manifold, Polymarket, Metaculus, PredictIt, Kalshi), enabling users to search markets, compare odds across platforms, detect arbitrage opportunities, and track predictions through natural language.
    8
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Prediction market probability oracle for AI agents. 26 tools across 500+ live markets from Kalshi and Polymarket. Cross-source arbitrage detection, structured TPF signals, Kelly Criterion sizing, agent performance tracking, and webhook alerts.
    9
    74 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Trade and monitor prediction markets across Polymarket, Kalshi, Opinion, Limitless, and PredictFun from any AI agent. Unified real-time data, live orderbook streaming, and order execution — one API key, one interface, five exchanges.
    -
  • A
    license
    A
    quality
    B
    maintenance
    24/7 autonomous monitoring and edge detection for prediction markets (Kalshi & Polymarket). Features causal tree analysis, orderbook depth tracking, cross-venue comparison, and real-time alerts.
    16
    196 npm
    12
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources