A Model Context Protocol (MCP) server that provides access to Fantasy Premier League data through seven comprehensive tools.
- Search Players: Find player IDs by searching player names (fuzzy matching)
- Search Teams: Find team IDs by searching team names (fuzzy matching)
- Current Gameweek Status: Get current gameweek number, deadline, and completion status
- Player Statistics: Retrieve comprehensive stats for any FPL player
- Gameweek Fixtures: Get all fixtures for a specific gameweek
- Player Comparison: Compare statistics between multiple players
- Team Information: Get team details and current squad information
- Install dependencies:
npm install- Build the project:
npm run buildThe server is designed to be used with MCP clients. Configure your MCP client to use this server:
{
"mcpServers": {
"fpl-mcp-server": {
"command": "node",
"args": ["path/to/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}Run in development mode:
npm run devThe MCP Inspector provides an interactive interface for testing and debugging your server during development.
- Create an
mcp.config.jsonfile in the project root:
{
"mcpServers": {
"fpl-mcp-server": {
"command": "node",
"args": ["dist/index.js"]
}
}
}- Build your server:
npm run build- Run the inspector:
npx @modelcontextprotocol/inspector --config ./mcp.config.json --server fpl-mcp-server- Open the provided URL in your browser to test all available tools interactively
The server uses Winston for structured logging to stderr (to avoid interfering with MCP's stdio transport). Configure logging with environment variables:
# Set log level (debug, info, warn, error)
LOG_LEVEL=debug npm start
# Set environment mode (affects log formatting)
NODE_ENV=development npm startIn development mode, logs are colorized for better readability. All logs are written to stderr, ensuring the MCP protocol communication on stdout remains unaffected.
-
search_players: Search for players by name. Requires
query(string)- Returns up to 10 matching players with their IDs, teams, positions, and costs
- Use this FIRST before calling get_player_stats or compare_players
-
search_teams: Search for teams by name. Requires
query(string)- Returns matching teams with their IDs and short names
- Use this FIRST before calling get_team_info
-
get_current_gameweek: No parameters required
-
get_player_stats: Requires
playerId(1-1000)- Use search_players first to find the player ID
-
get_gameweek_fixtures: Requires
gameweek(1-38) -
compare_players: Requires
playerIdsarray (2-10 players)- Use search_players first to find player IDs
-
get_team_info: Requires
teamId(1-20)- Use search_teams first to find the team ID
The server includes comprehensive error handling for:
- Input validation errors
- FPL API failures
- Network connectivity issues
- Invalid player/team/gameweek IDs
All errors are returned in a consistent format with error codes and detailed messages.
Contributions are welcome! Please read our Contributing Guidelines and Code of Conduct before submitting PRs.
This project uses automated releases via Release Please. When you merge commits to main following Conventional Commits, a release PR is automatically created or updated. Merging that PR triggers a new GitHub release with automatically generated release notes.
See CHANGELOG.md for release history.
MIT - see LICENSE file for details.