io.github.Propertyscout001/puntersedge
PYPI · PUNTERSEDGE-MCP · 2 COMPONENTS
AU/NZ racing and Australian sports odds for AI agents: 36 read-only tools, each stating its cost.
Available components
Last scanned (7 hours ago)
Scores higher than 56% of PyPI servers
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 28 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 9 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability62
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 4899 tokens (~136/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management77
- Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 36 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Checks we ran (15)
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Checks we could not complete (1)
These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.
- Malware scan in Supply Chain SecurityMalware scan not yet available for this package.
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
- Provenance: unverified → fail ▼ security
- 4 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- 3 Nov 26 +1
- Provenance: fail → unverified ▼ security
- 1 Nov 26 +15
- Provenance: unverified → fail ▼ security
- Malware scan: unverified → pass ▲ security
- Security disclosure: unverified → fail ▼ functional
- 31 Oct 26 −14
- Provenance: fail → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Security disclosure: fail → unverified ▼ functional
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 27 Oct 26 −14
- Malware scan: pass → unverified ▼ security
- Schema quality: 4042 → 4899 ▼ functional
- Package version: 0.4.3 → 0.5.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 6 Nov 2026 · Analysed pypi/puntersedge-mcp@0.5.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | Known build tool | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 28 packages
| Packages resolved | 28 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
arb_best_prices ~90
Cross-book price comparison per selection, with every bookmaker's quote alongside the best. COST: 2 credits. A word of warning worth passing on: a two-outcome market that only ONE bookmaker is quoting will look like a large edge and is not one. Check how many books stand behind each leg before reporting an opportunity.
| Name | Type | Req | Description |
|---|---|---|---|
| max_age_minutes | – | – | – |
| sport_key | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
best_odds ~35
Best available price per outcome across bookmakers for one sport. COST: 3 credits.
| Name | Type | Req | Description |
|---|---|---|---|
| sport_key | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
bulk_datasets ~114
The catalogue of pre-built dataset FILES: every dataset published as whole-day files and monthly bundles, with rows, bytes per format (parquet, gzip csv), sha256 digest, when each was generated and the URL that serves it. COST: free. The files themselves are downloaded from application code (20 credits a daily file, 100 a monthly bundle; Business and Platform plans respectively), not from here: this tool tells you what exists and how big it is.
| Name | Type | Req | Description |
|---|---|---|---|
| dataset | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
check_overage ~126
Whether this account may run past its monthly allowance (overage), the rate per 1,000 credits, the ceiling the API actually enforces, and what this period would be invoiced if it ended now. COST: free. Read this before telling a user they are about to hit a 402: when overage is on, calls continue up to `ceiling` and the excess is invoiced; when it is off, `ceiling` equals the plan's credit limit. Switching it is done by a human in the console, not from here.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
check_usage ~49
Current key's plan, monthly credit allowance, credits used and reset date. COST: free. You rarely need this — every priced result above already carries credits_remaining, read from the response headers.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
connector_health ~86
Per-bookmaker feed freshness: last_ok, status, records written. COST: free. THIS IS HOW YOU TELL A QUIET MARKET FROM A BROKEN FEED. A stalled scraper does not error — it keeps serving its last value, which looks exactly like a live price. If a book's prices seem frozen, check here before telling a user the market has settled.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
demo_best_odds ~48
Free no-key sandbox sample of sports best-odds with arb detection. COST: free. `sport` is optional; a live sport is picked if omitted.
| Name | Type | Req | Description |
|---|---|---|---|
| sport | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
demo_next_to_go ~64
Free no-key sandbox sample of racing_next_to_go (3 races, 5 runners, 3 books, truncated). COST: free. Use it to explore the response shape before spending credits, and to demonstrate the data to someone who has not signed up.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
greyhound_field ~170
Every dog in ONE greyhound race with its recent runs and record, from our own results: the field's form in one call instead of one greyhound_form per dog. COST: 3 credits (a race we hold no field for is a free 404). Australian races, and British and Irish ones from 12 October 2026. Name the race with race_id (from racing_next_to_go, racing_events or racing_results), or venue + meeting_date (YYYY-MM-DD; AET for Australia, London for GB/IE) + race_number. runs: recent runs per dog, 1-20, default 10.
| Name | Type | Req | Description |
|---|---|---|---|
| meeting_date | – | – | – |
| race_id | – | – | – |
| race_number | – | – | – |
| runs | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
greyhound_form ~136
Greyhound form history for one dog from PuntersEdge's OWN results (Victorian tracks via FastTrack, every other state via the national results pages), from the 2026-09-13 card. COST: 3 credits (a name matching nothing is a free 404). `dog` is a name, or a runner_ref like grv:<id> / grsa:<id> to restrict to one registry. Nothing earlier than 2026-09-13 exists here: the record is since that date, not a career.
| Name | Type | Req | Description |
|---|---|---|---|
| dog | string | yes | – |
| limit | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
greyhound_stats ~91
One greyhound's record from PuntersEdge's OWN results since 2026-09-13, split by track, distance, box or any combination (`by=track,distance`); no grade dimension. COST: 3 credits; a bad `by` is a free 422, an unknown dog a free 404.
| Name | Type | Req | Description |
|---|---|---|---|
| by | – | – | – |
| dog | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
horse_form ~225
Thoroughbred form, career record and profile for ONE horse, read from Racing Australia's form page. COST: 3 credits. `horse` is a name (matched case- and punctuation-insensitively), the `pe:` horse_ref every thoroughbred surface publishes (the same thing: the folded name), or an `ra:` code from runner_ref (prefer the name or horse_ref: Racing Australia issues a new code each day). A name resolves to ONE horse. The response carries `horse_ref`, the key that joins this horse across meetings; its `runner_ref` is the code the page was read under. A 503 saying Racing Australia is refusing fresh reads means call horse_runs instead: that is our own record and does not depend on the page. DO NOT LOOP THIS over a field or a list: the upstream rate limits hard and a burst gets the whole estate flagged. For many horses there is a paced bulk backfill queue, reached from application code rather than from here.
| Name | Type | Req | Description |
|---|---|---|---|
| horse | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
horse_runs ~170
Every run we hold for ONE thoroughbred out of PuntersEdge's OWN settled results, newest first: position, margin, official SP, jockey, trainer and field size per run, plus a starts/wins/places summary. COST: 3 credits (a name matching nothing is a free 404). `horse` is a name or its `pe:` horse_ref; an `ra:` code is accepted but pins one meeting's entry. NOT a career record: it starts at `source.coverage_from` (the first complete card, 2026-09-01) and only grows. Use it when horse_form cannot be read, or whenever the question is what happened in the races we settled ourselves.
| Name | Type | Req | Description |
|---|---|---|---|
| horse | string | yes | – |
| limit | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
jockey_stats ~87
Jockey premiership leaderboards, or one jockey by (partial) name. COST: 2 credits. state: AUS (national) or a state. scope: all, metro, provincial, country, picnic. season: current or previous RA season (1 Aug – 31 Jul).
| Name | Type | Req | Description |
|---|---|---|---|
| name | – | – | – |
| scope | – | – | – |
| season | – | – | – |
| state | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_sports ~47
The sport catalogue: every queryable sport_key with its display name. COST: 1 credit. Racing is NOT in here and has no sport_key — use the racing_* tools.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_acceptances ~138
Full-day AU thoroughbred acceptance card: every meeting, race and runner. COST: 2 credits. date=YYYY-MM-DD (Australia/Sydney), up to 3 days back or forward. READ THE COUNTS CAREFULLY. Several are a FLOOR rather than an exact figure wherever a race reports runner_set_status other than 'checks_passed' — the response's `completeness` block and each race's `runner_set_note` state the bound. Say 'at least N' rather than reporting a field size, unless the status says checks_passed.
| Name | Type | Req | Description |
|---|---|---|---|
| date | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_best_odds ~96
Best win, place and tote price per runner across every bookmaker, with the book offering it and the market percentage. COST: 3 credits. market_percentage under 100 means the best prices across books beat the field; over 100 is the bookmakers' margin, which is the normal case.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| categories | – | – | – |
| country | – | – | – |
| num_races | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_changes ~184
Races and prices that changed since a timestamp. COST: 2 credits. THE RIGHT WAY TO WATCH A MARKET. Calling racing_next_to_go repeatedly re-downloads every race every time; this returns only what moved. `since` is an ISO 8601 UTC timestamp — on the first call use a recent one, then pass back the `server_time` the response returns. That cursor is set 30s behind the server clock so no in-flight write is skipped, which means the feed is at-least-once: expect to see a race twice. Note the shape — `changed_runners` is FLAT, one row per runner per bookmaker with bookmaker_key on the row, not the nested runners[].bookmakers[] of next-to-go.
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | – |
| country | – | – | – |
| since | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_closing_lines ~164
The permanent closing-line and result archive — the dataset for measuring closing line value. COST: 5 credits. Plus and above read the whole archive; Standard reads a rolling window, and each response's window_days says which applies to the key (null is the whole archive). Free and Hobby keys get a 403 naming the plans that work, and so does a Standard request for dates entirely outside its window. Ask racing_closing_lines_coverage first to learn what the archive actually holds before reporting that something is missing.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | – |
| country | – | – | – |
| date | – | – | – |
| limit | – | – | – |
| offset | – | – | – |
| race_id | – | – | – |
| resulted_only | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_closing_lines_coverage ~67
What the closing-line archive holds: floor date, row and race counts, how much is a true closing line and how much is resulted. COST: 1 credit. Cheap, and it is the honest answer to 'how far back does your history go'.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_clv ~286
Score bets against the closing line each race actually closed at. COST: 5 credits per request, up to 200 bets. Plus plan and above (lower tiers get a 403 and are not charged). Each bet is an object: name the race by `race_id` (from next-to-go, events, results or the archive) or by `venue` + `meeting_date` (YYYY-MM-DD, AET) + `race_number`; name the runner by `runner_ref` (exact), `runner_number` (saddlecloth) or `runner_name`; give `price` (decimal odds taken), optionally `stake` (default one flat unit), `bookmaker` (measure against THAT book's close) and `ref` (your id, echoed back). `reference` is `best` (highest close across books, the strictest test) or `median`, used when a bet names no bookmaker. Returns per bet the closing prices, clv_pct, beat_close, the result and flat-stake pnl, and a summary with average and median CLV, beat-the-close rate, win rate and ROI. A bet the archive cannot resolve comes back with a `reason` and is left out of the averages, not guessed.
| Name | Type | Req | Description |
|---|---|---|---|
| bets | array | yes | – |
| reference | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_consensus ~144
Margin-free consensus for ONE race: each runner's fair probability and price, built by removing every bookmaker's margin and combining the books, with which books were used and which were left out and why. COST: 3 credits. Name the race with race_id, or venue + meeting_date (AET, YYYY-MM-DD) + race_number. A runner priced above its consensus by several books is the honest form of 'value'; one book alone above it usually is not.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| meeting_date | – | – | – |
| min_books | – | – | – |
| race_id | – | – | – |
| race_number | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_events ~72
Scheduled races in a forward window, WITHOUT prices. COST: 1 credit. Cheaper than next-to-go when you only need the card — what is running, where and when — rather than what it is paying.
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | – |
| country | – | – | – |
| hours_ahead | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_markets ~213
Every market on ONE race: win, place, Same Race Multi Top 2/3/4, and — once the race has run — the exotic dividends it paid. COST: 2 credits. Plus plan and above. Name the race with race_id (exact), or venue + meeting_date (AET, YYYY-MM-DD) + race_number. Two races sharing those three answer 409 race_ambiguous and cost nothing rather than silently picking one side of a venue split. bookmakers/markets: comma separated; markets is a subset of win, place, top2, top3, top4, exotics. Every book prices win and all but the exchange price place; Top 2/3/4 come from fewer books, so treat a missing leg as 'not quoted', never as 'no market'.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| markets | – | – | – |
| meeting_date | – | – | – |
| race_id | – | – | – |
| race_number | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_movers ~141
Consensus firmers and drifters in the live racing window. COST: 3 credits. direction must be 'firming', 'drifting' or omitted — anything else is refused with a 422 (free). min_books only reports a move confirmed by that many bookmakers, which is how you separate a real move from one book repricing. Use `limit` to cap the page; there is no num_races on this endpoint.
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | – |
| country | – | – | – |
| direction | – | – | – |
| limit | – | – | – |
| max_mins_to_jump | – | – | – |
| min_books | – | – | – |
| min_move_pct | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_next_to_go ~227
Next races to jump, with runners and live per-bookmaker prices. EVERY country by default, NOT only AU/NZ — much of the catalogue is foreign. Australian races carry the full panel; the British and Irish card (country=GB,IE) carries the UK-licensed books ladbrokes_uk, williamhill and betway_uk plus the Australian books that quote it, with place_price derived from each-way terms; every other country sits at a median of ONE bookmaker. COST: 2 credits. categories: horse,greyhound,harness (omit for all). country: ISO codes e.g. AU, AU,NZ or GB,IE — pass country=AU for an Australian card, adding include_unresolved=true when late-card races are still country-unresolved. venue/bookmakers: comma-separated, case-insensitive. Each price carries its own age_seconds and stale flag; prefer fresh quotes.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| categories | – | – | – |
| country | – | – | – |
| num_races | integer | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_price_history ~110
Recorded per-bookmaker price ticks for one race — the market movement record. COST: 5 credits (this is one of the expensive ones; do not loop it). Give race_id, or venue + race_number + date. include_points=false returns open/close/high/low only, which is usually what a summary needs.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| date | – | – | – |
| include_points | – | – | – |
| race_id | – | – | – |
| race_number | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_results ~299
Settled AU/NZ race results. COST: 2 credits. Carries `placings` (the dividend-bearing top three, with win and place prices) AND `runners` (the FULL finishing order with jockey, trainer, margin, starting price and, on every thoroughbred entry, `horse_ref`). Neither alone is the whole picture — join them on saddlecloth number. Settle only against status=final; interim can change on protest. JOINING ACROSS MEETINGS: `horse_ref` (`pe:<name>`) is the horse and is the same value on the live board, the closing-line and price-path archives, horse_form and horse_runs. `runner_ref` (`ra:<code>`) is the code Racing Australia published on race day: it joins the rows about one race, and changes from meeting to meeting because Racing Australia issues a new code for the same horse each day. Greyhound runner_refs (`grv:`/`grsa:`) are per-dog registry ids and do persist. date=YYYY-MM-DD for a single meeting day (AET). `field_status` says whether the finishing order is the complete field.
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | – |
| country | – | – | – |
| date | – | – | – |
| hours_back | integer | – | – |
| limit | – | – | – |
| offset | – | – | – |
| status | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_results_coverage ~89
What the results field coverage actually IS, measured rather than promised. COST: 1 credit. Call this before telling a user that results are missing — the answer is often that a race has no results source, not that we dropped it. days: 1-30 (the endpoint's window; a larger value is sent as 30).
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_track_conditions ~80
Track condition, weather and rail position: current state plus the day's change log. COST: 1 credit. date=YYYY-MM-DD, Australia/Sydney, up to 7 days back. A going change mid-meeting is one of the few things that moves a whole card at once.
| Name | Type | Req | Description |
|---|---|---|---|
| date | – | – | – |
| venue | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
racing_venues ~80
Canonical venue directory: venue_id, display name, physical site, country and the codes run there. COST: 1 credit. Use venue_id to join across endpoints — spelling variants of one track ('Sandown Hillside', 'SANDOWN HILLSIDE') share one id, and the raw `venue` string does not.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sports_closing_lines ~123
Each bookmaker's last head-to-head price, handicap line and total before the start of every match in a range, plus the consensus close. COST: 5 credits. Standard and above (403 on Free and Hobby). date_from/date_to: ISO dates; default the last 7 days, at most 92 days per call (page by month for a season). Lines exist from 2026-09-29.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| date_from | – | – | – |
| date_to | – | – | – |
| sport_key | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sports_odds ~161
Head-to-head, spread and total prices per bookmaker for one sport's upcoming fixtures (sport_key=afl, nrl, nba, soccer_epl …). COST: 1 CREDIT PER MARKET REQUESTED — markets='h2h' is 1, 'h2h,spreads,totals' is 3. There is no single figure for this tool; ask for the markets you will actually read. Every market carries a `quality` object (score, status, age in seconds) — trust it over assumptions. Racing is not a sport key; 'horse-racing' is a 422.
| Name | Type | Req | Description |
|---|---|---|---|
| bookmakers | – | – | – |
| competition | – | – | – |
| markets | – | – | – |
| sport_key | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sports_results ~152
Final scores from the league's own record. COST: 1 credit. Covers afl, aflw, nrl and nrlw only; another sport_key is a free 422, never an empty list. `event_id` ties a result to the fixture you hold prices for, and is null when no fixture matched with certainty — settle only rows that carry one (linked_only=true). Scores stay null until the league calls the match final, so an abandoned game never reads as a nil-all.
| Name | Type | Req | Description |
|---|---|---|---|
| competition | – | – | – |
| final_only | boolean | – | – |
| limit | – | – | – |
| linked_only | boolean | – | – |
| season | – | – | – |
| sport_key | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
trainer_stats ~61
Trainer premiership leaderboards, or one trainer by (partial) name. COST: 2 credits. Same state/scope/season options as jockey_stats.
| Name | Type | Req | Description |
|---|---|---|---|
| name | – | – | – |
| scope | – | – | – |
| season | – | – | – |
| state | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
us_tote ~241
North American tote odds from TVG: every US and Canadian race on its board with each runner's morning line and current win odds (odds-to-1 and decimal) and the WIN pool. COST: 2 credits. A TOTE, NOT A BOOKMAKER: the payoff is whatever the pool pays when it closes, so a pre-race price is an estimate; settled payoffs are on racing_results with country=US. win_odds is null until the WIN pool holds money. date=YYYY-MM-DD (US day, default today); country US or CA; status open, off or official. history=true (how the odds and pool moved from an hour before post) and exotics=true (probables and will-pays) each need ONE race: race_id, or TVG's source_race_id tvg_<track>_<YYYY-MM-DD>_<n>.
| Name | Type | Req | Description |
|---|---|---|---|
| country | – | – | – |
| date | – | – | – |
| exotics | boolean | – | – |
| history | boolean | – | – |
| race_id | – | – | – |
| source_race_id | – | – | – |
| status | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
How do I install the io.github.Propertyscout001/puntersedge MCP server?
io.github.Propertyscout001/puntersedge runs locally as a PyPI package, launched with uvx puntersedge-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · puntersedge-mcp
claude mcp add propertyscout001-puntersedge -- uvx puntersedge-mcp
What is the io.github.Propertyscout001/puntersedge MCP server?
io.github.Propertyscout001/puntersedge is an MCP server listed in the public MCP registry as io.github.Propertyscout001/puntersedge. AU/NZ racing and Australian sports odds for AI agents: 36 read-only tools, each stating its cost. This page covers its PyPI package (puntersedge-mcp).
Is the io.github.Propertyscout001/puntersedge MCP server safe to use?
io.github.Propertyscout001/puntersedge scores 56 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 6 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.Propertyscout001/puntersedge MCP server expose?
io.github.Propertyscout001/puntersedge exposes 36 tools: racing_next_to_go, racing_best_odds, racing_movers, racing_changes, racing_events, and 31 more. Their descriptions and schemas cost roughly 4,666 tokens of context every time the server is loaded.
Is the io.github.Propertyscout001/puntersedge MCP server still maintained?
io.github.Propertyscout001/puntersedge is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.Propertyscout001/puntersedge MCP server under?
io.github.Propertyscout001/puntersedge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.
What did VerifyMCP test on the io.github.Propertyscout001/puntersedge MCP server?
VerifyMCP ran 15 checks on io.github.Propertyscout001/puntersedge, covering Known CVEs, Install scripts, Dependency health, Source repository and 11 more. One item could not be completed, a gap on our side rather than a finding about io.github.Propertyscout001/puntersedge: Malware scan. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.