PMWallets

io.github.polymarketwalletsPublished by GitHub account polymarketwalletsv0.6.6Updated Oct 25, 2026

Polymarket smart-money data: rank traders by on-chain PnL, follow them, read their fills.

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

PMWallets gives an assistant Polymarket smart-money data: a leaderboard of profitable traders ranked by on-chain PnL, their fills, and trade-history exports.

What you can do
Query the Polymarket smart-money leaderboard and filter traders by win rate, style, category, status or price band, and read individual trader records and unlocked addresses via the API client and command line tools exposed as MCP tools (leaderboard, subscribe, new-fills, watch, mcp). Follow wallets and receive their fills as a live, ordered, exactly-once stream with gap replay, or poll fills since the last call. Verify webhook deliveries with an HMAC-SHA256 signature check. Purchase and download per-wallet, per-day trade-history CSV exports, and check plan, balance and subscription status.
When to use it
Use it when an assistant needs to research which Polymarket traders are profitable, follow specific wallets, or react to their fills in near real time, for example to draft copy-trading or alerting workflows. It is not a general market-data or order-execution server; trading is a separate package.
Requirements
A PMWallets account and API key (PMW_API_KEY, pmw_ prefix) created on the provider's keys page. Runs as a remote endpoint or locally via npx pmwallets mcp (Node.js 20 or newer) or the Python package, with the key passed as an environment variable. Network access to the provider's API; HTTPS_PROXY is supported.
Before you install
The API key is a secret and grants access to the account's subscriptions and balance. Following wallets is billed per entity per hour, and trade-history exports are paid purchases; a 402 means the balance is too low. Only one stream per account is allowed, and takeover: true forcibly disconnects the current holder. The watch --exec mode hands each batch to a command at most once, so a failed batch is never re-run. The provider's servers are in the United Kingdom, and Polymarket does not accept,

Installation

In SourceWeft

  1. Open PMWallets in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. 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.polymarketwallets%2Fpmwallets/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. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "pmwallets": {
      "type": "http",
      "url": "https://api.pmwallets.com/mcp"
    }
  }
}

README

pmwallets — Node.js SDK for PMWallets

[npm] [License: MIT] [Discord]

Official Node.js / TypeScript client for PMWallets: the Polymarket smart-money leaderboard computed from the Polygon chain, and the real-time fills of the Polymarket wallets you follow — delivered in order, exactly once, with every gap replayed.

中文说明 · Python SDK: pmwallets-python · Ready-to-run copy-trading bot built on it: polymarket-copy-trading-bot

Install

bash
npm install pmwallets     # Node.js ≥ 20

Create an API key on pmwallets.com/keys.

Usage

ts
import { PmwClient, FillStream, FileStateStore, verifyWebhook } from 'pmwallets';
const pmw = new PmwClient({ apiKey: process.env.PMW_API_KEY! });
// who is making money on Polymarket, and howconst board = await pmw.leaderboard({ minWinLo: 0.55, minEligible: 30, style: 'taker', status: 'active', limit: 50 });// only wallets whose address unlocks for free or for the $1 band (0 = free … 5; the ladder is board.pricing.bands)const cheap = await pmw.leaderboard({ bands: [0, 1], minWinLo: 0.55 });
// follow one (billed per entity per hour; 402 = balance too low, 409 = dormant)await pmw.subscribe({ entityId: board.rows[0].entityId, channels: ['ws'] });
// every fill of every entity you followconst stream = new FillStream({  client: pmw,  store: new FileStateStore('./stream.json'),    // a restart resumes exactly where it stopped  onFill: async (fill, { source }) => console.log(source, fill.side, fill.price, fill.tokenId),  onEvent: (e) => e.type === 'fatal' && console.error(e.error.message),   // e.g. another bot already holds the stream  // takeover: true,   // replace whichever API client holds this account's stream (it stops with `replaced`)});await stream.start();

What is in it

