mcpbeat Sign in

Web3 Polymarket Agent Skill

Polymarket integration for prediction market trading on Polygon. Covers authentication (L1 EIP-712, L2 HMAC-SHA256, builder headers), order placement (GTC/GTD/FOK/FAK, batch, post-only, heartbeat), market data (Gamma API, Data API, orderbook, subgraph), WebSocket streaming (market/user/sports channels), CTF operations (split, merge, redeem, negative risk), bridge (deposits, withdrawals, multi-chain), and gasless relayer transactions. Use when building AI agents, autonomous market makers, prediction market UIs, or any application integrating with Polymarket on Polygon.

15k tokens
context cost
the whole folder, loaded on every use
9
files
instructions only
0
copies elsewhere
how many repositories repackaged it
179
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/Polymarket/agent-skills --skill web3-polymarket

The instruction itself

17 sections, as written by the author

Polymarket Skill

When to use this skill

Use this skill when the user asks about or needs to build:

  • Polymarket API authentication (L1/L2, API keys, HMAC signing)
  • Placing or managing orders (limit, market, GTC, GTD, FOK, FAK, batch, cancel)
  • Reading orderbook data (prices, spreads, midpoints, depth)
  • Market data fetching (events, markets, by slug, by tag, pagination)
  • WebSocket subscriptions (market channel, user channel, sports)
  • CTF operations (split, merge, redeem positions)
  • Negative risk markets (multi-outcome, conversion, augmented neg risk)
  • Bridge operations (deposits, withdrawals, multi-chain)
  • Gasless transactions (relayer client, order attribution)
  • Builder program integration (order attribution, API keys, tiers)
  • Polymarket SDK usage (TypeScript @polymarket/clob-client, Python py-clob-client)

API Configuration

| API | Base URL | Auth | Purpose |

|-----|----------|------|---------|

| CLOB | https://clob.polymarket.com | L2 for trade endpoints | Orderbook, prices, order submission |

| Gamma / Data | https://gamma-api.polymarket.com | None | Events, markets, search |

| Data API | https://data-api.polymarket.com | None | Trades, positions, user data |

| WebSocket (Market) | wss://ws-subscriptions-clob.polymarket.com/ws/market | None | Real-time orderbook |

| WebSocket (User) | wss://ws-subscriptions-clob.polymarket.com/ws/user | API creds in message | Trade/order updates |

| WebSocket (Sports) | wss://sports-api.polymarket.com/ws | None | Live scores |

| Relayer | https://relayer-v2.polymarket.com/ | Builder headers | Gasless transactions |

| Bridge | https://bridge.polymarket.com | None | Deposits/withdrawals |

Contract Addresses (Polygon)

| Contract | Address |

|----------|---------|

| USDC (USDC.e) | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 |

| CTF (Conditional Tokens) | 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 |

| CTF Exchange | 0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E |

| Neg Risk CTF Exchange | 0xC5d563A36AE78145C45a50134d48A1215220f80a |

| Neg Risk Adapter | 0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296 |

Client Setup

TypeScript

import { ClobClient, Side, OrderType } from "@polymarket/clob-client";
import { Wallet } from "ethers"; // v5.8.0

const HOST = "https://clob.polymarket.com";
const CHAIN_ID = 137;
const signer = new Wallet(process.env.PRIVATE_KEY);

// Step 1: L1 — derive API credentials
const tempClient = new ClobClient(HOST, CHAIN_ID, signer);
const apiCreds = await tempClient.createOrDeriveApiKey();

// Step 2: L2 — init trading client
const client = new ClobClient(
  HOST,
  CHAIN_ID,
  signer,
  apiCreds,
  2,                // signatureType: 0=EOA, 1=POLY_PROXY, 2=GNOSIS_SAFE
  "FUNDER_ADDRESS"  // proxy wallet address from polymarket.com/settings
);

Python

from py_clob_client.client import ClobClient
import os

host = "https://clob.polymarket.com"
chain_id = 137
pk = os.getenv("PRIVATE_KEY")

