mcpField
P
Polymarket Intel

Polymarket Intel

远程服务
github.com金融数据023 周前更新

关于 Polymarket Intel

Polymarket Intel 提供 MCP 服务和 REST API,用于将 Polymarket 钱包分类为真人或机器人、评估交易优势并获取未平仓头寸。它面向筛选跟单或信号跟随对象的 Agent 和服务,并可通过快照查询历史评分。

主要功能

  1. 01将钱包分类为真人或机器人
  2. 02评估 0 到 10 的交易优势分数
  3. 03获取实时未平仓头寸
  4. 04查询评分和头寸历史
  5. 05访问排行榜数据

适用场景

  1. 01跟随交易前筛选钱包
  2. 02查看当前头寸以监控信号
  3. 03比较钱包交易优势分数的变化

MCP 相关

MCP 服务提供钱包或用户评分、Polymarket 排行榜查询和未平仓头寸获取工具。兼容客户端也可连接托管的 MCP 端点。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://polymarket-intel-production.up.railway.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://polymarket-intel-production.up.railway.app/mcp需要授权
安装包
pypipolymarket-intel-mcp1.0.0

工具

详细介绍

Polymarket 钱包智能分析

一个 MCP 服务和 REST API,可将 Polymarket 钱包分类为人类或机器人,为其交易优势打 0–10 分,并实时推送当前未平仓头寸。 专为采用跟单交易和信号跟随技术栈的 AI Agent 打造。

# Use it from any MCP client (Claude Desktop, Cursor, etc.)
pip install polymarket-intel-mcp
polymarket-intel-mcp

# Or call the hosted REST API directly
curl https://polymarket-intel-production.up.railway.app/wallet/0xf1528f12e645462c344799b62b1b421a6a4c64aa

与其他 Polymarket MCP 服务的配合方式

状态

最新版本: v1.2(2026 年 5 月)——改进了分类器,能够区分活跃的人类交易者与高频交易机器人。有关后续计划,请查看发布说明和 v1.3 待办事项。

每日快照任务于 08:00 UTC 运行,为排行榜前 50 名钱包重新评分,并构建分类稳定性的历史数据集。

有多个 MCP 服务支持 Polymarket,覆盖不同层面:

服务功能适用场景
polymarket-intel(本服务)钱包智能分析——区分人类与机器人,为交易优势打分,读取未平仓头寸决定要跟随谁的信号
graph-polymarket-mcp通过 The Graph 子图提供市场数据(20 个工具、8 个子图)读取原始链上市场数据
whitmorelabs/polymarket-mcp滑点、流动性、套利、价格数据为自己的交易定价
joinQuantish/polymarket可自托管的交易 Agent运行自主机器人

这些服务相辅相成。跟单交易 Agent 可以使用 polymarket-intel 筛选值得跟随的钱包,然后通过 graph-polymarket-mcp 读取这些钱包投注的市场,再使用 whitmorelabs/polymarket-mcp 为自己的入场头寸定量。

它能回答哪些问题

  • “这位交易者是人类还是机器人?” — score_polymarket_wallet(wallet_address) → 返回 classification ∈ {human, bot, insufficient_data},以及置信度评分和原因代码。
  • “他们真的有优势吗?” — edge_score 为 0–10 分,并以已实现净 PnL 为门槛,避免将分散但亏损的钱包误判为有优势。
  • “他们现在在押注什么?” — get_open_positions(wallet_address) 返回按规模排序的实时头寸,每 30 秒刷新一次。
  • “他们的优势随时间发生了怎样的变化?” — /wallet/{address}/history 返回每日快照中的评分时间序列。

为什么需要这个服务

Polymarket 排行榜容易误导人。它包含按当前价格计算的未实现 PnL,因此榜首主要是运行结构性套利的机器人,以及少数持有巨额未平仓头寸的钱包,而这些头寸可能永远不会朝有利方向结算。盲目跟随排行榜交易的 Agent 往往会蒙受损失。

本服务会对排行榜上的每个钱包进行行为特征分析(专注度、持仓时长、交易时机规律性、类别集中度),并根据原始活动重建 PnL,只展示那些看起来是真正具备优势的人类交易者。

数据集会随着时间推移越来越有价值——每日快照任务运行时,历史信号都会不断累积。连续 90 天优势评分都高于 7 的钱包,比任何单个时间点的评分都更能说明问题。

同时以 REST API 和 MCP 服务形式提供

接入方式使用场景设置方式
MCP 服务需要以工具方式访问的 Agentpip install polymarket-intel-mcp
REST API自定义 HTTP 集成、仪表板curl https://polymarket-intel-production.up.railway.app/...
托管式 MCP在任意兼容 MCP 的客户端上运行的 Agent将 https://polymarket-intel-production.up.railway.app/mcp 添加到客户端配置

架构

