# `io.github.holoduke/livescore-mcp` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.github.holoduke/livescore-mcp
- JSON: https://anlyon.dev/api/v1/servers/io.github.holoduke/livescore-mcp
- Version: 1.3.1 (active)
- Publisher: io.github.holoduke (GitHub account)
- Runs: remote (sse,streamable-http)
- Sign-in to list tools: none
- Repository: https://github.com/holoduke/livescore-mcp
- Metadata from the official MCP Registry, synced 2026-10-21T18:36:02.514Z

Title and description, as the publisher wrote them:

```untrusted-server-text
LiveScore MCP
Football live scores, fixtures, standings, top scorers, matches, teams and players for 1000+ leagues
```

Scanned 2026-10-21T19:23:23.866Z over streamable-http.

**16 tools: 1 change things and 15 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 1 | ask |
| Only reads | read | 15 | allow |

## Exfil surface

No private-data -> untrusted-input -> outbound path in this server alone: no tool is tagged outbound.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | `mcp__livescore__get_head_to_head` `mcp__livescore__get_standings` |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__livescore__fetch` `mcp__livescore__get_day_fixtures` `mcp__livescore__get_fixtures` `mcp__livescore__get_head_to_head` `mcp__livescore__get_league_fixtures` `mcp__livescore__get_live_scores` `mcp__livescore__get_match` `mcp__livescore__get_match_commentary` `mcp__livescore__get_match_report` `mcp__livescore__get_player` `mcp__livescore__get_standings` `mcp__livescore__get_team` `mcp__livescore__get_team_image` `mcp__livescore__get_top_scorers` `mcp__livescore__health` `mcp__livescore__search` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | none |

## Findings

No check matched anything in these tool definitions.


## Changes things (1)

Creates or changes something that can be changed back. Claude Code: ask.

### `health`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Connectivity check: echoes the message back.
```

## Only reads (15)

Looks things up and changes nothing. Claude Code: allow.

### `fetch`

- The name "fetch" says "fetch": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Full details for an id from search: team:<id>, player:<id>, league:<league key> or match:<id>. Returns the title, the full text, and the football-mania.com url.
```

### `get_day_fixtures`

- The name "get_day_fixtures" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
All football matches on a date: results, live scores and kick-off times, grouped by competition (biggest competitions first). A busy day has 1000+ matches, so filter by country or league_key when you can.
```

### `get_fixtures`

- The name "get_fixtures" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Same as get_league_fixtures; accepts the competition key with or without the _small suffix.
```

### `get_head_to_head`

- The name "get_head_to_head" says "get": a word for reading.
- Tag private-data: The description's first sentence says "meeting": it reads calendars.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
All-time head-to-head record of two teams: wins, draws, goals, their recent meetings and the next scheduled meeting. Teams by ID or name.
```

### `get_league_fixtures`

- The name "get_league_fixtures" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Fixtures and results of one competition (league or cup): latest results, matches in play and upcoming matches of the current season, or one round. For the table use get_standings.
```

### `get_live_scores`

- The name "get_live_scores" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Football matches being played right now, worldwide, with score and minute, grouped by competition (biggest competitions first). Optional filters by country or league key.
```

### `get_match`

- The name "get_match" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
One match in detail: score, status, goals, cards and substitutions with minutes, line-ups, team statistics (possession, shots, corners…), injuries, form, standings of both teams, match report and head-to-head record.
```

### `get_match_commentary`

- The name "get_match_commentary" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Minute-by-minute written commentary for a match, plus the goals, cards and substitutions in order. Useful while a match is in play, and afterwards to see how it unfolded.
```

### `get_match_report`

- The name "get_match_report" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
A written report of a finished match, or a preview of one still to come, with the story and the sources it drew on. Available for selected competitions rather than every match; call get_match first if you are not sure the match has one. Translated into es, de, fr, it, pt, nl, ru, ar and tr; other languages fall back to English.
```

### `get_player`

- The name "get_player" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
A player: club, position, age, nationality, market value, statistics per season and competition, injuries, transfers and honours.
```

### `get_standings`