# Step 1: L1 — derive API credentials
temp_client = ClobClient(host, key=pk, chain_id=chain_id)
api_creds = temp_client.create_or_derive_api_creds()

# Step 2: L2 — init trading client
client = ClobClient(
    host,
    key=pk,
    chain_id=chain_id,
    creds=api_creds,
    signature_type=2,  # 0=EOA, 1=POLY_PROXY, 2=GNOSIS_SAFE
    funder="FUNDER_ADDRESS",
)

Quick Reference: Order Types

| Type | Behavior | Use Case |

|------|----------|----------|

| GTC | Rests on book until filled or cancelled | Default limit orders |

| GTD | Active until expiration (UTC seconds). Min = now + 60 + N | Auto-expire before events |

| FOK | Fill entirely immediately or cancel | All-or-nothing market orders |

| FAK | Fill what's available, cancel rest | Partial-fill market orders |

  • FOK/FAK BUY: amount = dollar amount to spend
  • FOK/FAK SELL: amount = number of shares to sell
  • Post-only: GTC/GTD only — rejected if would cross spread

Quick Reference: Signature Types

| Type | Value | Description |

|------|-------|-------------|

| EOA | 0 | Standard Ethereum wallet (MetaMask). Funder is the EOA address and will need POL for gas. |

| POLY_PROXY | 1 | Custom proxy wallet for Magic Link email/Google users who exported PK from Polymarket.com. |

| GNOSIS_SAFE | 2 | Gnosis Safe multisig proxy wallet (most common). Use for any new or returning user. |

Core Pattern: Place an Order

TypeScript

const response = await client.createAndPostOrder(
  {
    tokenID: "TOKEN_ID",
    price: 0.50,
    size: 10,
    side: Side.BUY,
  },
  {
    tickSize: "0.01",  // from client.getTickSize(tokenID) or market object
    negRisk: false,    // from client.getNegRisk(tokenID) or market object
  },
  OrderType.GTC
);
console.log(response.orderID, response.status);

Python

from py_clob_client.clob_types import OrderArgs, OrderType
from py_clob_client.order_builder.constants import BUY

response = client.create_and_post_order(
    OrderArgs(token_id="TOKEN_ID", price=0.50, size=10, side=BUY),
    options={"tick_size": "0.01", "neg_risk": False},
    order_type=OrderType.GTC,
)
print(response["orderID"], response["status"])

Core Pattern: Read Orderbook

TypeScript

// No auth needed
const readClient = new ClobClient("https://clob.polymarket.com", 137);
const book = await readClient.getOrderBook("TOKEN_ID");
console.log("Best bid:", book.bids[0], "Best ask:", book.asks[0]);

const mid = await readClient.getMidpoint("TOKEN_ID");
const spread = await readClient.getSpread("TOKEN_ID");

Python

read_client = ClobClient("https://clob.polymarket.com", chain_id=137)
book = read_client.get_order_book("TOKEN_ID")
mid = read_client.get_midpoint("TOKEN_ID")
spread = read_client.get_spread("TOKEN_ID")

Core Pattern: WebSocket Subscribe

const ws = new WebSocket("wss://ws-subscriptions-clob.polymarket.com/ws/market");

ws.onopen = () => {
  ws.send(JSON.stringify({
    type: "market",
    assets_ids: ["TOKEN_ID"],
    custom_feature_enabled: true,
  }));
  // Send PING every 10s to keep alive
  setInterval(() => ws.send("PING"), 10_000);
};

ws.onmessage = (event) => {
  if (event.data === "PONG") return;
  const msg = JSON.parse(event.data);
  // msg.event_type: "book" | "price_change" | "last_trade_price" | "tick_size_change" | "best_bid_ask" | "new_market" | "market_resolved"
};

Reference files (load on demand)