┌──────────────────────────────────────────────┐
│  core/                                       │
│    client.py    — Polymarket data API client │
│    signals.py   — pure signal calculators    │
│    scorer.py    — classifier + edge score    │
│    models.py    — Pydantic response schemas  │
├──────────────────────────────────────────────┤
│  db/                                         │
│    schema.sql   — Postgres tables + indexes  │
│    repository.py — Repository protocol +     │
│                    InMemoryRepository        │
│    supabase_repo.py — Supabase impl          │
│    converters.py — ScoreResult ↔ records     │
├──────────────────────────────────────────────┤
│  api/main.py    — FastAPI HTTP server        │
│  mcp_server/    — MCP server (stdio)         │
│  scripts/                                    │
│    analyze_wallet.py — CLI                   │
│    snapshot_job.py   — daily cron entry      │
│  tests/                                      │
└──────────────────────────────────────────────┘

Core 完全不知道持久化的存在。API 和快照任务依赖 Repository 协议——生产环境使用 Supabase,测试环境和未设置环境变量时使用内存存储。正因如此,测试套件无需数据库即可运行;以后只需添加一个文件,就能将 Supabase 换成 Neon、RDS 或其他任何方案。

快速入门

git clone <repo> && cd polymarket-intel
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt
pytest                             # 19 tests, all green
CLI
python scripts/analyze_wallet.py phonesculptor
python scripts/analyze_wallet.py 0xf1528f12e645462c344799b62b1b421a6a4c64aa --json
REST API
uvicorn api.main:app --reload --port 8000
open http://localhost:8000/docs

API 分为慢速层(积极缓存、成本低,非常适合一次性发现)和快速层(缓存时间短,非常适合实时跟单 Agent)。之所以这样划分,是因为底层数据对新鲜度的需求不同——钱包的分类不会每分钟都变,但其未平仓头寸会变。

层级方法路径TTL说明
慢速GET/wallet/{address}1h评分数据——分类、edge_score、信号。不含头寸。写入历史记录(防抖)。
快速GET/wallet/{address}/positions30s仅未平仓头寸。每次调用都不会写入数据库。
—GET/wallet/{address}/historyDB评分时间序列
—GET/wallet/{address}/positions/historyDB头寸随时间的变化
—GET/wallet/by-username/{username}1h便捷查询
—GET/leaderboard?limit=5030mPolymarket 原始顶级交易者
—GET/leaderboard/verified?min_edge=51h筛选出经过评分的人类交易者
—GET/leaderboard/historical?date=…DB任意过去日期的排行榜
—GET/snapshots/latestDBcron 上次运行的时间?

为什么头寸数据的缓存时间是 30s,而不是更短? Polygon 的出块时间约为 2s,Polymarket 的活动索引会滞后几秒。轮询间隔低于 10s 不会让数据更新,只会导致触发速率限制。30s 是成本、新鲜度和上游服务友好度之间的最佳平衡点。

为什么要对数据库写入进行防抖? 交易 Agent 每小时可能会调用 /wallet/{address} 数千次。每次调用都写入一行,会让历史记录堆满几乎重复的快照。评分端点对每个钱包每小时最多持久化一次。每日快照任务则确保无论 API 流量如何,排名前 50 的钱包都会被覆盖。

MCP 服务(Claude Desktop、Cursor、Continue)
python mcp_server/server.py

然后,将 mcp_server/claude_desktop_config.example.json 放入 Claude Desktop 配置中,并编辑绝对路径。

该服务提供四个工具:

  • score_polymarket_wallet(wallet_address) — 完整评分
  • score_polymarket_user(username) — 按显示名称查询
  • get_polymarket_leaderboard(limit) — 原始排行榜
  • get_open_positions(wallet_address) — 实时投注的快速快照

评分方法

机器人触发条件(任一条件满足 → 判定为机器人)
信号阈值来源
专注度比率> 12Hubble Research,经实证验证
持仓中位时间< 60sHFT / MEV 模式
时序 CV< 0.3(n≥100)定时交易

软信号会叠加:加密市场做市商模式、每天 > 200 笔交易等。

人类交易者的 Edge 评分(0–10)
Hard gate: net realised PnL ≤ 0  →  capped at 2.0
Hard gate: < 10 winning markets  →  capped at 3.0

35%  PnL magnitude (log-scaled)
25%  win rate (capped at 70%)
15%  PnL distribution (penalises top-1 concentration)
15%  sample size (winning markets, capped at 50)
10%  win/loss ratio (capped at 3x)

净 PnL 是硬性门槛,因此像 neutralwave23 这样用许多分散的小额盈利掩盖 375k 美元亏损的钱包,会被正确标记为表现不佳。

盈亏重建
money_in   = sum(BUY usdcSize per conditionId)
money_out  = sum(SELL usdcSize) + sum(REDEEM usdcSize)
pnl        = money_out - money_in

status:
  REDEEM exists                                    → won
  SELL exists, no REDEEM                           → exited
  no SELL, no REDEEM, last trade > 7 days old      → lost
  no SELL, no REDEEM, last trade within 7 days     → open

为什么要用活动记录而不是持仓端点:赎回后,持仓会从 API 中消失,因此使用 /positions 进行的任何简单分析都会低估盈利。始终通过 /activity?type=TRADE + /activity?type=REDEEM 重建(需要分别调用——用逗号连接类型会返回 400)。

