plaier-mcp-server
Version:
MCP Server for Plaier Football API - Advanced football analytics and predictions
103 lines • 5.17 kB
JavaScript
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