Okx Sentiment Tracker
dex-original/okx-agent-trade-kit
A skill your agent uses when the user asks about: 'any crypto news', 'latest news', 'market update', 'daily briefing', 'BTC news', 'ETH news', 'news on SOL', 'search SEC ETF', 'regulation news'…
Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier.
$ npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install livetennisapi/livetennisapi-mcp polymarket-tennis --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/livetennisapi/livetennisapi-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/polymarket-tennis .claude/skills/polymarket-tennis && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "polymarket-tennis" agent skill from https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennis into .claude/skills/polymarket-tennis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polymarket-tennis", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennisType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install livetennisapi/livetennisapi-mcp polymarket-tennis --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livetennisapi/livetennisapi-mcp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/polymarket-tennis .agents/skills/polymarket-tennis && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "polymarket-tennis" agent skill from https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennis into .agents/skills/polymarket-tennis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polymarket-tennis", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install livetennisapi/livetennisapi-mcp polymarket-tennis --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livetennisapi/livetennisapi-mcp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/polymarket-tennis .cursor/skills/polymarket-tennis && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "polymarket-tennis" agent skill from https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennis into .cursor/skills/polymarket-tennis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polymarket-tennis", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/livetennisapi/livetennisapi-mcp.git --path skills/polymarket-tennis--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install livetennisapi/livetennisapi-mcp polymarket-tennis --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livetennisapi/livetennisapi-mcp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/polymarket-tennis .gemini/skills/polymarket-tennis && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "polymarket-tennis" agent skill from https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennis into .gemini/skills/polymarket-tennis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polymarket-tennis", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install livetennisapi/livetennisapi-mcp polymarket-tennisInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/livetennisapi/livetennisapi-mcp.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/polymarket-tennis .github/skills/polymarket-tennis && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "polymarket-tennis" agent skill from https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennis into .github/skills/polymarket-tennis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polymarket-tennis", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install livetennisapi/livetennisapi-mcp polymarket-tennis --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livetennisapi/livetennisapi-mcp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/polymarket-tennis .opencode/skills/polymarket-tennis && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "polymarket-tennis" agent skill from https://github.com/livetennisapi/livetennisapi-mcp/tree/main/skills/polymarket-tennis into .opencode/skills/polymarket-tennis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polymarket-tennis", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
polymarket-tennisBuild observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier.
Polymarket Tennis is an agent skill from livetennisapi/livetennisapi-mcp. Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier. Use when asked for a Polymarket tennis bot or market watcher, a Kalshi tennis trading bot, tennis prediction-market data, Gamma API tennis markets, matching a market to a live match, break-point or serving state next to market prices, or how a tennis retirement, walkover, or cancelled match settles (venue rule text, never hard-coded). Covers the real package API…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/api.md`, `references/one-prompt-build.md` and `references/settlement-rules.md`). Compatibility notes: Python 3.10+, pip install polymarket-tennis (single runtime dependency httpx). Live match data needs a free Live Tennis API key in LIVETENNISAPIKEY…
It sits in Business, Finance & HR, covering Trading and backtesting, Stock and market analysis and MCP servers. It works with Polymarket, Kalshi, Model Context Protocol and Python. The repository describes itself as: MCP server for the Live Tennis API — give Claude, Cursor and other LLM agents real-time tennis scores, odds and model win-probability. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b52784f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pipruffFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
livetennisapi.comAlso links to:
blog.livetennisapi.comgithub.comdocs.livetennisapi.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
LIVETENNIS_API_KEYLIVETENNISAPI_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Python 3.10+, pip install polymarket-tennis (single runtime dependency httpx). Live match data needs a free Live Tennis API key in LIVETENNIS_API_KEY; Polymarket Gamma and Kalshi market reads are keyless.
From compatibility in the SKILL.md frontmatter.
Polymarket Tennis loads about 3k tokens when it runs, and up to ~8.8k if it reads all its reference files. Until then it costs about 200 tokens; SKILL.md has 1,085 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from livetennisapi/livetennisapi-mcp at commit b52784f, republished under its MIT licence (© livetennisapi). 1,085 words, ~3,032 tokens.
.claude/skills/polymarket-tennis/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Vendor-authored, observe-only. This skill is maintained by the team behind the Live Tennis API. It teaches the
polymarket-tennispackage, which reads public market data and live scores. It contains no order execution, no wallet or private-key handling, no CLOB client, and no strategy advice. Execution is permanently out of scope. Nothing here is financial advice.
description (market.raw["description"]),
Kalshi rules_secondary — and print it. The reference matrix in
references/settlement-rules.md is for the
human, not for code branches.LiveTennisClient call costs one request; Gamma and Kalshi reads cost nothing.
pmtennis watch is 1 request per poll at a 60 s default (minimum 30 s). A
watcher that calls live_matches() + fixtures() per poll costs 2 per poll
and must self-cap (the reference build caps at 96/day, --interval 300).outcome and event_status, not status.
status is only the lifecycle (upcoming|live|completed|cancelled).
outcome is completed|retired|walkover|default|abandoned and null until
settled; event_status is the feed designator (Retired, Walk Over,
Cancelled, Postponed, Interrupted); withdrew names who stopped.match_market returns None on
ambiguity; skip it. Use override_match_id / --match-id only when the user
supplies the id explicitly.httpx.MockTransport; never
put live calls in tests.pip install polymarket-tennis # Python 3.10+, depends only on httpx
pmtennis discover --matches-only --moneyline-only # keyless, Gamma only
export LIVETENNIS_API_KEY=ltapi_... # free, no card: https://livetennisapi.com/subscribe/free
pmtennis match atp-lehecka-fils-2026-08-17 # show the pairing decision + confidence
pmtennis watch atp-lehecka-fils-2026-08-17 # 1 request per poll, 60 s defaultEnv-var names differ between the two Live Tennis API tools: the Python package reads
LIVETENNIS_API_KEY; the livetennisapi-mcp server/plugin reads LIVETENNISAPI_KEY.
Same key value works in both.
Library form — every symbol below is exported from polymarket_tennis.__init__:
from polymarket_tennis import (
GammaClient, LiveTennisClient,
discover_tennis_markets, match_market, build_view,
)
with GammaClient() as gamma, LiveTennisClient() as lta:
markets = discover_tennis_markets(gamma, market_types={"moneyline"},
matches_only=True)
candidates = lta.live_matches() + lta.fixtures() # 2 free-tier requests
for market in markets:
decision = match_market(market, candidates)
if decision is None:
continue # ambiguous or no live counterpart — never guessed
view = build_view(market, decision.match)
print(view.render())Sample view.render() output:
Cincinnati Open: Jiri Lehecka vs Arthur Fils [atp-lehecka-fils-2026-08-17]
market: Jiri Lehecka 0.095 | Arthur Fils 0.905 (as of 12s ago)
live: Jiri Lehecka vs Arthur Fils 4-6 3-4 (15-40) serving: Jiri Lehecka [BREAK POINT] (as of 8s ago)| Symbol | What it does | Network cost |
|---|---|---|
GammaClient() | Polymarket Gamma API (keyless): events(), event_by_slug(), market_by_id(), market_by_slug(), market() | none against your key |
LiveTennisClient(api_key=None) | Live Tennis API; key from LIVETENNIS_API_KEY: matches(), live_matches(), match(id), fixtures(), players(search) | 1 request per call |
discover_tennis_markets(client, market_types=None, include_closed=False, matches_only=False, limit=100) | normalized TennisMarket list from the tennis tag | Gamma only |
find_market(client, id_or_slug) | one TennisMarket by Gamma id, market slug, or event slug | Gamma only |
match_market(market, candidates, override_match_id=None, threshold=0.70, ambiguity_margin=0.10) | MatchDecision or None | pure |
build_view(market, match) | LiveMarketView with both feeds' staleness | pure |
derive_break_point(score), score_line(score) | helpers used by the view | pure |
TennisMarket.price_by_outcome, .slug_date, .raw | prices dict, slug date, the raw Gamma object (settlement text lives in raw["description"]) | — |
Full signatures, dataclass fields, and the live-match JSON shape are in
references/api.md. Read it before writing code that touches
fields not shown above — in particular, TennisMarket has no description
attribute and LiveMarketView does not expose outcome; go through .raw
and .match.
discover_tennis_markets(gamma, market_types={"moneyline"}, matches_only=True).
Futures/outrights are dropped by matches_only; doubles markets are rejected by
the matcher in v0.1.lta.live_matches() (+ lta.fixtures() if
you need pre-start matches). Count the requests; budget them against 100/day.match_market(market, candidates); skip None.
Log decision.confidence and decision.method ("explicit" | "names+date" | "names").build_view(market, decision.match); read view.prices,
view.score_line, view.server (1/2), view.break_point, view.is_tiebreak,
view.event_status, and both view.market_staleness() / view.live_staleness().view.match.get("outcome") and
view.match.get("event_status"); when outcome in ("retired", "walkover", "default", "abandoned") or event_status == "Cancelled", print
view.market.raw.get("description") verbatim (fall back to rules_secondary,
then say the payload carries no rule text). Do not compute a payout.def settlement_text(view) -> str:
raw = view.market.raw
text = raw.get("description") or raw.get("rules_secondary")
return text or "(market payload carries no settlement text; read it on the venue)"The package discovers Polymarket markets (Gamma). Kalshi publishes each market's
rule text in its public read endpoint, keyless; the same outcome/event_status
detection applies. Use the package's LiveTennisClient for the live side and read
Kalshi directly for the market side (see
references/settlement-rules.md for the Kalshi
snippet and the ATP/WTA vs ITF series difference). Do not hard-code the ITF $0.50
rule; print rules_secondary.
When the user wants a watcher "vibe-coded" end to end, use the prompt in
references/one-prompt-build.md. It is the exact
prompt from the package README; what it produced, unedited except for lint, is in
examples/claude-code-watcher/ of the repository (7 offline tests, ruff clean,
--once --fixtures dry run without a key). That README also lists the honest
deviations — read them before re-running the prompt, because two of them are
traps: the prompt's "once a minute" costs 2 requests per poll (so the watcher must
self-cap), and the offline fixtures carry event_status but no outcome key.
The short version, for the human reading this — the code must still print the market's own text:
| Scenario | Polymarket (polymarket.com) | Polymarket US | Kalshi (ATP/WTA) | Kalshi (ITF) |
|---|---|---|---|---|
| Walkover / withdrawal before the match starts | 50-50 | Last fair market price at announcement | Fair price per rules | $0.50 per contract |
| Match cancelled, not played | 50-50 | Last fair market price | Fair price per rules | $0.50 |
| Retirement after play starts (injury, default, DQ) | Advancing player wins | Awarded winner settles $1.00 | Winner resolves Yes ("after a ball has been played") | Winner Yes; withdrawing/forfeiting player No |
| Delayed / postponed | 50-50 if beyond 7 days with no winner | — (see venue FAQ) | Stays open, closes after rescheduled match (within two weeks) | Same as ATP/WTA |
| What counts as "started" | "the match begins" | First serve is struck | A ball has been played | A ball has been played |
Verbatim venue quotes, source URLs, retrieval dates, and the live-data mapping
(outcome/event_status/withdrew to each venue column) are in
references/settlement-rules.md. Rules are per
market and can change; the market's own text always wins over that file.
ruff check clean; tests run with no network (httpx.MockTransport or fixture files).references/api.md.outcome / event_status, never status == "completed" alone.polymarket-tennis)© livetennisapi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in skills/polymarket-tennis of livetennisapi/livetennisapi-mcp.
Open the folder on GitHubat commit b52784f
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders. This page covers the copy in livetennisapi/livetennisapi-mcp, which our catalogue first saw on October 7, 2026.
Polymarket Tennis next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Polymarket Tennis this skilllivetennisapi/livetennisapi-mcp | 152 | — | ~3k | Automated safety check: Pass | MIT | |
| Okx Sentiment Trackerdex-original/okx-agent-trade-kit | 110 | 1 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Tiger Brokers OpenAPI SDKqusong0627/QuantMind | 1.7k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Web3 PolymarketPolymarket/agent-skills | 192 | 1 repos | ~2k | Automated safety check: Pass | None | |
| Dr Manhattanguzus/dr-manhattan | 204 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Tradingview MCPatilaahmettaner/tradingview-mcp | 5k | — | ~1.3k | Automated safety check: Pass | MIT |
dex-original/okx-agent-trade-kit
A skill your agent uses when the user asks about: 'any crypto news', 'latest news', 'market update', 'daily briefing', 'BTC news', 'ETH news', 'news on SOL', 'search SEC ETF', 'regulation news'…
qusong0627/QuantMind
Covers the Tiger Brokers OpenAPI Python SDK for market data, stock, futures and options trading, push subscriptions, a CLI and an MCP server, defaulting to paper trading.
Polymarket/agent-skills
Polymarket integration for prediction market trading on Polygon.
guzus/dr-manhattan
Trade prediction markets (Polymarket, Kalshi, Opinion, Limitless, Predict.fun) using a unified CCXT-style API.
atilaahmettaner/tradingview-mcp
AI Trading Intelligence — live prices, 30+ technical indicators, backtesting (6 strategies), walk-forward overfitting detection, trade logs, equity curves, licensed news sentiment (Marketaux), and…
komako-workshop/digital-oracle
Answer prediction questions using market trading data, not opinions.
Categories
Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier. Polymarket Tennis is an agent skill from livetennisapi/livetennisapi-mcp. Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier.
Polymarket Tennis fits situations like: asked for a Polymarket tennis bot; A Kalshi tennis trading bot; tennis prediction-market data; gamma API tennis markets.
Run `npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a claude-code`. Or copy the skill folder (skills/polymarket-tennis in livetennisapi/livetennisapi-mcp) into .claude/skills/polymarket-tennis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a codex`. Or copy the skill folder (skills/polymarket-tennis in livetennisapi/livetennisapi-mcp) into .agents/skills/polymarket-tennis in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add livetennisapi/livetennisapi-mcp --skill polymarket-tennis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/polymarket-tennis, .gemini/skills/polymarket-tennis, .github/skills/polymarket-tennis and .opencode/skills/polymarket-tennis in your project.
Going by SKILL.md and its folder, Polymarket Tennis needs the command-line tools its instructions call (pip and ruff) and credentials named LIVETENNIS_API_KEY and LIVETENNISAPI_KEY. Our summary lists: Python 3; A credential in LIVETENNIS_API_KEY; A credential in LIVETENNISAPI_KEY. Compatibility (from SKILL.md): Python 3.10+, pip install polymarket-tennis (single runtime dependency httpx). Live match data needs a free Live Tennis API key in LIVETENNIS_API_KEY; Polymarket Gamma and Kalshi market reads are keyless..
SKILL.md names 4 domains. In commands or code: livetennisapi.com; the agent is likely to contact it when it follows the instructions. As links in the text: blog.livetennisapi.com, github.com and docs.livetennisapi.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Polymarket Tennis is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Polymarket Tennis: Okx Sentiment Tracker (dex-original/okx-agent-trade-kit, 110 stars), Tiger Brokers OpenAPI SDK (qusong0627/QuantMind, 1.7k stars), Web3 Polymarket (Polymarket/agent-skills, 192 stars) and Dr Manhattan (guzus/dr-manhattan, 204 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
livetennisapi (a GitHub organization) maintains it in livetennisapi/livetennisapi-mcp, which has 152 GitHub stars. The repository was last updated on October 7, 2026.
Source: livetennisapi/livetennisapi-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.