Skip to main content
Glama
handlers.ts27.4 kB
import { z } from 'zod'; import { makeApiRequest } from './utils.js'; import { TeamKeySchema, YearSchema, EventKeySchema, TeamSchema, EventSchema, AwardSchema, MatchSchema, RankingSchema, AllianceSchema, DistrictPointsSchema, InsightsSchema, DistrictSchema, RobotSchema, MediaSchema, StatusSchema, EventOPRsSchema, TeamEventStatusSchema, DistrictRankingSchema, TeamSimpleSchema, EventSimpleSchema, MatchSimpleSchema, ZebraSchema, PredictionSchema, TeamHistorySchema, } from './schemas.js'; export async function handleToolCall( name: string, args: unknown, ): Promise<{ content: Array<{ type: string; text: string }>; isError?: boolean; }> { switch (name) { case 'get_team': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}`); const team = TeamSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(team, null, 2), }, ], }; } case 'get_team_events': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest(`/team/${team_key}/events/${year}`); const events = z.array(EventSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_team_awards': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest(`/team/${team_key}/awards/${year}`); const awards = z.array(AwardSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(awards, null, 2), }, ], }; } case 'get_team_matches': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest(`/team/${team_key}/matches/${year}`); const matches = z.array(MatchSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(matches, null, 2), }, ], }; } case 'get_events': { const { year } = z.object({ year: YearSchema }).parse(args); const data = await makeApiRequest(`/events/${year}`); const events = z.array(EventSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_event': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}`); const event = EventSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(event, null, 2), }, ], }; } case 'get_event_teams': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/teams`); const teams = z.array(TeamSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_event_rankings': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/rankings`); const rankings = RankingSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(rankings, null, 2), }, ], }; } case 'get_event_matches': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/matches`); const matches = z.array(MatchSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(matches, null, 2), }, ], }; } case 'get_event_alliances': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/alliances`); const alliances = z.array(AllianceSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(alliances, null, 2), }, ], }; } case 'get_event_insights': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/insights`); const insights = InsightsSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(insights, null, 2), }, ], }; } case 'get_event_district_points': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/district_points`); const districtPoints = DistrictPointsSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(districtPoints, null, 2), }, ], }; } case 'get_team_years_participated': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/years_participated`); const years = z.array(z.number()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(years, null, 2), }, ], }; } case 'get_team_districts': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/districts`); const districts = z.array(DistrictSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(districts, null, 2), }, ], }; } case 'get_team_robots': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/robots`); const robots = z.array(RobotSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(robots, null, 2), }, ], }; } case 'get_team_media': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest(`/team/${team_key}/media/${year}`); const media = z.array(MediaSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(media, null, 2), }, ], }; } case 'get_team_event_matches': { const { team_key, event_key } = z .object({ team_key: TeamKeySchema, event_key: EventKeySchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/event/${event_key}/matches`, ); const matches = z.array(MatchSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(matches, null, 2), }, ], }; } case 'get_teams': { const { page_num } = z .object({ page_num: z.number().min(0) }) .parse(args); const data = await makeApiRequest(`/teams/${page_num}`); const teams = z.array(TeamSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_status': { const data = await makeApiRequest('/status'); const status = StatusSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(status, null, 2), }, ], }; } case 'get_match': { const { match_key } = z.object({ match_key: z.string() }).parse(args); const data = await makeApiRequest(`/match/${match_key}`); const match = MatchSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(match, null, 2), }, ], }; } case 'get_event_oprs': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/oprs`); const oprs = EventOPRsSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(oprs, null, 2), }, ], }; } case 'get_event_awards': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/awards`); const awards = z.array(AwardSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(awards, null, 2), }, ], }; } case 'get_team_awards_all': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/awards`); const awards = z.array(AwardSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(awards, null, 2), }, ], }; } case 'get_team_events_all': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/events`); const events = z.array(EventSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_team_event_status': { const { team_key, event_key } = z .object({ team_key: TeamKeySchema, event_key: EventKeySchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/event/${event_key}/status`, ); const status = TeamEventStatusSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(status, null, 2), }, ], }; } case 'get_districts': { const { year } = z.object({ year: YearSchema }).parse(args); const data = await makeApiRequest(`/districts/${year}`); const districts = z.array(DistrictSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(districts, null, 2), }, ], }; } case 'get_district_rankings': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest(`/district/${district_key}/rankings`); const rankings = z.array(DistrictRankingSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(rankings, null, 2), }, ], }; } case 'get_teams_simple': { const { page_num } = z .object({ page_num: z.number().min(0) }) .parse(args); const data = await makeApiRequest(`/teams/${page_num}/simple`); const teams = z.array(TeamSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_teams_keys': { const { page_num } = z .object({ page_num: z.number().min(0) }) .parse(args); const data = await makeApiRequest(`/teams/${page_num}/keys`); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_teams_by_year': { const { year, page_num } = z .object({ year: YearSchema, page_num: z.number().min(0), }) .parse(args); const data = await makeApiRequest(`/teams/${year}/${page_num}`); const teams = z.array(TeamSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_teams_by_year_simple': { const { year, page_num } = z .object({ year: YearSchema, page_num: z.number().min(0), }) .parse(args); const data = await makeApiRequest(`/teams/${year}/${page_num}/simple`); const teams = z.array(TeamSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_teams_by_year_keys': { const { year, page_num } = z .object({ year: YearSchema, page_num: z.number().min(0), }) .parse(args); const data = await makeApiRequest(`/teams/${year}/${page_num}/keys`); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_team_simple': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/simple`); const team = TeamSimpleSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(team, null, 2), }, ], }; } case 'get_event_simple': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/simple`); const event = EventSimpleSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(event, null, 2), }, ], }; } case 'get_events_simple': { const { year } = z.object({ year: YearSchema }).parse(args); const data = await makeApiRequest(`/events/${year}/simple`); const events = z.array(EventSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_events_keys': { const { year } = z.object({ year: YearSchema }).parse(args); const data = await makeApiRequest(`/events/${year}/keys`); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_match_simple': { const { match_key } = z.object({ match_key: z.string() }).parse(args); const data = await makeApiRequest(`/match/${match_key}/simple`); const match = MatchSimpleSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(match, null, 2), }, ], }; } case 'get_team_events_simple': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/events/${year}/simple`, ); const events = z.array(EventSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_team_events_keys': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/events/${year}/keys`, ); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_team_event_awards': { const { team_key, event_key } = z .object({ team_key: TeamKeySchema, event_key: EventKeySchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/event/${event_key}/awards`, ); const awards = z.array(AwardSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(awards, null, 2), }, ], }; } case 'get_team_matches_simple': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/matches/${year}/simple`, ); const matches = z.array(MatchSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(matches, null, 2), }, ], }; } case 'get_team_matches_keys': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/matches/${year}/keys`, ); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_team_social_media': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/social_media`); const media = z.array(MediaSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(media, null, 2), }, ], }; } case 'get_team_media_by_tag': { const { team_key, media_tag } = z .object({ team_key: TeamKeySchema, media_tag: z.string(), }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/media/tag/${media_tag}`, ); const media = z.array(MediaSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(media, null, 2), }, ], }; } case 'get_team_media_by_tag_year': { const { team_key, media_tag, year } = z .object({ team_key: TeamKeySchema, media_tag: z.string(), year: YearSchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/media/tag/${media_tag}/${year}`, ); const media = z.array(MediaSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(media, null, 2), }, ], }; } case 'get_event_teams_simple': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/teams/simple`); const teams = z.array(TeamSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_event_teams_keys': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/teams/keys`); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_event_matches_simple': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/matches/simple`); const matches = z.array(MatchSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(matches, null, 2), }, ], }; } case 'get_event_matches_keys': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/matches/keys`); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_team_history': { const { team_key } = z.object({ team_key: TeamKeySchema }).parse(args); const data = await makeApiRequest(`/team/${team_key}/history`); const history = TeamHistorySchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(history, null, 2), }, ], }; } case 'get_team_event_statuses': { const { team_key, year } = z .object({ team_key: TeamKeySchema, year: YearSchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/events/${year}/statuses`, ); const statuses = z.record(z.string(), TeamEventStatusSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(statuses, null, 2), }, ], }; } case 'get_team_event_matches_simple': { const { team_key, event_key } = z .object({ team_key: TeamKeySchema, event_key: EventKeySchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/event/${event_key}/matches/simple`, ); const matches = z.array(MatchSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(matches, null, 2), }, ], }; } case 'get_team_event_matches_keys': { const { team_key, event_key } = z .object({ team_key: TeamKeySchema, event_key: EventKeySchema, }) .parse(args); const data = await makeApiRequest( `/team/${team_key}/event/${event_key}/matches/keys`, ); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_district_events': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest(`/district/${district_key}/events`); const events = z.array(EventSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_district_events_simple': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest( `/district/${district_key}/events/simple`, ); const events = z.array(EventSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(events, null, 2), }, ], }; } case 'get_district_events_keys': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest( `/district/${district_key}/events/keys`, ); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_district_teams': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest(`/district/${district_key}/teams`); const teams = z.array(TeamSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_district_teams_simple': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest( `/district/${district_key}/teams/simple`, ); const teams = z.array(TeamSimpleSchema).parse(data); return { content: [ { type: 'text', text: JSON.stringify(teams, null, 2), }, ], }; } case 'get_district_teams_keys': { const { district_key } = z .object({ district_key: z.string() }) .parse(args); const data = await makeApiRequest(`/district/${district_key}/teams/keys`); const keys = z.array(z.string()).parse(data); return { content: [ { type: 'text', text: JSON.stringify(keys, null, 2), }, ], }; } case 'get_match_zebra': { const { match_key } = z.object({ match_key: z.string() }).parse(args); const data = await makeApiRequest(`/match/${match_key}/zebra`); const zebra = ZebraSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(zebra, null, 2), }, ], }; } case 'get_event_predictions': { const { event_key } = z.object({ event_key: EventKeySchema }).parse(args); const data = await makeApiRequest(`/event/${event_key}/predictions`); const predictions = PredictionSchema.parse(data); return { content: [ { type: 'text', text: JSON.stringify(predictions, null, 2), }, ], }; } default: throw new Error(`Unknown tool: ${name}`); } }

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/withinfocus/tba'

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