Prediction Market Friction Tracker

io.github.ndrysdal-bytePublished by GitHub account ndrysdal-bytev1.0.0Updated Oct 24, 2026

Prediction-market fee/KYC/withdrawal data, venue recommendations, and a paid x402 change feed.

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

A remote MCP server that gives an assistant fee, KYC and withdrawal data for 12 prediction-market venues, plus venue recommendations.

What you can do
Browse and filter the current snapshot of tracked prediction-market venues by confidence level (verified, stale, unconfirmed). Retrieve one venue's full fee, KYC, withdrawal and API-access details by slug. Ask a free-text question such as which venue is best for low fees or no KYC, answered from the current dataset. Get information about the paid change feed, including its URL and price, without fetching the data itself.
When to use it
Useful when an assistant needs to compare execution friction across prediction-market venues before routing a trade, or when a user asks which venue suits a constraint like avoiding KYC or needing API access.
Requirements
A remote streamable-HTTP endpoint; no local install, account, API key or headers are declared. The assistant connects to the MCP URL directly.
Before you install
The change feed is paid: each request costs $0.05 USDC on Base mainnet via the x402 protocol, and the README states this is live with real money. Records marked unconfirmed are ambiguous LLM extractions and should be verified with the venue. Data is informational only, not financial or legal advice. The server's own pipeline sends scraped page text to Claude.

Installation

In SourceWeft

  1. Open Prediction Market Friction Tracker in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.ndrysdal-byte%2Fprediction-friction-tracker/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "prediction-market-friction-tracker": {
      "type": "http",
      "url": "https://prediction-friction-tracker-production.up.railway.app/mcp/"
    }
  }
}

README

Prediction market friction tracker

Structured KYC, fee, and withdrawal data across 12 prediction-market venues, plus a change feed for when those terms move and a natural-language "which venue is best for X" recommendation tool. Built for AI agents that need to check execution friction before routing a trade — not for humans clicking around a dashboard.

Live now: https://prediction-friction-tracker-production.up.railway.app

For agents: three ways in

  1. Plain HTTP — GET /friction/venues, GET /friction/venue/{slug}, GET /friction/changes?since=<ISO8601>. Full OpenAPI spec at /openapi.json, interactive docs at /docs, agent-readable summary at /llms.txt.
  2. MCP — a streamable-HTTP MCP server mounted at /mcp/, exposing list_venues, get_venue, recommend_venue, and get_changes_info as tools. Point any MCP-compatible client at the /mcp/ URL directly.
  3. x402 — /friction/changes (the time-sensitive change feed) is gated by the x402 protocol: unpaid requests get a real 402 with a payment challenge; pay $0.05 USDC on Base mainnet and retry to get the data. This is live, verified end-to-end with real money, not a demo — see api.py for the CDP-facilitator wiring.

Endpoints

EndpointCostWhat it returns
GET /friction/venuesFreeCurrent snapshot of every tracked venue. Optional ?confidence=verified|stale|unconfirmed filter.
GET /friction/venue/{slug}FreeOne venue's current fee/KYC/withdrawal/API-access data, e.g. /friction/venue/kalshi.
GET /friction/changes?since=<ISO8601>$0.05 USDC (x402)Append-only log of every detected change since a timestamp — the time-sensitive product.

Every record carries a confidence field: verified (spot-checked or high-confidence extraction), stale (source was unreachable, showing a cached value), or unconfirmed (LLM extraction was ambiguous). Treat unconfirmed as a lead to verify against the venue directly, not a fact to trade on.

MCP tools

  • list_venues(confidence) — browse/filter the current snapshot.
  • get_venue(slug) — one venue's full data.
  • recommend_venue(query) — free-text "which venue is best for lowest fees on high-frequency trading" / "I don't want to do KYC" / "API access without a wallet" style questions, reasoned over the current dataset. Says so explicitly rather than guessing when a query depends on data this tracker doesn't have (liquidity, volume, spread, uptime).
  • get_changes_info() — describes the paid change feed (URL, price) without reimplementing it for free.

What's here

FileWhat it does
schema.pyThe data model — one VenueFriction record per venue, plus the VenueRecommendation response shape
venues.pyThe 12 tracked venues and their policy-page source URLs
scrapers/base.pyFetches and cleans raw policy-page text (requests + Playwright fallback for JS-rendered pages)
extract.pySends raw page text to Claude, gets back a structured VenueFriction matching the schema
recommend.pyNatural-language venue recommendation — reasons over the current dataset via Claude, structured-output constrained to real venue slugs
reference_check.pyCross-checks scraped fees against a third-party source (TradeBlock), flags divergences for human review
storage.pySQLite: current_state table (latest snapshot) + change_log table (append-only, the paid product)
diff.pyCompares a fresh extraction to the stored one, writes a ChangeEvent for anything that moved
run_pipeline.pyOrchestrates fetch → extract → diff → store, for all 12 venues
api.pyFastAPI server — the HTTP endpoints above, x402 payment gating, MCP mount
mcp_server.pyThe MCP tool definitions, mounted into api.py at /mcp/
test_pipeline_logic.py, test_recommend_logic.pyPure-logic tests, no API key needed

Running it locally

bash
pip install -r requirements.txtpython test_pipeline_logic.py      # no API key needed, proves storage/diff logicpython test_recommend_logic.py     # no API key needed, proves recommendation logicexport ANTHROPIC_API_KEY=sk-ant-...python run_pipeline.py             # real scrape -> extract -> store, all 12 venuesuvicorn api:app --reload           # boots the API on localhost:8000

Then in another terminal:

bash
curl http://localhost:8000/friction/venuescurl http://localhost:8000/friction/venue/kalshicurl "http://localhost:8000/friction/changes?since=2020-01-01T00:00:00Z"

See CLAUDE.md for environment quirks, Claude API usage notes, and the data-quality/confidence model in more depth.

Informational only — not financial or legal advice. Verify directly with the venue before acting on any figure returned here.

Source: README.md at commit 09d0d98

Tools

0
SourceWeft has not read this server's tools yet.

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.