PmwClientleaderboard, entities, address unlocks (balance or plan), your unlocked addresses (myAddresses), plan and balance, subscriptions, webhook status and deliveries, fills replay (fills, fillsSince), trade-history exports
FillStreamWebSocket with reconnect and keep-alive; detects missed frames by session/seq and replays them from the last fill delivered; de-duplicates by eventId; anchors behind the chain head on first start; persisted cursor
verifyWebhook(rawBody, signature, secret)checks x-pmw-signature (HMAC-SHA256 of the raw body)

One stream per account:

  • An API-key connection takes priority over the pmwallets.com feed page (the page never takes the stream from it).
  • Between two API connections the first one keeps the stream. A second one — another key of the same account, or the same bot started twice — is refused: blocked, then fatal, and the stream stops. Pass takeover: true to replace the holder instead; the holder gets replaced, then fatal, and stops (it does not fight back).
  • A FillStream identifies itself with a random clientId, so its own reconnects after a network drop replace its own dead connection without needing takeover.
  • When the server restarts it closes the socket with 1012; the stream reconnects at once (event restarting) and replays anything it missed. HTTPS_PROXY: pass wsOptions: { agent } for the WebSocket and set a global fetch dispatcher.

PMWallets' servers are in the United Kingdom. A consumer that also trades on Polymarket should run from Ireland (AWS eu-west-1): Polymarket does not accept API orders from the UK, the US and several EU countries.

AI agents: command line and MCP

The package installs a pmwallets command that prints JSON — for scripts, and for AI agents (Claude Code, Codex, Gemini CLI, Cursor, WorkBuddy, …) that act on the fills of the traders you follow.

bash
export PMW_API_KEY=pmw_…npx pmwallets leaderboard --minWinLo 0.55 --category politics --limit 20npx pmwallets subscribe <handle>          # billed per hournpx pmwallets new-fills                   # fills since the previous call, each once (poll it)npx pmwallets watch                       # live: one JSON line per fill, with its market and decimal amountsnpx pmwallets watch --batch-sec 30 --exec 'claude -p "Fills from traders I follow are on stdin. …"'npx pmwallets mcp                         # the same as MCP toolsnpx pmwallets skill                       # the guide to give your agent (SKILL.md)
  • watch --exec runs the command once per batch, the fills on its stdin as JSON lines (and in $PMW_BATCH_FILE); fills that arrive while it runs make the next batch. A batch is handed over at most once: one whose command fails, times out or is interrupted is kept in pmw-watch/failed/ and never re-run — the agent may already have placed an order. Restarts resume from where the stream stopped.
  • To trade, give the agent pmwallets-copytrade: order buy <tokenId> --usdc 5 --key <eventId> (the same key never orders twice), market, balance, positions.
  • Platforms without a shell (Dify, Coze, n8n, GPT Actions): import openapi.json.
  • HTTPS_PROXY / NO_PROXY are honoured by the command line.

MCP config (Claude Desktop, Cursor, Windsurf, WorkBuddy, …):

json
{  "mcpServers": {    "pmwallets": {      "command": "npx",      "args": ["-y", "pmwallets", "mcp"],      "env": { "PMW_API_KEY": "pmw_..." }    }  }}

Trade-history exports

A purchase is access to files: one zstd-compressed CSV per wallet per UTC day, downloadable at once and again later.

ts
const order = await client.createExport({ entityIds: ['0x…'], from: '2026-09-01', to: '2026-09-30' });const { files } = await client.exportFiles(String(order.id));for (const f of files) {  const bytes = await client.downloadExportFile(f.wallet, f.day); // .csv.zst}

exportFileUrl(wallet, day) returns the short-lived link instead; the API key is never sent to the storage host.

Resources

Guides

License

MIT

Source: README.md at commit 993f9d8

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

2
  1. v0.6.6LatestOct 15, 2026
  2. v0.6.5Oct 14, 2026

Score

85% 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 listed15 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