# BirdieAPI (remote · mcp.birdieapi.com)

PGA Tour data from 2001: leaderboards, holes, courses, ratings, par-3/4/5 splits, major winner odds.

- Trust score: 87/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.birdieapi.com`: 87/100 (this document), [markdown](https://verifymcp.io/servers/noahowsh-birdieapi/mcp.md), [page](https://verifymcp.io/servers/noahowsh-birdieapi/mcp)

## Channel facts

- Endpoint: `https://mcp.birdieapi.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.6`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 11/100
  - TLS not yet verified: we couldn't open a connection to check the certificate.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS not yet verified: we couldn't read the response headers to check for it.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but we couldn't connect to verify it.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the BirdieAPI MCP server?

BirdieAPI is a hosted endpoint at https://mcp.birdieapi.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http noahowsh-birdieapi 'https://mcp.birdieapi.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "noahowsh-birdieapi": {
      "url": "https://mcp.birdieapi.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "noahowsh-birdieapi": {
      "type": "http",
      "url": "https://mcp.birdieapi.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.noahowsh-birdieapi]
url = "https://mcp.birdieapi.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "noahowsh-birdieapi": {
      "type": "remote",
      "url": "https://mcp.birdieapi.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add noahowsh-birdieapi --url 'https://mcp.birdieapi.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  noahowsh-birdieapi:
    url: "https://mcp.birdieapi.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "noahowsh-birdieapi": {
      "Transport": "http",
      "Url": "https://mcp.birdieapi.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add noahowsh-birdieapi -t streamable-http -u 'https://mcp.birdieapi.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "noahowsh-birdieapi": {
      "type": "http",
      "url": "https://mcp.birdieapi.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 87, 0)

- [security regression] Endpoint reachability: reachable → unreachable
- [security regression] Stability: 0.77 → unverified
- [security regression] HSTS header: fail → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] TLS certificate: pass → unverified
- [security regression] Transport: pass → fail
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-11-04 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 83, 0)

- [security] The server rewrote its instructions, which are the text every model session reads

### 2026-10-26 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (14)

### `list_tournaments` (~166 tokens)

List tournaments

Use to find tournaments. Lists a season's tournaments (ascending) or the latest ones (descending) with dates, status, purse, whether it is a major, the winner and winning score, field size and the courses. Filter by season, status and major. Costs 1 credit.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `limit` (integer): Max tournaments (default 60).
- `major` (boolean): Only the majors.
- `offset` (integer): Page offset; use next_offset.
- `season` (string|number): Season year, e.g. 2025.
- `status` (string): Only upcoming, in-progress or completed tournaments.

Output parameters:

- `count` (number)
- `next_offset` (number|null)
- `tournaments` (array)

### `get_schedule` (~92 tokens)

Schedule

Use for what is on now and next: tournaments in play or starting in the next N days (default 30), with the courses and the defending champion. Costs 1 credit.

Input parameters:

- `days` (integer): Days ahead (default 30, max 365).
- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.

Output parameters:

- `count` (number)
- `days` (number)
- `tournaments` (array)

### `get_leaderboard` (~149 tokens)

Leaderboard

Use for a tournament's results: every player in the field in finishing order with position (T5), status (cut, wd, dq), score to par, total strokes, each round's score and strokes versus the field, earnings (none for the DP World Tour or LIV) and season points (FedEx Cup, PGA Tour only), plus any playoff. Costs 2 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `limit` (integer): Max players (default the whole field).
- `tournament_id` (string, required): Tournament id from list_tournaments or get_schedule.

Output parameters:

- `count` (number)
- `note` (string)
- `players` (array)
- `tournament` (object)

### `get_course` (~142 tokens)

Course

Use for a course as it was set up for a tournament: par and yards per hole, and how each hole played (scoring average, to par, birdie and bogey rates, difficulty rank) from every round on it. For a tournament on more than one course pass course_id. Costs 2 credits.

Input parameters:

- `course_id` (string): Course id, for tournaments played on more than one course (list_tournaments lists them).
- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `tournament_id` (string, required): Tournament id from list_tournaments.

Output parameters:

- `course` (object)
- `holes` (array)
- `note` (string)
- `other_courses` (array)
- `rounds` (number)
- `scoring_average` (number|null)
- `tournament` (object)

### `search_players` (~101 tokens)

Search players

Use to find a player's id by name (accents optional). Returns country, tournaments played, wins and the seasons played. Costs 1 credit.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `limit` (integer): Max players (default 20).
- `query` (string, required): Part of the player's name, e.g. 'scheffler'.

Output parameters:

- `count` (number)
- `note` (string)
- `players` (array)

### `get_player` (~105 tokens)

Player

Use for a player's overview: profile, career totals (starts, wins, top tens, cuts, money, scoring average, strokes versus the field), our current rating, a line per season and the last ten results. Costs 5 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `player_id` (string, required): Player id from search_players or get_leaderboard.

Output parameters:

- `career` (object)
- `player` (object)
- `rating`
- `recent_results` (array)
- `seasons` (array)

### `get_player_results` (~144 tokens)

Player results

Use for a player's tournament-by-tournament record: finish, score, earnings and each round with the field's average and strokes versus the field (raw and field-strength adjusted). Newest first; filter by season. Costs 5 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `limit` (integer): Max tournaments (default 50).
- `offset` (integer): Page offset; use next_offset.
- `player_id` (string, required): Player id from search_players.
- `season` (string|number): Season year, e.g. 2025.

Output parameters:

- `count` (number)
- `next_offset` (number|null)
- `player_id` (string)
- `results` (array)

### `get_player_stats` (~186 tokens)

Player stats

Use for a player's season in numbers: results (starts, wins, top tens, cuts, money), scoring average and strokes versus the field, hole scoring from every hole played (birdies and bogeys per round, par 3/4/5 averages) and, for the PGA Tour and Korn Ferry Tour, strokes versus the field by hole type (sg_par3, sg_par4, sg_par5; score-based, not shot data) and, where they exist, driving distance and accuracy, greens in regulation and putts per green. Costs 5 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `player_id` (string, required): Player id from search_players.
- `season` (string|number, required): Season year, e.g. 2025.

Output parameters:

- `ball_striking`
- `hole_scoring`
- `note` (string)
- `player` (object)
- `published_season`
- `results` (object)
- `season` (number)

### `get_scorecard` (~112 tokens)

Scorecard

Use for one player's tournament hole by hole: every round's strokes on each hole with par, yards and the result (birdie, bogey), the course played, out and in, and strokes versus the field. Costs 2 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, kornferry.
- `player_id` (string, required): Player id from get_leaderboard or search_players.
- `tournament_id` (string, required): Tournament id from list_tournaments.

Output parameters:

- `note` (string)
- `result` (object)
- `rounds` (array)

### `get_course_history` (~147 tokens)

Course history

Use for course or event form: a player's record at one tournament across every year (pass any edition's tournament_id) or at one course across every tournament played there (course_id), with finishes, rounds and strokes versus the field, and a summary. Costs 5 credits.

Input parameters:

- `course_id` (string): A course id (list_tournaments lists each tournament's courses).
- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `player_id` (string, required): Player id from search_players.
- `tournament_id` (string): Any year's id of the tournament; every edition is returned.

Output parameters:

- `count` (number)
- `course` (object)
- `editions` (array)
- `player` (object)
- `rounds` (array)
- `summary` (object)
- `tournament` (string)

### `get_head_to_head` (~128 tokens)

Head to head

Use to compare two players: every tournament both played with each one's finish, who finished ahead (making the cut beats missing it), round-by-round strokes on the same course, and a summary. Filter by season. Costs 5 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `player_a` (string, required): First player id.
- `player_b` (string, required): Second player id.
- `season` (string|number): Season year, e.g. 2025.

Output parameters:

- `count` (number)
- `meetings` (array)
- `player_a` (object)
- `player_b` (object)
- `summary` (object)

### `get_ratings` (~171 tokens)

Ratings

Use for who is playing best: our strokes-versus-field rating for every player active in the past year, best first. A rating of 2.0 means two strokes a round better than an average player in the same fields, adjusted for field strength and weighted toward recent rounds. Pass as_of for the ratings on a past date. Costs 2 credits.

Input parameters:

- `as_of` (string): A date (YYYY-MM-DD): the ratings as they stood then. Default the latest.
- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `limit` (integer): Max players (default 50).
- `min_rounds` (integer): Minimum decay-weighted rounds behind a rating (default 20).

Output parameters:

- `as_of` (string|null)
- `count` (number)
- `method` (string)
- `min_rounds` (number)
- `ratings` (array)

### `get_leaders` (~288 tokens)

Leaders

Use for a season's leaders in one stat, with each player's sample. Stats from rounds and holes: scoring_average, vs_field, adj_vs_field, birdies_per_round, bogey_avoidance, par3_average, par4_average, par5_average, and sg_par3, sg_par4, sg_par5 (strokes versus the field on par 3, 4 or 5 holes, field-strength adjusted; PGA Tour and Korn Ferry Tour only, score-based, not shot data). From results: earnings (empty for the DP World Tour and LIV), cup_points (FedEx Cup points, PGA Tour only: no Race to Dubai or CME Globe points), wins, top_tens. From tournament stat lines (PGA Tour from 2011): driving_distance, driving_accuracy, greens_in_regulation, putts_per_gir. Costs 5 credits.

Input parameters:

- `league` (string): League. Defaults to golf. One of: golf, lpga, liv, dpwt, kornferry.
- `limit` (integer): Max players (default 25).
- `min` (integer): Minimum sample: rounds (default 40), starts (1) or tournaments with a stat line (8).
- `season` (string|number, required): Season year, e.g. 2025.
- `stat` (string, required): The stat to rank.

Output parameters:

- `count` (number)
- `label` (string)
- `leaders` (array)
- `minimum` (number)
- `minimum_of` (string)
- `note` (string)
- `season` (number)
- `stat` (string)

### `get_winner_odds` (~357 tokens)

Winner odds

Use for the pre-tournament winner prices of the four men's majors by sportsbook, and how they moved: for each golfer and book the opening price (the first snapshot) and the latest price before the first round, with the implied probability (weekly snapshots for every major from 2021 plus the 2020 U.S. Open, then refreshed daily while a major's market is open, every six hours in tournament week). For past majors the latest price can be up to a week before the first tee time; round, matchup and finishing-position markets are not held. Pass tournament_id, or season (all four majors), or player_id (one golfer across the majors). Costs 5 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.