Only read these when the task requires deeper detail on a specific topic:

  • Authentication (L1/L2, builder headers, credential lifecycle): authentication.md
  • Order patterns (GTC/GTD/FOK/FAK, tick sizes, cancel, heartbeat, errors): order-patterns.md
  • Market data (Gamma API, Data API, CLOB orderbook, subgraph): market-data.md
  • WebSocket (market/user/sports channels, subscribe, heartbeat): websocket.md
  • CTF operations (split, merge, redeem, neg risk, token IDs): ctf-operations.md
  • Bridge (deposits, withdrawals, supported chains/tokens, status): bridge.md
  • Gasless transactions (relayer client, wallet deployment, builder setup): gasless.md

Other skills for the same job

different authors, same section of the catalogue
Solidity Security
by ComeOnOliver
×2

Master smart contract security best practices to prevent common vulnerabilities and implement secure Solidity patterns. Use when writing smart contracts, auditing existing contracts, or implementing security measures for blockchain applications.

6k tokens
Solidity Security
by ComeOnOliver
×2

Master smart contract security best practices to prevent common vulnerabilities and implement secure Solidity patterns. Use when writing smart contracts, auditing existing contracts, or implementing security measures for blockchain applications.

8k tokens
Cross Border Ecommerce
by nexscope-ai
×1

Cross-border e-commerce expansion advisor. Scores target markets on 8 weighted dimensions (market size, ecommerce penetration, competition, regulatory complexity, logistics infrastructure, payment ecosystem, cultural distance, IP protection), compares 5 fulfillment models with cost and transit data, provides country-by-country tax/duty compliance guides (EU VAT/IOSS, UK VAT, US sales tax, CA GST, AU GST, JP consumption tax), maps local payment preferences by market, and builds a phased expansion roadmap. No API key required.

9k tokens
Kanchi Dividend Review Monitor
by BaggaT236
×1

Monitor dividend portfolios with Kanchi-style forced-review triggers (T1-T5) and convert anomalies into OK/WARN/REVIEW states without auto-selling. Use when users ask for 減配検知, 8-Kガバナンス監視, 配当安全性モニタリング, REVIEWキュー自動化, or periodic dividend risk checks.

9k tokens scripts
Cosmos Vulnerability Scanner
by trailofbits

Scans Cosmos SDK blockchain modules and CosmWasm contracts for consensus-critical vulnerabilities — chain halts, fund loss, state divergence. 25 core + 16 IBC + 10 EVM + 3 CosmWasm patterns. Use when auditing custom x/ modules, reviewing IBC integrations, or assessing pre-launch chain security. Updated for SDK v0.53.x.

39k tokens
Configure Auth
by dotnet

> Add authentication and authorization to a Blazor Web App, accounting for the app's render mode. USE WHEN the user needs [Authorize] on pages, AuthorizeView, role or policy-based access, login/logout Identity pages, or AuthenticationStateProvider. Also USE WHEN auth state is null after WebAssembly loads, SignInManager throws in an interactive component, <NotAuthorized> content never renders in static SSR, or HttpContext.User is null in an interactive component. DO NOT USE for general component authoring (see author-component), for prerendering concerns unrelated to auth (see support-prerendering), or for managing non-auth cascading state (see coordinate-components).

2k tokens
Hunt Websocket
by elementalsouls

Hunt WebSocket vulnerabilities — Cross-Site WebSocket Hijacking (CSWSH), missing/weak Origin validation on the WS handshake, no per-message authentication, message tampering, socket.io namespace/room authorization bypass, and handshake-layer Upgrade smuggling. Use when target has WebSocket endpoints (ws:// or wss://), socket.io / SignalR / Phoenix Channels, real-time features, chat, live dashboards, notifications, or trading platforms.

4k tokens
Web3 Audit
by elementalsouls

Smart contract security audit — 10 DeFi bug classes (accounting desync, access control, incomplete path, off-by-one, oracle, ERC4626, reentrancy, flash loan, signature replay, proxy), pre-dive kill signals (TVL < $500K etc), Foundry PoC template, grep patterns for each class, and real Immunefi paid examples. Use for any Solidity/Rust contract audit or when deciding whether a DeFi target is worth hunting.

6k tokens

How to use it

Copy the folder

Take polymarket/web3-polymarket from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.