Robolyst Robolyst
← FTC reference

FTC Data over MCP

Robolyst answers over the Model Context Protocol, so an assistant or a script can ask for a team, an event, a bracket or a metric in one call. There are two servers: the FIRST Tech Challenge archive, which needs no account, and a team's own workspace, which needs OAuth.

Public archive · https://robolyst.org/mcp/ftc

Team workspace · https://robolyst.org/mcp

There is no REST API. The paths under /api serve this site's own pages, are disallowed in robots.txt and carry no compatibility promise.

Connecting one

The URL is the whole configuration. Both servers speak MCP over HTTP with no session handshake, so any client that accepts a remote server address can use them: paste the address in, and the tool list arrives on the first call.

The archive server is open. No account, no token, no rate-limit key. It also answers cross-origin, which is what lets a browser-based client reach it.

The team server walks an OAuth flow. A client discovers the authorization server from the address, registers itself, and sends you here to sign in and approve the connection. From then on every call runs as your member account, with the permissions your role already has in the app, and the team needs AI Access switched on in its module settings.

A tool that changes something is named create_, update_, log_, request_ or draft_. Every one of those writes is recorded in an audit log the team can read, reads are not, and a locked team refuses writes outright.

Public archive server

22 tools

https://robolyst.org/mcp/ftc · Most tools take an event code; use search or search_events to find one. A season argument defaults to the current season and is named by its starting year.

ToolTakesReturns
list_seasons no argumentsEvery season on record, with its game name and its team, event and match totals.
search query, limit?Matching teams, events and locations. The first call to make when all you have is a name.
find_location queryCoordinates for a place name, from the geocoded places already in the archive.
get_team teamName, location, rookie year, career win-loss record, and the seasons they registered for or played.
get_team_season team, season?Every event they played that season, their matches, their metrics and their advancement points.
get_team_matches team, season?Every match a team has played, newest event first. Omit the season for a whole career.
get_team_awards teamEvery award a team has won, across every season.
compare_teams teams (up to 24), season?Metrics side by side plus season averages. This is the alliance-selection call.
search_events query?, stateProv?, season?, limit?Events in a season, with championship divisions collapsed under their parent.
get_event code, season?Dates, location, event type, divisions if it has any, and the teams attending.
get_event_rankings code, season?Qualification standings with ranking points and the computed metrics for each team.
get_event_matches code, season?, team?Every match at an event, optionally only the ones a given team played.
get_event_awards code, season?Every award handed out at the event, with the winning team.
get_event_advancement code, season?Advancement points as FIRST publishes them, the four components, who advanced and to what. 2025-26 onward.
get_playoff_bracket code, season?The double-elimination bracket: every series, what fed into it, and who won.
season_leaderboard season?, limit?The best teams of a season by average OPRc. Two events are needed to appear once a season is far enough along.
season_high_scores season?, limit?The highest penalty-free alliance scores of one season, or the record from every season.
award_catalog no argumentsEvery award FIRST has issued, folded across seasons, with what it is for and how often it has been won.
award_winners slug, season?, limit?Who has won one particular award, newest first.
teams_nearby lat, lon, radiusKm?, limit?Teams within a radius of a point, up to 500 km out.
region_teams stateProv, season?Every team registered in a state or province.
explain_metric metric?What a metric means, how it is computed, and the mistake people make reading it. Omit the argument to list them all.

Team workspace server

17 tools

https://robolyst.org/mcp · Scoped to the one team the signed-in member belongs to. Money is in whole cents. Call whoami first when a tool refuses: it says which permissions and features the account actually has.

ToolTakesReturns
whoami no argumentsThe connected account, its team, its role, and exactly which permissions and features it has.
list_roster no argumentsEveryone on the team with their role, so a name can be resolved before work is assigned.
list_tasks status?, open?, mine?, dueBefore?, limit?The team board, filtered.
get_task idOne task in full, with what it depends on and what depends on it.
list_schedule from?, to?, limit?Meetings, competitions, outreach and scrimmages. Defaults to the next 30 days.
list_checklists limit?Checklist templates the team owns, and open runs with their unchecked counts.
search_documentation query?, season?, subsystem?, limit?Engineering notebook entries as flattened text.
get_documentation_entry idOne notebook entry in full, as plain text.
list_announcements limit?Team announcements, newest first.
finance_summary season?Each budget category with what was allocated, spent and left. Cents throughout.
list_orders status?, mine?, season?, limit?Part and order requests. This answers "did we order it yet".
list_expenses season?, mine?, limit?Logged spending for a season, newest first.
create_task writestitle, plus optional description, status, dates and assigneesThe task it created. Assigned to nobody unless asked.
update_task_status writesid, statusThe task on its new status.
log_expense writesdescription, amountCents, vendor?, category?, spentAt?The expense. Receipt rules, approval thresholds and member limits are enforced, and the call fails when one is broken.
request_order writestitle, items, neededBy?, priority?, notes?The request. Required links, budget categories, allowed vendors and needed-by dates are all enforced.
draft_announcement writestitle, body, pinned?An unpublished draft. Nothing is ever sent from here.

What the archive numbers exclude

  • Scores are penalty-free. A foul an alliance commits is awarded to its opponent, so a raw final overstates what the alliance earned.
  • OPR-style metrics are fit per event, over that event's qualification matches only. They are meaningful relative to the teams who were there, and a value from one event does not transfer to another.
  • Remote events are excluded from every metric. That format pits one team against an empty alliance, so a contribution cannot be solved.
  • Advancement points exist from the 2025-26 season on, because that is when FIRST started publishing them.

Everything else a model can read

  • /llms.txt · what this site is, its URL patterns and its data caveats, in one file.
  • Glossary · every term these tools return, defined in a sentence or two.
  • Scouting metrics · the formula behind each computed number, and how the predictions score.
  • FTC reference · the URL shape of every record the archive holds.
  • /sitemap.xml · the sitemap index.