- The name "get_standings" says "get": a word for reading.
- Tag private-data: The description's first sentence says "table": it reads databases.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Current standings (league table) of a competition: position, played, won, drawn, lost, goals, points, form and the qualification or relegation zone. Group-stage competitions return every group.
```

### `get_team`

- The name "get_team" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
A team: recent results and upcoming fixtures, league positions, season statistics, squad with appearances and goals, injuries, transfers, coach, stadium and honours.
```

### `get_team_image`

- The name "get_team_image" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "url": it reads web pages, which anyone can write.

Description, as the server wrote it:

```untrusted-server-text
URL of a team's logo (PNG).
```

### `get_top_scorers`

- The name "get_top_scorers" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Top scorers of a competition this season: goals, penalty goals, team and nationality.
```

### `search`

- The name "search" says "search": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Find teams, players and competitions by name. Returns results with an id (team:…, player:…, league:…) for fetch or the other tools, a title, a football-mania.com url and a short summary; teams include their last and next match.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `livescore`:

```json
{
  "permissions": {
    "allow": [
      "mcp__livescore__fetch",
      "mcp__livescore__get_day_fixtures",
      "mcp__livescore__get_fixtures",
      "mcp__livescore__get_head_to_head",
      "mcp__livescore__get_league_fixtures",
      "mcp__livescore__get_live_scores",
      "mcp__livescore__get_match",
      "mcp__livescore__get_match_commentary",
      "mcp__livescore__get_match_report",
      "mcp__livescore__get_player",
      "mcp__livescore__get_standings",
      "mcp__livescore__get_team",
      "mcp__livescore__get_team_image",
      "mcp__livescore__get_top_scorers",
      "mcp__livescore__search"
    ],
    "ask": [
      "mcp__livescore__health"
    ],
    "deny": []
  }
}
```

Capability tags behind the rules (a read tagged outbound is asked about):

- `mcp__livescore__fetch`: untrusted-input
- `mcp__livescore__get_day_fixtures`: untrusted-input
- `mcp__livescore__get_fixtures`: untrusted-input
- `mcp__livescore__get_head_to_head`: private-data, untrusted-input
- `mcp__livescore__get_league_fixtures`: untrusted-input
- `mcp__livescore__get_live_scores`: untrusted-input
- `mcp__livescore__get_match`: untrusted-input
- `mcp__livescore__get_match_commentary`: untrusted-input
- `mcp__livescore__get_match_report`: untrusted-input
- `mcp__livescore__get_player`: untrusted-input
- `mcp__livescore__get_standings`: private-data, untrusted-input
- `mcp__livescore__get_team`: untrusted-input
- `mcp__livescore__get_team_image`: untrusted-input
- `mcp__livescore__get_top_scorers`: untrusted-input
- `mcp__livescore__health`: untrusted-input
- `mcp__livescore__search`: untrusted-input

## Remote posture

What an anonymous client saw at the remote endpoint, last 2026-10-22T15:00:08.652Z, unchanged since 2026-10-22T15:00:08.652Z. No credentials were sent and no tool was called. Values are shown as the endpoint returned them. Method: https://anlyon.dev/methodology#remote-posture

| Fact | Observed |
| --- | --- |
| Reachable | `yes` |
| HTTP status of an anonymous initialize | `200` |
| tools/list served without credentials | `yes` |
| Tools that change things, listed without credentials | `1` |
| Protocol version | `2025-06-18` |
| WWW-Authenticate on 401 | `not observed` |
| resource_metadata in WWW-Authenticate | `none` |
| RFC 9728 protected resource metadata | `none` |
| Authorization servers | `none` |
| Legacy HTTP+SSE transport | `yes` |
| Dynamic client registration | `not observed` |
| Client ID metadata documents | `not observed` |

- **warn** Tools that change things, listed to anyone ([unauth-remote-writes](https://anlyon.dev/methodology#unauth-remote-writes))

```untrusted-server-text
The endpoint served tools/list without credentials, and the list has 1 tool that changes things (1 write). Whether a call also works without credentials was not tested: tools are never called.

https://livescoremcp.com/mcp: tools/list returned 16 tools to an anonymous client, including health (write)
```