持久化(Supabase)

历史数据集是我们的护城河。每天,快照任务都会获取排行榜、为排名前 N 的钱包评分,并持久化三项内容:分数本身(wallet_scores)、该时刻钱包的未平仓持仓(open_position_snapshots),以及当时的排行榜(leaderboard_snapshots)。90 天后,你就能回答其他人无法回答的问题:“过去一个季度,哪些钱包一直高于 edge 7?”“哪些钱包刚进入前 50 名?”“列出所有在市场结算前三天持有 YES 的钱包。”

设置
# 1. Create a Supabase project, get the URL and service_role key
cp .env.example .env  # fill in SUPABASE_URL and SUPABASE_KEY

# 2. Apply the schema (Supabase dashboard → SQL editor → paste db/schema.sql → run)
#    Or via psql:
#    psql "$DATABASE_URL" -f db/schema.sql

# 3. Run the snapshot job once to verify it writes:
python scripts/snapshot_job.py --top 10

如果未设置 SUPABASE_URL 和 SUPABASE_KEY,API 和快照任务都会回退到内存仓库——测试套件仍会通过,API 仍会提供实时评分,但在接入 Supabase 之前,历史端点将返回空结果。

每日快照任务

每天安排运行 python scripts/snapshot_job.py --top 50(可使用 Railway cron、GitHub Actions,或由 Supabase pg_cron 触发边缘函数——由你决定)。该任务具有幂等性:运行两次会创建两个快照,这没有问题——历史查询会选取最接近的快照。

python scripts/snapshot_job.py --top 50              # production
python scripts/snapshot_job.py --top 5  --dry-run    # local testing, no writes

每次运行都会在 snapshot_runs 中记录一行审计信息,包括开始和结束时间、已评分的钱包数以及错误数。

架构概览
表用途
wallets每个曾出现过的钱包对应一行
wallet_scores仅追加的评分时间序列
open_position_snapshots每个时间点各钱包持有的内容
leaderboard_snapshots每日保存的完整排行榜
snapshot_runscron 任务的审计记录

两个视图(latest_wallet_scores、latest_leaderboard)让常见的“当前情况如何”查询更加高效。

仓库模式

db/repository.py 定义了一个 Repository 协议。该协议有两种实现:

  • InMemoryRepository——线程安全,但重启后数据会丢失。用于测试,并作为开发模式下的回退方案。
  • SupabaseRepository——用于生产环境。封装 supabase-py 客户端。

API 和快照任务只依赖该协议。若要将 Supabase 换成 Neon 或可自托管的 Postgres,只需编写一个实现相同六个方法签名的新类。

定价维度

端点拆分经过设计,可让每个层级与一种计费模式清晰对应。建议价格范围:

层级端点建议价格原因
发现/wallet/{address}, /leaderboard/*$0.001–$0.01 / 次调用缓存更新较慢,主要读取数据库
监控/wallet/{address}/positions$0.01–$0.05 / 次调用数据新鲜,每次都会请求 Polymarket
流式(v2)持仓变更的 SSE 信息流$20–$100 / 月固定费用由我们一侧持续获取
历史/wallet/{address}/history 等$0.005 / 次调用纯数据库读取,价值随时间增长

流式端点是严肃的跟单机器人真正愿意付费使用的功能,但它需要我们一侧运行持续获取数据的工作进程——先留到 v2,等我们确认按次调用的业务模式可行后再实现。

部署

Railway

推送代码仓库并指定它即可。其余工作由 railway.toml 处理。

Render / Heroku 风格

已配置好 Procfile。

缓存

api/cache.py 是一个线程安全的内存 TTL 缓存,接口与 Redis 客户端相同。对于多工作进程的生产环境,只需在一个文件中将单例替换为 redis.Redis()。TTL:

  • 钱包评分:1h
  • 仅开放持仓:5m
  • 排行榜:30m
  • 已验证排行榜:1h

测试

pytest -v

tests/fixtures.py 中的合成测试数据模拟了研究阶段发现的三种真实钱包模式(MLB 人类用户 phonesculptor、HFT 机器人 gabigol、情绪失控的亏损者 neutralwave23),以及一位数据量较少的新手。测试仅使用测试数据,不会调用实时 API,因此测试套件具有确定性且适用于 CI。

发布路线图

  1. 现在 — 在 Railway 上提供 REST API,使用 Supabase 持久化每日快照
  2. 接下来 — 发布到 MCP Hub、Replit Agent Market、awesome-mcp-servers
  3. 之后 — 按次调用的 x402 小额支付(USDC)、历史查询端点(护城河:每运行一天,数据集就会增长)

已验证的钱包示例

这些是测试数据所针对的角色。随着活动变化,实时数据会有所不同:

钱包评分说明
phonesculptor~9/10专注 MLB 的人类用户,盈利分散,确有优势
gabigol机器人加密货币 5 分钟 Up/Down 套利(2026 年 2 月后优势基本消失)
neutralwave23~1/10分散的小额盈利掩盖了较大的净亏损

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。