Input parameters:

- `bookmaker` (string): Bookmaker key, e.g. draftkings, fanduel, betmgm, bovada, betonlineag, espnbet, pinnacle, mybookieag.
- `limit` (integer): Golfers per tournament, favourites first (default 20, max 200). Ignored with player_id.
- `major` (string): Only this major (with season, or alone for every year).
- `player_id` (string): Player id from search_players: this golfer across the majors he was priced for.
- `season` (string|number): Season year, e.g. 2025: all four majors of that season (the 2020 U.S. Open and the November 2020 Masters are season 2021).
- `tournament_id` (string): A major's tournament id from list_tournaments (major: true).

Output parameters:

- `count` (number)
- `note` (string)
- `tournaments` (array)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/noahowsh-birdieapi/mcp#diagnostics

## Score history

- 2026-11-05: 87
- 2026-11-04: 87
- 2026-11-03: 86
- 2026-11-02: 86
- 2026-11-01: 85
- 2026-10-31: 85
- 2026-10-30: 84
- 2026-10-29: 84
- 2026-10-28: 83
- 2026-10-27: 83
- 2026-10-26: 83
- 2026-10-25: 82
- 2026-10-24: 82
- 2026-10-23: 81
- 2026-10-22: 81
- 2026-10-21: 80
- 2026-10-20: 80
- 2026-10-19: 79
- 2026-10-18: 79
- 2026-10-17: 79
- 2026-10-16: 78
- 2026-10-15: 78
- 2026-10-14: 74
- 2026-10-13: 73
- 2026-10-12: 73

## Common questions

### What is the BirdieAPI MCP server?

BirdieAPI is an MCP server listed in the public MCP registry as io.github.noahowsh/birdieapi. PGA Tour data from 2001: leaderboards, holes, courses, ratings, par-3/4/5 splits, major winner odds. This page covers its hosted endpoint (https://mcp.birdieapi.com/mcp).

### Is the BirdieAPI MCP server safe to use?

BirdieAPI scores 87 out of 100 on VerifyMCP. 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 BirdieAPI MCP server expose?

BirdieAPI exposes 14 tools: list_tournaments, get_schedule, get_leaderboard, get_course, search_players, and 9 more. Their descriptions and schemas cost roughly 2,288 tokens of context every time the server is loaded.

### Does the BirdieAPI MCP server require authentication?

Its publisher declares that BirdieAPI requires credentials, so you will need to authorise it in your MCP client. We have not been able to confirm that against the live endpoint.

### Is the BirdieAPI MCP server still maintained?

BirdieAPI is still listed in the MCP registry, though our most recent checks did not reach this channel. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.birdieapi.com/mcp
- Authorisation metadata: https://mcp.birdieapi.com/.well-known/oauth-protected-resource/mcp
- Repository: https://github.com/noahowsh/birdieapi-mcp
- Changelog RSS feed: https://verifymcp.io/servers/noahowsh-birdieapi/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/noahowsh-birdieapi/mcp.json
- HTML version of this page: https://verifymcp.io/servers/noahowsh-birdieapi/mcp
