Cross-venue prediction market odds (Polymarket, Kalshi, PredictIt, Manifold) with arbitrage signals
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Cross-venue arbitrage, buying YES on one venue and NO on another so one leg always pays, with net edge per contract after modelled fees, ROI and available size. Without a PRO plan, results beyond a short preview cost $0.01 per call from the caller's prepaid credit; callers without credit see the preview.
Max results (default 20)
Minimum net edge per contract in dollars (default 0)
Match confidence filter
Cross-venue arbitrage, buying YES on one venue and NO on another so one leg always pays, with net edge per contract after modelled fees, ROI and available size. Without a PRO plan, results beyond a short preview cost $0.01 per call from the caller's prepaid credit; callers without credit see the preview.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 20) |
| minEdge | number | Minimum net edge per contract in dollars (default 0) |
| confidence | string | Match confidence filter |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max results (default 20)"
},
"minEdge": {
"type": "number",
"description": "Minimum net edge per contract in dollars (default 0)"
},
"confidence": {
"enum": [
"HIGH",
"MEDIUM"
],
"type": "string",
"description": "Match confidence filter"
}
},
"additionalProperties": false
}Propositions matched across venues with each venue's price side by side, the liquidity-weighted consensus probability, the dispersion between venues and the cheapest venue to buy YES or NO.
| Argument | Type | Description |
|---|---|---|
| sort | string | Ordering (default volume) |
| limit | integer | Max results (1-25, default 10) |
| query | string | Keywords, e.g. 'bitcoin 2026' or 'senate' |
| theme | string | Restrict to one browsing theme |
| minVenues | integer | Minimum number of venues (default 2) |
{
"type": "object",
"properties": {
"sort": {
"enum": [
"volume",
"dispersion",
"edge",
"closing",
"venues"
],
"type": "string",
"description": "Ordering (default volume)"
},
"limit": {
"type": "integer",
"description": "Max results (1-25, default 10)"
},
"query": {
"type": "string",
"description": "Keywords, e.g. 'bitcoin 2026' or 'senate'"
},
"theme": {
"enum": [
"elections",
"geopolitics",
"politics",
"crypto",
"economy",
"finance",
"tech-science",
"climate",
"culture",
"sports",
"other"
],
"type": "string",
"description": "Restrict to one browsing theme"
},
"minVenues": {
"type": "integer",
"description": "Minimum number of venues (default 2)"
}
},
"additionalProperties": false
}Venues whose executable price is away from the consensus of the other real-money venues, with expected edge per contract if that consensus is right. Without a PRO plan, results beyond a short preview cost $0.01 per call from the caller's prepaid credit; callers without credit see the preview.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 20) |
| venue | string | Only signals on this venue |
| minEdge | number | Minimum expected edge per contract (default 0) |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max results (default 20)"
},
"venue": {
"enum": [
"POLYMARKET",
"KALSHI",
"PREDICTIT"
],
"type": "string",
"description": "Only signals on this venue"
},
"minEdge": {
"type": "number",
"description": "Minimum expected edge per contract (default 0)"
}
},
"additionalProperties": false
}The calling key's calibration record - Brier score, log loss, skill against the market price and the consensus at posting time, and a 10-bucket calibration curve.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}One matched event by id (evt_...), with every venue quote and the live arbitrage and mispricing signals on it.
| Argument | Type | Description |
|---|---|---|
| id* | string | Event id from find_cross_venue_events |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Event id from find_cross_venue_events"
}
},
"additionalProperties": false
}Full detail for one market by id: {venue}:{nativeId}, as returned by search_markets.
| Argument | Type | Description |
|---|---|---|
| id* | string | Market id, e.g. polymarket:516710 |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Market id, e.g. polymarket:516710"
}
},
"additionalProperties": false
}Implied probability of one market as the last value per bucket, for any range (default the last 24 hours at 5 minute resolution). History is kept permanently, including for closed markets. Without a PRO plan, the full series costs $0.002 per call from the caller's prepaid credit; callers without credit get the latest 12 points.
| Argument | Type | Description |
|---|---|---|
| to | string | End, exclusive, ISO-8601 instant or epoch millis (default: now) |
| from | string | Start, ISO-8601 instant or epoch millis (default: 24h before 'to') |
| marketId* | string | Market id |
| resolutionSeconds | integer | Bucket size in seconds (default 300) |
{
"type": "object",
"required": [
"marketId"
],
"properties": {
"to": {
"type": "string",
"description": "End, exclusive, ISO-8601 instant or epoch millis (default: now)"
},
"from": {
"type": "string",
"description": "Start, ISO-8601 instant or epoch millis (default: 24h before 'to')"
},
"marketId": {
"type": "string",
"description": "Market id"
},
"resolutionSeconds": {
"type": "integer",
"description": "Bucket size in seconds (default 300)"
}
},
"additionalProperties": false
}The calling key's signals, newest first, with status (OPEN, SCORED, VOID) and scores once resolved.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 20) |
| status | string | Filter by status |
| marketId | string | Only signals on this market |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max results (default 20)"
},
"status": {
"enum": [
"OPEN",
"SCORED",
"VOID"
],
"type": "string",
"description": "Filter by status"
},
"marketId": {
"type": "string",
"description": "Only signals on this market"
}
},
"additionalProperties": false
}Venues covered (Polymarket, Kalshi, PredictIt, Manifold), the number of open markets on each, sync health and whether prices are streamed live.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Records a forecast on one market (or cross-venue event) for the calling API key. probability is the probability that the market resolves YES. The market price and cross-venue consensus at posting time are stored with it. Each signal is scored with Brier score and log loss when the market resolves, building a calibration record per key. It does not place a trade.
| Argument | Type | Description |
|---|---|---|
| side | string | The side you would trade (default: YES if probability >= 0.5) |
| size | number | Contracts you would trade |
| eventId | string | Cross-venue event id (evt_...), instead of marketId |
| marketId | string | Market id ({venue}:{nativeId}); or give eventId |
| rationale | string | Why, up to 4000 characters |
| confidence | number | Your confidence in this forecast, 0 to 1 |
| ttlSeconds | integer | How long the forecast stands (default one day) |
| probability* | number | Your probability that the market resolves YES, between 0 and 1 exclusive |
Open binary markets on every venue whose text contains all the keywords, with normalised prices (probability, best bid and ask for YES and NO), volume, close time, the venue URL and the cross-venue eventId when the market is matched on other venues.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (1-50, default 10) |
| query | string | Keywords that must all appear, e.g. 'fed december cut' |
| theme | string | Restrict to one browsing theme |
| venue | string | Restrict to one venue |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max results (1-50, default 10)"
},
"query": {
"type": "string",
"description": "Keywords that must all appear, e.g. 'fed december cut'"
},
"theme": {
"enum": [
"elections",
"geopolitics",
"politics",
"crypto",
"economy",
"finance",
"tech-science",
"climate",
"culture",
"sports",
"other"
],
"type": "string",
"description": "Restrict to one browsing theme"
},
"venue": {
"enum": [
"POLYMARKET",
"KALSHI",
"PREDICTIT",
"MANIFOLD"
],
"type": "string",
"description": "Restrict to one venue"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"probability"
],
"properties": {
"side": {
"enum": [
"YES",
"NO"
],
"type": "string",
"description": "The side you would trade (default: YES if probability >= 0.5)"
},
"size": {
"type": "number",
"description": "Contracts you would trade"
},
"eventId": {
"type": "string",
"description": "Cross-venue event id (evt_...), instead of marketId"
},
"marketId": {
"type": "string",
"description": "Market id ({venue}:{nativeId}); or give eventId"
},
"rationale": {
"type": "string",
"description": "Why, up to 4000 characters"
},
"confidence": {
"type": "number",
"description": "Your confidence in this forecast, 0 to 1"
},
"ttlSeconds": {
"type": "integer",
"description": "How long the forecast stands (default one day)"
},
"probability": {
"type": "number",
"description": "Your probability that the market resolves YES, between 0 and 1 exclusive"
}
},
"additionalProperties": false
}