Skip to main content
Glama
jedi-knights

jk-mcp-ecnl

Official
by jedi-knights

jk-mcp-ecnl

CI Badge Coverage Python License: MIT

An MCP server for ECNL (Elite Clubs National League) and ECRL (ECNL Regional League) youth soccer — schedules, standings, and RPI for both boys and girls — backed by the public Total Global Sports / AthleteOne API that powers theecnl.com.

Built as a sibling to jk-mcp-nwsl: Python 3.13, FastMCP, httpx, hexagonal architecture.

Contents

Related MCP server: Soccer V3 Scores MCP Server

Features

  • Discover ECNL/ECRL events (conferences) by league, gender, and season — no event IDs to memorize.

  • Standings, schedules, results, teams, clubs, match detail, and playoff brackets for any flight.

  • RPI (Rating Percentage Index) computed from extracted match results, with the WP / OWP / OOWP breakdown and a configurable tie weight.

  • Read-only, idempotent tools over a public, no-auth JSON API.

Data model

league (ECNL/ECRL) × gender (boys/girls) × conference × season is one event (event_id). Within an event, divisions are age groups, each with one or more flights; standings and schedules are keyed by flight_id. Start with find_events to turn a human description into the IDs the other tools need.

Requirements

  • Python 3.13+

  • uv

Quickstart

uv sync
uv run jk-mcp-ecnl          # stdio transport (default)

See docs/quickstart.md for HTTP mode and a typical tool sequence.

Claude Code / Claude Desktop

Register the server as a stdio MCP server running uv run jk-mcp-ecnl from this directory (or docker run -i --rm jk-mcp-ecnl).

Docker

uv run inv build-image            # build jk-mcp-ecnl:latest
docker run -i --rm jk-mcp-ecnl    # stdio
docker compose up                 # HTTP on :8000

Configuration

All configuration is via environment variables — see the table in docs/quickstart.md.

Tools

Tool

What it returns

find_events

Events (conferences) matching league/gender/season → event IDs

get_event_overview

An event's divisions and flights, with flight IDs and tiers

get_standings

A flight's standings table (W-L-D, points, PPG)

get_schedule

All matches for a flight

get_team_schedule

One team's matches within an event

get_teams

Teams in a flight

get_clubs

Clubs in an event

get_match

Match detail / box score (raw JSON)

get_brackets

Playoff bracket for a flight (raw JSON)

get_results

Completed match results for a flight (the RPI input)

get_rpi

RPI ranking for a flight with WP/OWP/OOWP components

get_team_rpi

One team's RPI breakdown

RPI

RPI follows the standard NCAA structure used by the women's-soccer RPI reference:

RPI = 0.25·WP + 0.50·OWP + 0.25·OOWP

WP = (W + tie_weight·T) / (W + L + T) with tie_weight defaulting to 1/3 (the 2024 convention; pass 0.5 for pre-2024). OWP and OOWP score ties at 1/2 and exclude the rated team from each opponent's record. Note: within a single conference (typically a complete round-robin) OWP/OOWP converge to ~0.5, so RPI ≈ WP there — RPI's discriminating power comes from cross-conference pools, a planned future enhancement (see the ADR).

Example prompts

Once the server is connected, ask Claude natural-language questions — it chains the tools for you (typically find_eventsget_event_overviewget_standings/get_schedule/get_rpi), resolving the event, division, and flight IDs along the way. You never supply IDs yourself. Age groups map to birth-year divisions (e.g. "U17" ≈ the G2008/2007 division).

Discovering events

  • "What ECNL girls conferences are there this season?"

  • "List the ECRL boys events for 2025-26."

  • "Is there an ECNL boys conference in Northern California?"

Standings

  • "Show me the ECNL Girls Southwest U17 standings."

  • "Who's top of the table in ECNL Boys Northern Cal U16?"

  • "How many points separate the top three teams in ECRL Girls Carolinas?"

Schedules & results

  • "What's the schedule for the ECNL Girls Southeast U15 flight?"

  • "What were last weekend's scores in ECNL Boys Texas U17?"

  • "When does Slammers FC HB Koge play next?"

  • "Give me Beach FC's results so far this season."

Teams & clubs

  • "Which clubs are competing in the ECNL Girls Southwest event?"

  • "List the teams in the ECNL Boys Northern Cal U16 flight."

RPI analysis

  • "Rank the ECNL Girls Southwest U17 flight by RPI."

  • "What's Slammers FC's RPI, broken down into WP, OWP, and OOWP?"

  • "Recompute that flight's RPI using the pre-2024 ½ tie weight."

  • "In ECRL Boys Carolinas, which team has the strongest opponents (highest OWP)?"

Playoffs

  • "Is there a playoff bracket for the ECNL Girls Southwest U19 flight?"

Development

uv run inv lint              # ruff check + format check
uv run inv check-complexity  # cyclomatic complexity gate (max 7)
uv run inv coverage          # pytest + coverage (min 90%)

How it works

Hexagonal architecture — the dependency graph flows inward:

adapters/inbound (FastMCP tools, formatters)
        │
   application (ECNLService, RPI engine)
        │
      ports (ECNLAPIPort, DiscoveryPort)
        │
     domain (models, classification, exceptions)
        ▲
adapters/outbound (AthleteOneAdapter, retry, cache, discovery)

The data source, its quirks, and how event discovery works are documented in docs/decisions/0001-data-source-athleteone-api.md.

License

See LICENSE.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jedi-knights/jk-mcp-ecnl'

If you have feedback or need assistance with the MCP directory API, please join our Discord server