UNPKG

plaier-mcp-server

Version:

MCP Server for Plaier Football API - Advanced football analytics and predictions

103 lines 5.17 kB
import { formatError, formatWarning } from '../utils/formatting.js'; export function createPositionTools(client) { return [ { name: "get_positions", description: "Get a list of all player positions available in the Plaier API with their IDs and position groups.", inputSchema: { type: "object", properties: {} } }, { name: "get_position_groups", description: "Get a list of all position groups with their contained positions.", inputSchema: { type: "object", properties: {} } } ]; } export async function handlePositionTool(toolName, args, client) { try { switch (toolName) { case "get_positions": { try { const positions = await client.getPositions(); console.error({ positions }); if (!positions || !Array.isArray(positions) || positions.length === 0) { return formatWarning("No position data available."); } // Filter by position group if provided let filteredPositions = positions; if (args.position_group && typeof args.position_group === 'string' && args.position_group.trim() !== '') { const positionGroup = args.position_group.toLowerCase().trim(); filteredPositions = filteredPositions.filter(p => p.position_group.toLowerCase().includes(positionGroup)); if (filteredPositions.length === 0) { return formatWarning(`No positions found in position group "${args.position_group}".`); } } // Group positions by position group const groupedPositions = {}; filteredPositions.forEach(position => { if (!groupedPositions[position.position_group]) { groupedPositions[position.position_group] = []; } groupedPositions[position.position_group].push(position); }); // Format the result let result = `**Player Positions${args.position_group ? ' in ' + args.position_group : ''} (${filteredPositions.length} total):**\n\n`; Object.entries(groupedPositions).forEach(([group, positions]) => { result += `**${group}:**\n\n`; result += `| ID | Position | Position Group |\n`; result += `|----|----------|---------------|\n`; positions.forEach(position => { result += `| ${position.position_id} | ${position.position} | ${position.position_group} |\n`; }); result += `\n`; }); // Add help text result += `**Tip:** You can use these position IDs when filtering players with the rank_players tool.`; return result; } catch (error) { return formatError(`Error retrieving positions: ${error}`); } } case "get_position_groups": { try { const positionGroups = await client.getPositionGroups(); console.error({ positionGroups }); if (!positionGroups || !Array.isArray(positionGroups) || positionGroups.length === 0) { return formatWarning("No position group data available."); } // Format the result let result = `**Position Groups (${positionGroups.length} total):**\n\n`; positionGroups.forEach((group) => { result += `**${group.position_group} (ID: ${group.position_group_id}):**\n`; if (group.positions && group.positions.length > 0) { result += `Positions: ${group.positions.map(position => `${position.position} (ID: ${position.position_id})`).join(', ')}\n`; } else { result += `No positions defined for this group.\n`; } result += `\n`; }); // Add help text result += `**Tip:** You can use these position group IDs when filtering players with the rank_players tool.`; return result; } catch (error) { return formatError(`Error retrieving position groups: ${error}`); } } default: throw new Error(`Unknown position tool: ${toolName}`); } } catch (error) { return formatError(`Tool execution failed: ${error}`); } } //# sourceMappingURL=position-tools.js.map