FTC Toolchain
FTC Toolchain is an MCP server that enables AI agents to support the full FIRST Tech Challenge (FTC) robot development cycle — from accessing reference materials and scaffolding code to building, deploying, and debugging on real robots.
Knowledge & Reference
Search official FTC SDK samples and Pedro Pathing documentation, retrieve full sample source code, check and update local reference library status.
Project Management
Inspect project readiness, run pre-competition hygiene audits (duplicate names, stale APKs, uncommitted changes, TODOs), create new FTC SDK projects, list OpModes and scaffolded files, and manage/restore automatic pre-overwrite backups.
Code Generation & Scaffolding
Scaffold OpModes from templates (
linear-teleop,mecanum-teleop,linear-auto,pedro-auto,pedro-teleop), install the Pedro Pathing library, generate subsystem classes with hardware fields and action methods, create TeleOps with a separate controller bindings file (hold/press/toggle, slow mode, automation stubs), and scaffold stateless math/helper utility classes.
Hardware Management
Scan all hardware config names to flag duplicates/collisions, and run pre-flight validation for incompatible device types and unresolved constants.
Build & Deployment
Compile TeamCode with Gradle, install APKs via ADB, and use a combined safe build-then-deploy. Supports direct USB deployment or automated Wi-Fi switching (builds while online, switches to robot network, installs APK, restarts Robot Controller, restores original Wi-Fi).
Robot Connection & Debugging
List and connect to ADB devices over USB or Wi-Fi, inspect robot status (identity, Android version, RC app version, battery, storage), restart the Robot Controller app, and read or clear robot logcat for debugging.
Provides tools for developing, building, and deploying FTC (FIRST Tech Challenge) robot code to REV Control Hub, including access to official SDK samples and Pedro Pathing documentation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FTC Toolchainlist the FTC sample OpModes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FTC Toolchain
An MCP server that lets AI agents (Codex, Claude Code, Claude Desktop, or any MCP client) work on FTC robots: search official SDK samples and Pedro Pathing docs, scaffold OpModes, build TeamCode with Gradle, deploy to a REV Control Hub over WiFi, and read robot logs — the full code → robot → debug loop.
Install
Requirements: Node 18+, git, adb (Android platform-tools), and the Android SDK + JDK 17+ if you want to build (an Android Studio install provides both).
Codex
# Register the server (available in every project)
codex mcp add ftc-toolchain -- npx -y ftc-toolchain
# Fetch the reference material the knowledge tools read (one time)
npx ftc-toolchain setupStart a new Codex task and ask it to “list the FTC sample OpModes” to confirm the server is live.
Claude Code
# Register the server (available in every project)
claude mcp add ftc-toolchain -- npx -y ftc-toolchain
# Fetch the reference material the knowledge tools read (one time)
npx ftc-toolchain setupStart a new Claude session and ask it to “list the FTC sample OpModes” to confirm it is live.
Claude Desktop / other MCP clients
{
"mcpServers": {
"ftc-toolchain": {
"command": "npx",
"args": ["-y", "ftc-toolchain"],
"env": { "FTC_TOOLCHAIN_PROJECT_DIR": "/path/to/your/FtcRobotController" }
}
}
}Then run npx ftc-toolchain setup once so the knowledge tools have their reference data.
From source (development)
git clone https://github.com/Sanjit-K/ftc-toolchain && cd ftc-toolchain
npm install && npm run build
npm run setup # clones FTC samples + Pedro docs into refs/Opening this directory in Claude Code picks up .mcp.json automatically.
Reference material: the knowledge tools (
list_samples,search_docs, …) read the official FtcRobotController samples and Pedro Pathing docs.ftc-toolchain setupclones them into~/.ftc-toolchain/refs(override withFTC_TOOLCHAIN_REFS). The project/robot tools work without this step.
Related MCP server: ftc-knowledge-server
Choose how to deploy
Use deploy_robot as the normal high-level deployment tool. It supports two connection methods.
Option 1: direct USB-C
Use this when the programming computer is near the robot. Connect the Control Hub or Robot Controller phone by USB, approve any device prompt, and verify it appears in adb_devices. Then ask:
deploy_robot(connection: "usb")ftc-toolchain builds a fresh APK, installs it on the attached ADB device, and restarts Robot Controller. If more than one Android device is attached, pass the serial shown by adb_devices. Internet stays connected throughout the deployment.
Option 2: automatic Wi-Fi switching
No phone tether or extra router is required. ftc-toolchain can build while the computer is on internet Wi-Fi, return a job ID to Codex or Claude, then run the network-sensitive part as a local background job:
Switch to the saved Control Hub Wi-Fi.
Connect to
192.168.43.1:5555with ADB.Install the freshly built APK and restart Robot Controller.
Restore the original internet Wi-Fi even when deployment fails.
Let the AI read the saved result after it reconnects.
Before the first automatic deployment, manually join the Control Hub once so macOS or Windows saves its SSID and password. Return to internet Wi-Fi, then ask the AI to call:
deploy_robot(connection: "wifi-switch", robotSsid: "YOUR-CONTROL-HUB-SSID")The tool builds before disconnecting and waits 10 seconds before changing networks, giving the MCP response time to reach the AI. The AI connection may pause for roughly 20–60 seconds. Once it returns, call wifi_deploy_status with the returned job ID—or omit the ID to read the latest job.
Use dryRun: true to preview every path and network involved without building, switching Wi-Fi, or deploying. Both macOS and Windows are supported. On Windows, the Control Hub must appear as a saved netsh wlan profile. On macOS, it must be a remembered Wi-Fi network available to networksetup.
This is for development and pits only. Disconnect programming computers before a match and follow the current FTC competition manual.
Tools
Start a new session with inspect_project. It reports which FTC project is selected, Git changes, OpModes, documented subsystems, Pedro readiness, hardware-name collisions, the latest APK, reference data, and Android SDK setup—plus the next concrete actions.
Knowledge
Tool | What it does |
| List the 66 official FTC sample OpModes (drive, sensors, AprilTag vision, ...) |
| Full Java source of a sample |
| Keyword search across Pedro Pathing docs + SDK samples |
| Fetch a Pedro Pathing doc page as markdown |
| Show local reference counts, commits, branches, dates, and cache location |
| Fast-forward clean FTC SDK and Pedro documentation checkouts |
Project
Tool | What it does |
| One-shot readiness check for project path, SDK, Git, OpModes, subsystem docs, Pedro, hardware names, APK, references, and Android tooling |
| Read-only pre-competition audit for duplicate names, orphaned files, broken docs, stale builds, TODOs, and Git state |
| Clone a fresh FtcRobotController SDK project |
| List |
| Inventory files scaffolded by ftc-toolchain, grouped by artifact type |
| Browse project-scoped recovery snapshots made before overwrites |
| Preview or restore selected backup files; confirmed restores back up current versions first |
| Scaffold an OpMode: |
| Add Pedro Pathing to a project (Gradle deps, compileSdk 34, |
Subsystems — the recommended way to structure robot code: one plain class per mechanism, with a living markdown knowledge base the LLM reads and updates.
All code generators support dryRun: true. This performs the same validation and returns the exact target paths and generated source without touching the filesystem. Use it to review a proposed OpMode, subsystem, calculation helper, or TeleOp before creation or overwrite.
When overwrite: true replaces an existing generated target, ftc-toolchain first copies the old version to ~/.ftc-toolchain/backups (or $FTC_TOOLCHAIN_HOME/backups). The backup stays outside the robot repository. list_generated_files inventories marked scaffolds, but the marker only records origin—team edits are expected and must be preserved.
Use list_backups to find a snapshot and restore_backup to inspect it. Restore is preview-only unless confirm: true; before a confirmed rollback, the files currently in the project are backed up again, so recovery is reversible.
Tool | What it does |
| Scaffold a subsystem class (hardcoded config-name constants, action methods, |
| Write/update a subsystem's knowledge-base doc (functions, tuning, config names, quirks) |
| Read the robot's architecture from |
| Generate a TeleOp plus a separate |
| Scaffold a stateless helper class (e.g. live trajectory math) |
| Aggregate every config name across subsystems and flag duplicates/typos vs. the Driver Station config |
| Pre-flight config check for incompatible device types, shared names, and unresolved constants |
Robot
Tool | What it does |
| Preferred deployment tool: choose direct USB for an attached ADB device or automatic Wi-Fi switching for a saved Control Hub network |
| Lower-level Wi-Fi path: build while online, then launch a local macOS/Windows job that switches networks, deploys, and restores the original Wi-Fi |
| Read the latest or selected background deployment state and its complete switch/deploy/recovery timeline after internet reconnects |
| Find / connect to the robot (Control Hub default: |
| Read device identity, Android/RC app versions, battery service, and storage health |
| Restart the RC app without rebuilding or reinstalling code |
| Gradle build with optional clean/timeout/stacktrace controls, contextual errors, and verified APK metadata |
| Install the APK and restart the Robot Controller app |
| Build first (optionally clean), verify the APK, then install only that successful artifact |
| Clear logcat before reproducing a problem for a clean debugging capture |
| Filtered logcat from the robot (crashes, OpMode exceptions, SDK events) |
Typical agent session
search_docs("mecanum field centric")/get_sample(...)→ find reference codecreate_opmode(className: "CompTeleOp", template: "mecanum-teleop")deploy_robot(connection: "usb")nearby, ordeploy_robot(connection: "wifi-switch", robotSsid: "YOUR-CONTROL-HUB-SSID")wirelesslyFix any compiler errors returned before a background Wi-Fi switch begins
Driver tests the OpMode → reconnect with
adb_connectwhen needed, then userobot_logs(filter: "CompTeleOp")
Subsystem workflow
The intended way to build a robot: describe each mechanism to the LLM and let it scaffold subsystems + maintain their docs.
"We have a rolling intake — one motor, spins in, spits out." →
create_subsystem(name: "RollingIntake", group: "intake", motors: [{name: "intakeMotor", config: "intake"}], methods: ["spinIn", "spitOut"])→ writesRollingIntake.java,TestRollingIntake.java(bench test), anddocs/subsystems/RollingIntake.md.Fill in the method bodies (the LLM can, using
get_sample/search_docsfor reference).document_subsystemto record tuning values, sensor thresholds, and quirks as you dial them in.hardware_manifestbefore a competition to confirm every config name in code matches the Driver Station configuration — and that two subsystems aren't fighting over one name.A future session runs
list_subsystems/get_subsystemand instantly knows the robot.
Sub-subsystems live under a shared group, e.g. group: "shooting.turret" → teamcode/shooting/turret/. Calculation-heavy logic goes in create_calculation helpers so it stays out of the subsystem and OpMode files.
Subsystem composition & tuning. A subsystem can depend on other subsystems — dependencies: [{type: "ColorSensor"}, {type: "IntakeFlap"}] injects them into the constructor (config names stay hardcoded, so the constructor only receives siblings). Declare constants (PID gains, servo positions, RPM setpoints) and the tunable ones become live-editable dashboard fields: the class is annotated @Configurable (Panels, from install_pedro) with public static fields, so you tune them while the robot runs. Pass dashboard: "ftcdashboard" for FTC Dashboard's @Config, or "none".
Building a TeleOp
Describe how driving should feel and what should be automated; create_teleop writes two files:
<Name>Controls.java— nothing but the bindings (intakeIn→driver.right_bumper). A driver can open this and remap buttons without reading any robot logic or touching an LLM.<Name>.java— the TeleOp: constructs the subsystems, wires the drivetrain, applies each binding, and stubs out the automations you described.
"Mecanum drive, hold right bumper to intake / left bumper to outtake, operator Y toggles the shooter, left trigger is slow mode, and auto-sort balls by color." becomes one create_teleop call. Bindings are hold (while held), press (rising edge), or toggle. Competing actions on one mechanism (intake in vs. out) share an exclusiveGroup so they compile to a single if/else-if/else with one idle call — no fighting over the motor. Automations (multi-step or sensor-driven) come out as clearly-marked stub methods to fill in.
Configuration
Env var | Meaning |
| Default FTC SDK project used by project/robot tools |
| Default FtcRobotController project location |
| Location of the reference clones (default: |
| Toolchain cache, backups, jobs, and workspace root (default: |
| Explicit path to |
Notes
Pedro Pathing constants must be tuned.
install_pedroscaffoldsConstants.javawith placeholder values for a mecanum drivetrain + goBILDA Pinpoint localizer; run the tuning OpModes (seesearch_docs "tuning") before trusting any path.The Control Hub's WiFi password and SSID are shown on the Driver Station under Program & Manage.
Deploying replaces the Robot Controller app's code but keeps robot configurations. If
adb installreports a signature mismatch, oneadb uninstall com.qualcomm.ftcrobotcontrolleris needed (this clears configs).
Development
npm test # build + MCP smoke test (no robot needed)
npx ftc-toolchain doctor [projectPath] # diagnose local project/tooling readiness
npx ftc-toolchain setup --update # refresh cached FTC samples and Pedro docs
node scripts/test-build.mjs [projectPath] # real Gradle build through the build tool
node scripts/test-pedro-build.mjs [projectPath] # install_pedro + all templates + full build
node scripts/test-subsystem-build.mjs [projectPath] # scaffold intake/spindexer/turret subsystems + a full TeleOp + buildWebsite and docs
The open-source marketing site and documentation live in website/. It is a Next.js/vinext app with the landing page at / and quickstart documentation at /docs.
cd website
npm install
npm run devThe website content brief is versioned in website.md.
Contributing and community
Contributions from FTC students, mentors, alumni, and developers are welcome. Read CONTRIBUTING.md before opening a pull request, use the repository's guided issue forms for bugs and proposals, and see SUPPORT.md for setup help. Robot-facing pull requests must follow the real robot test policy before merge; automated or mock-only testing is not sufficient.
Please follow the Code of Conduct. Report suspected vulnerabilities privately according to SECURITY.md, never in a public issue.
Available Tools
35 toolsadb_connectConnect to robot over WiFiA
Connect adb to a REV Control Hub or RC phone over WiFi. Default target is 192.168.43.1:5555 (the Control Hub when the laptop is joined to the robot's WiFi network).
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Device IP (default 192.168.43.1) | |
| port | No | Port (default 5555) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must carry behavioral burden. It discloses WiFi connectivity and default address, but does not specify idempotency, timeout handling, or success/failure behavior. Basic transparency for a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, no unnecessary words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but tool is simple (connection). Description mentions default target. Lacks mention of return value or status, but acceptable given low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions. Description adds default values (192.168.43.1 and 5555) not in schema, enhancing understanding beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description specifically states 'Connect adb to a REV Control Hub or RC phone over WiFi', providing a clear verb and resource. It distinguishes from sibling tool 'adb_devices' which lists devices, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description includes default target and context (Control Hub when on robot WiFi). No explicit when-not-to-use or alternatives, but the context is clear enough for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adb_devicesList connected robot devicesA
List Android devices visible to adb (Control Hub / Robot Controller phone).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description states it lists devices, but does not disclose if the operation is read-only, requires a device to be connected, or any failure modes. For a simple list, more context (e.g., it does not alter state) would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and a simple action, the description fully captures what the tool does. The parenthetical explanation adds useful context about the device types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline is 4. The description adds no parameter information, but none is needed since the schema is empty and coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and clearly identifies the resource 'Android devices visible to adb (Control Hub / Robot Controller phone)'. It distinguishes from sibling tools by clearly specifying the action of listing devices, whereas siblings involve connecting, building, deploying, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like adb_connect. There is no mention of prerequisites, context (e.g., when adb is available), or scenarios where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buildBuild robot codeA
Compile the TeamCode module with Gradle (assembleDebug). Returns the APK path on success, or the extracted compiler errors on failure. First build can take several minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| clean | No | Run :TeamCode:clean before assembleDebug | |
| stacktrace | No | Include Gradle --stacktrace and return a longer failure tail | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. | |
| timeoutSeconds | No | Build timeout in seconds (default 600) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full weight. It discloses the build process, success/failure outputs (APK path or errors), and a timing caveat. However, it does not mention side effects like overwriting previous builds or network requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded with the main action, then details on outputs and timing. Ideal length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no output schema, the description explains the key output (APK path or errors) and a caveat about first build time. Lacks details on default behavior for parameters like 'projectPath', but defaults are implied in schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds no extra meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Compile the TeamCode module with Gradle') and the specific resource ('TeamCode module'). It distinguishes from sibling tools like 'build_and_deploy' and 'deploy' by focusing only on compilation without deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It mentions the first build being slow but does not specify scenarios where building without deploying is preferred, nor does it suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_and_deployBuild and deploy fresh robot codeA
Safest competition-day deployment path: build TeamCode first and only install the APK if that build succeeds, then restart the Robot Controller app. This prevents accidentally deploying a stale APK.
| Name | Required | Description | Default |
|---|---|---|---|
| clean | No | Run a clean build before deployment | |
| serial | No | adb device serial; required when multiple devices are connected | |
| stacktrace | No | Return extended Gradle failure context | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. | |
| timeoutSeconds | No | Build timeout in seconds (default 600) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully informs about the tool's behavior: conditional build-then-deploy and app restart. It is transparent about the conditional sequence, though it could additionally explain what happens on build failure or side effects like potential disconnection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, directly addressing the purpose and key behavior without any unnecessary words. It is front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main workflow but omits the return value or output format. Given the tool's moderate complexity and no output schema, mentioning whether it returns success/failure or logs would improve completeness. However, the provided details are largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters are fully described in the input schema (100% coverage). The tool description does not add extra parameter meaning, which is acceptable given schema completeness. The schema descriptions are clear and sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it builds TeamCode first, conditionally installs the APK only on success, and restarts the Robot Controller app. This distinguishes it from sibling tools like 'build' (build only) and 'deploy' (deploy only) by emphasizing the safe competition-day deployment sequence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends this as the 'safest competition-day deployment path', implying optimal use during high-stakes events. It does not explicitly state when not to use (e.g., for quick iterative testing) or contrast with sibling tools in detail, but the context is clear enough for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_project_hygieneCheck FTC project hygieneA
Read-only pre-competition audit for duplicate Driver Station names, orphaned generated file pairs, broken subsystem-doc links, incompatible hardware types, stale or missing APKs, disabled OpModes, TODOs, and uncommitted Git changes.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only' and enumerates all checks performed, providing good transparency. However, it does not describe the output format or any potential side effects beyond read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads 'Read-only pre-competition audit' and lists all checks compactly without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (many checks) and lack of output schema, the description covers a wide range of aspects but could hint at the output format or how results are presented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the tool description adds no new parameter information beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a read-only pre-competition audit and lists numerous specific checks (duplicate names, broken links, etc.), making its purpose specific and distinguishable from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before competition via 'pre-competition audit' and lists specific checks, but does not explicitly contrast with sibling tools or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_robot_logsClear robot logsA
Clear the connected robot's logcat buffer before reproducing a crash or bad behavior. Call robot_logs afterward for a clean signal.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | adb device serial; required when multiple devices are connected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the destructive action (clearing the buffer) and implies it is irreversible for old logs, which is sufficient for this simple operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the action and provides a follow-up step, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple one-parameter tool, the description adequately covers the purpose and workflow. It could mention the destructive nature more explicitly, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the parameter serial is described in the schema). The description adds no additional meaning beyond what the schema provides, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies that the tool clears the robot's logcat buffer, which is a specific verb and resource. It differentiates from sibling tools like robot_logs by stating the purpose is to prepare for a clean signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: use before reproducing a crash or bad behavior, and follow up with robot_logs. It does not include explicit exclusions, but the guidance is clear enough for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_calculationCreate a calculation helperA
Scaffold a stateless static-only helper class (e.g. live trajectory math) that any OpMode or subsystem can call. Keeps math out of subsystem/OpMode files.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Class name, e.g. TrajectorySolver | |
| group | No | Package group (default: util) | |
| dryRun | No | Validate and return the generated Java without writing any files | |
| overwrite | No | ||
| description | No | ||
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries full burden. It only says 'scaffold a stateless static-only helper class' but doesn't disclose side effects like file creation, overwrite behavior, or prerequisites (e.g., existing project). The dryRun and overwrite parameters hint at behavior but description ignores them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, highly efficient. Every word adds value—'stateless static-only' clarifies constraints, 'live trajectory math' gives example. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 6 parameters, no output schema, no annotations. Description omits how the scaffolding works (e.g., file creation, package structure), doesn't explain parameter roles, and provides no return value info. Incomplete for an agent to use reliably without external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 67% of parameters with descriptions (name, group, dryRun, projectPath). Description adds no extra meaning to parameters beyond what schema provides. Baseline is 3 due to moderate schema coverage, but description does not compensate for the missing 33%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool scaffolds a stateless static-only helper class for calculations, distinguishing it from sibling tools like create_opmode and create_subsystem. Specific verb 'scaffold' and phrase 'keeps math out of subsystem/OpMode files' make purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: when needing a helper class for stateless math callable by OpModes/subsystems. Sibling tools provide contrast (e.g., create_opmode for OpModes, create_subsystem for subsystems), so context is clear, but no explicit when-not or alternative mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_opmodeCreate OpMode from templateA
Scaffold a new Java OpMode in TeamCode. Templates:
linear-teleop: Minimal LinearOpMode TeleOp skeleton (hardware mapping left to you)
mecanum-teleop: Complete 4-motor mecanum/omni TeleOp with POV drive (based on BasicOmniOpMode). Hardware names: left_front_drive, left_back_drive, right_front_drive, right_back_drive
linear-auto: Minimal LinearOpMode Autonomous skeleton with elapsed-time guard
pedro-auto: Pedro Pathing autonomous using a finite state machine over PathChains. Requires install_pedro first; tune poses for your season
pedro-teleop: Pedro Pathing TeleOp: manual mecanum drive with on-demand automated path following and slow mode. Requires install_pedro first
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | OpMode group on the Driver Station (default: Generated) | |
| dryRun | No | Validate and return the generated Java without writing any files | |
| template | Yes | ||
| className | Yes | Java class name, e.g. BlueLeftAuto | |
| overwrite | No | ||
| opModeName | No | Display name on the Driver Station (default: class name) | |
| packageName | No | Java package (default: org.firstinspires.ftc.teamcode) | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that certain templates have prerequisites (install_pedro) and mentions hardware naming for mecanum. However, it does not describe side effects (e.g., file creation beyond writing), error handling, or permissions. The description is partially transparent but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a single-sentence purpose followed by a bullet list of templates. Every sentence is informative, and the structure front-loads the main action. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no output schema, the description could better explain return values (e.g., what dryRun returns) or default behavior for parameters like 'projectPath'. The template details are thorough, but overall completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already documents most parameters. The description adds significant value by explaining the 'template' enum with detailed usage notes (e.g., hardware names for mecanum, dependency for Pedro). For the other parameters, it adds little beyond the schema, but the template coverage is strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'scaffold' and names the resource 'Java OpMode'. It clearly distinguishes between five templates, each with a distinct purpose (e.g., 'mecanum-teleop' is for mecanum drive TeleOp). This differentiates from sibling tools like create_teleop or create_subsystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for each template, such as 'requires install_pedro first' for Pedro-based templates. It implies when to use each, but does not explicitly state when not to use this tool or compare to alternatives like create_teleop. The context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate FTC SDK projectA
Clone a fresh FtcRobotController SDK project (the standard FTC season starting point) into the workspace. Skip this if the team already has a project — pass its path to the other tools instead.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | No | Destination directory (default: workspace/FtcRobotController) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral context. It discloses that it clones a fresh project but does not specify behavior if destination already exists or whether it overwrites. The hint to skip if already has a project partially addresses this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise and front-loaded with the main action. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is fairly complete. It covers purpose and usage, though it could mention what happens after cloning (e.g., success indication).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'dest' having a clear description and default. The tool description does not add extra meaning beyond the schema, but the schema is sufficient. Baseline for high coverage is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it clones a fresh FtcRobotController SDK project into the workspace. It distinguishes from siblings by advising to skip if a project already exists and pass its path to other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use (need a fresh project) and when not to (team already has a project). It mentions alternatives by referencing 'other tools' but does not name specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_subsystemCreate a subsystemA
Scaffold a plain FTC subsystem class (constructor takes HardwareMap; hardware fields, config-name constants, action methods, and a safety stop()). Also writes a bench-test TeleOp and a markdown doc in docs/. This is the recommended way to structure robot code — one class per mechanism (intake, spindexer, turret...).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Subsystem class name, e.g. RollingIntake | |
| group | No | Lowercase package group / folder, e.g. 'shooting' -> teamcode.shooting (default: subsystems) | |
| dryRun | No | Validate and preview all generated files without writing them | |
| motors | No | ||
| servos | No | ||
| methods | No | Action method names to stub, e.g. ['spinIn','spitOut'] | |
| sensors | No | ||
| crServos | No | ||
| constants | No | Named constants (PID gains, servo positions, RPM setpoints). Tunable ones are live-editable while the robot runs. | |
| dashboard | No | Live-tuning system for tunable constants (default: panels, matching install_pedro's Panels) | |
| overwrite | No | ||
| testOpMode | No | Also generate a bench-test TeleOp (default true) | |
| description | No | ||
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. | |
| dependencies | No | Other subsystems this one needs, injected into the constructor (must already exist) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden. It mentions file creation but does not disclose overwrite behavior, error handling, or prerequisites like project path. Basic disclosure is present but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first explains action and outputs, second gives recommendation. No fluff, front-loaded, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters and complexity, the description is brief. It does not explain how to use after creation or prerequisites like project existence. Adequate for selection but incomplete for full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60% (moderate). The description adds no parameter-level explanations, relying entirely on schema. Since it does not compensate for uncovered parameters, score is low.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Scaffold a plain FTC subsystem class') and the resource (subsystem class, bench-test TeleOp, markdown doc). It distinguishes from siblings like create_opmode and create_teleop by specifying subsystem scaffolding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context: 'This is the recommended way to structure robot code — one class per mechanism.' It implies when to use (for individual mechanisms) but does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_teleopCreate a TeleOp with a separate bindings fileA
Generate a TeleOp OpMode PLUS a separate Controls.java that holds only the controller bindings, so a driver can remap buttons without touching robot logic or an LLM. Describe the drivetrain, which subsystems to use, button actions (hold/press/toggle → subsystem calls), an optional slow mode, and named automations (multi-step or sensor-driven behaviors, which are scaffolded as stub methods to fill in).
| Name | Required | Description | Default |
|---|---|---|---|
| drive | No | Drivetrain wiring (default: mecanum). pedro* requires install_pedro. | |
| group | No | OpMode group / package group (default: Competition) | |
| dryRun | No | Validate and preview the TeleOp and bindings files without writing them | |
| actions | No | ||
| slowMode | No | ||
| className | Yes | TeleOp class name, e.g. CompTeleOp | |
| overwrite | No | ||
| opModeName | No | Driver Station display name (default: class name) | |
| subsystems | No | Subsystem class names to construct (must already exist) | |
| automations | No | ||
| packageName | No | ||
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions file generation, use of existing subsystems, dry run, and stub creation. However, it omits details on overwrite behavior, failure modes, or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that efficiently conveys the tool's purpose and usage. It could be slightly more structured, but it is concise without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 12 parameters and nested objects, the description provides a high-level overview but misses edge cases like overwrite behavior and validation details. It does not cover all behavioral aspects adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 58%, so the description adds some context but does not significantly enhance parameter understanding beyond the schema. It lists aspects to describe but lacks elaboration on individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool generates a TeleOp OpMode plus a separate bindings file, distinguishing it from sibling tools like create_opmode. It specifies the output files and their purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (to create a TeleOp with separate bindings for driver remapping) and what to describe (drivetrain, subsystems, actions, etc.). It does not explicitly list when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployDeploy code to robotA
Install the built TeamCode APK on the connected robot (adb install) and restart the Robot Controller app. Run build first, and adb_connect/adb_devices to make sure a device is attached.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | adb device serial if multiple devices are connected | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description fully discloses the tool's actions (adb install, restart app) and requisite conditions, making behavior transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Action is front-loaded: 'Install the built TeamCode APK...'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently covers prerequisites and actions for a deploy tool, fully answering what the agent needs to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage so baseline is 3. Description adds value by explaining default for projectPath (env var or workspace clone), which goes beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool installs the built TeamCode APK and restarts the Robot Controller app. It distinguishes from siblings like build_and_deploy by explicitly requiring a prior build step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to 'Run build first' and 'adb_connect/adb_devices to make sure a device is attached', providing clear when-to-use and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_robotDeploy by USB or automatic Wi-FiA
Preferred high-level deployment entry point. With connection usb, build TeamCode and install it on a Control Hub or Robot Controller already visible to adb over a physical USB cable. With connection wifi-switch, build while online, then queue the local saved-network switch, ADB install, Robot Controller restart, and original-Wi-Fi restoration workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| clean | No | Run a clean build before deployment | |
| dryRun | No | Preview the selected deployment path without building, switching networks, or installing | |
| serial | No | USB adb device serial; useful when multiple devices are attached | |
| homeSsid | No | wifi-switch internet network to restore; defaults to the current SSID | |
| robotHost | No | wifi-switch Control Hub host; default 192.168.43.1 | |
| robotPort | No | wifi-switch ADB port; default 5555 | |
| robotSsid | No | Required for wifi-switch: saved Control Hub Wi-Fi network name | |
| connection | Yes | Use usb for a physically connected adb device, or wifi-switch to temporarily join a saved Control Hub network | |
| stacktrace | No | Return extended Gradle failure context | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. | |
| delaySeconds | No | wifi-switch delay before disconnecting; default 10 seconds | |
| timeoutSeconds | No | Gradle build timeout; default 600 seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses the full workflow for both modes: building, installing, and for wifi-switch the multi-step process including network switch and restore. It does not cover failure handling or side effects like overwriting, but overall is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with the primary purpose, but could benefit from a more structured format (e.g., bullets) for readability. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, no output schema), the description provides high-level workflow context but lacks detail on parameter interactions and expected outcomes. Schema descriptions compensate for parameter details, but completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context by explaining the role of the 'connection' parameter in the workflows, but does not elaborate on other parameters beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is the 'preferred high-level deployment entry point' and specifies two distinct modes (USB and Wi-Fi switch), which distinguishes it from sibling tools like deploy, build_and_deploy, and wifi_deploy_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use each connection mode (USB for physical connection, wifi-switch for automated network hopping) but does not explicitly mention when to avoid this tool in favor of alternatives, though it implies it is the preferred entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
document_subsystemDocument a subsystemA
Write or update the markdown knowledge-base doc for a subsystem (docs/subsystems/.md) and refresh the docs/ROBOT.md index. Use this to record what each function does, tuning values, config names, and quirks as the team describes them — so future sessions understand the robot without reading all the code.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Subsystem name (matches the class name) | |
| content | Yes | Full markdown body for the subsystem doc | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it writes a file and refreshes an index, implying side effects. However, with no annotations, the description could be more transparent about overwriting existing files, error cases, or required permissions. The description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant information. It front-loads the primary action and immediately follows with usage guidance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description covers the main use case and explains what the tool accomplishes (writing a file and updating an index). It leaves some gaps regarding error handling and exact behavior on existing files, but is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context for the content parameter (what to include) but does not substantially enhance meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (write or update) and resource (markdown knowledge-base doc for a subsystem), and distinguishes from sibling tools like get_doc (reading) and list_subsystems (listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: to record function descriptions, tuning values, config names, and quirks. Provides context for documentation, but does not explicitly mention when not to use or suggest alternatives like get_doc for reading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_docGet Pedro Pathing doc pageA
Return a full Pedro Pathing documentation page as markdown, by id from search_docs (e.g. 'pathing/examples/auto').
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Doc id, e.g. pathing/tuning/localization/pinpoint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the output format (markdown) and source (search_docs). It does not mention side effects or auth, but for a read-only retrieval tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence front-loaded with the verb and resource, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers return type (markdown), source (search_docs), and parameter example. For a simple retrieval tool with one parameter, it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes 'id' as 'Doc id, e.g. pathing/tuning/localization/pinpoint' and the description adds an example 'pathing/examples/auto', reinforcing the format. With 100% schema coverage, the description adds extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'full Pedro Pathing documentation page as markdown'. It specifies the input 'id from search_docs' and gives an example, distinguishing it from siblings like search_docs which lists ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates that the id comes from search_docs, implying a prerequisite. It does not explicitly exclude alternatives or state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sampleGet FTC sample OpMode sourceA
Return the full Java source of an official FTC sample OpMode by name (from list_samples).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Sample name, e.g. BasicOmniOpMode_Linear |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It indicates a read operation but does not mention side effects, permissions, error handling, or what happens on invalid input. Lacks depth for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no redundancy, front-loaded with key information. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, no output schema, no annotations), the description covers the essential purpose and usage. It does not mention return format or errors, but for a straightforward retrieval tool it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the description adds value by linking the parameter to list_samples and providing an example. This goes beyond the schema description which only gives an example without the relational context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'return', the resource 'full Java source of an official FTC sample OpMode', and specifies the source of names 'by name (from list_samples)'. It distinguishes itself from siblings like list_samples and other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'from list_samples' implying a prerequisite step, but does not explicitly state when to use this tool versus alternatives or provide exclusions. Given the number of siblings, more guidance would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subsystemGet subsystem docB
Return a subsystem's knowledge-base doc (hardware, config names, functions, tuning, quirks), optionally with its Java source.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. | |
| includeSource | No | Append the subsystem's .java source |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It implies a read operation but does not disclose side effects, error responses (e.g., if subsystem doesn't exist), or any dependencies. Behavior beyond the bare return is opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous words. Every part adds value: the verb, resource, optional modifier. It is as concise as possible while being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters and no output schema, the description covers the core return content but omits details like output format (e.g., string, JSON), error handling behavior, and the precise effect of 'projectPath'. It is adequate for a simple retrieval tool but leaves gaps for an AI agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (2 of 3 parameters have descriptions). The description adds context for 'includeSource' (matching the optional boolean) and clarifies 'name' as identifying a subsystem. However, it does not specify format, constraints, or how 'projectPath' relates to tool behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return'), the resource ('subsystem's knowledge-base doc'), and the content (hardware, config names, functions, tuning, quirks) with an optional inclusion of Java source. This distinguishes it from siblings like 'get_doc' (generic) and 'list_subsystems' (listing only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., 'get_doc' vs 'get_subsystem'). The description does not indicate prerequisites, exclusions, or when to include source. The agent gets no comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hardware_manifestHardware config manifestA
Scan TeamCode for every robot-configuration name (from hardwareMap.get and subsystem constructors) and list them, flagging any name used in multiple files. Use to cross-check code against the Driver Station configuration and catch typos/collisions.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It truthfully describes scanning and listing without modification. Could add explicit non-destructive statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no wasted words. Efficiently conveys purpose and suggested usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main functionality and usage, but lacks description of output format (e.g., list of strings, JSON) and error behavior. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no new semantic information about the parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb (Scan, list, flag) and resource (robot-configuration names in TeamCode). It distinguishes from siblings like validate_hardware or list_subsystems by focusing on configuration name extraction and collision detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('cross-check code against Driver Station configuration, catch typos/collisions') but does not explicitly mention alternatives or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_projectInspect FTC project readinessA
Start here when entering a robot project or debugging setup. Summarizes the resolved project path, SDK, Git state, OpModes, subsystem docs, Pedro setup, hardware-name collisions, latest APK, reference library, and Android SDK, then gives next actions.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It details exactly what is inspected (path, SDK, Git state, etc.) and that it gives next actions, fully disclosing its read-only summary behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loaded with purpose, followed by a concise list of inspected items. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter diagnostic tool, the description covers the tool's role, what it inspects, and its output nature. No output schema but description suffices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema coverage; the schema already explains the parameter's purpose and default. The description adds 'resolved project path' but no new meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is an entry point for inspecting project readiness, summarizing many aspects, and distinguishes from siblings like build, deploy, or check_project_hygiene.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Start here when entering a robot project or debugging setup', giving clear context for use. Does not mention alternatives or when not to use, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_pedroInstall Pedro PathingA
Install the Pedro Pathing library into an FTC SDK project: adds the Gradle maven repo + dependencies, raises compileSdk to 34, and scaffolds pedroPathing/Constants.java (mecanum + Pinpoint by default). The constants MUST be tuned afterwards — see search_docs 'tuning'.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Pedro version (default: latest release from GitHub) | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses that the tool modifies project files and notes that constants must be tuned afterwards. This is adequate but could mention potential side effects or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The purpose and a key caveat are front-loaded, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main effects and a critical follow-up step. Without an output schema, it provides sufficient context for a setup tool. Minor details like error conditions are omitted but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context about default paths and version but does not significantly extend the schema meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool installs a library into an FTC SDK project, listing specific actions (adds maven repo, dependencies, raises compileSdk, scaffolds constants). This distinguishes it from sibling tools like build, deploy, or search_docs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for setting up Pedro Pathing and directs to search_docs for tuning. It does not explicitly state when not to use it or list alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backupsList generated-file backupsA
List project-scoped recovery snapshots created automatically before ftc-toolchain overwrites files, including each backup ID and contained relative paths.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the tool's read-only nature (listing backups) and the automatic creation trigger. It also specifies the output includes backup IDs and relative paths, adding transparency beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the main action, the context of creation, and the output contents. No extraneous words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, no output schema), the description covers the essential aspects: what is listed, why it exists, and what data is returned. Minor omission: no mention of ordering or filtering, but acceptable for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a single optional parameter. The description's mention of 'project-scoped' reinforces the parameter's purpose but does not add new semantic details beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists project-scoped recovery snapshots, specifying their origin (automatic before ftc-toolchain overwrites) and content (backup ID and relative paths). The purpose is distinct from siblings like restore_backup and list_generated_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when backups are created and what they contain, implying use for inspecting available backups. However, it does not explicitly state when to use this tool over siblings like list_generated_files or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generated_filesList ftc-toolchain scaffolded filesA
Inventory Java and robot-doc files marked as scaffolded by ftc-toolchain, grouped by kind. Markers identify origin only—team edits are expected and must be preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds value by noting that markers indicate origin only and that team edits are expected. However, it does not explicitly state that the tool is non-destructive or describe the output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: first states purpose and grouping, second adds behavioral nuance. Every sentence is necessary and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 param, no output schema, no annotations), the description adequately covers what the tool does, what it returns, and a key behavioral trait. A minor gap is not mentioning that it is read-only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter, describing it as a path. The description does not add additional parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inventories Java and robot-doc files marked as scaffolded by ftc-toolchain, grouped by kind. This specific verb and resource distinguish it from sibling tools like build, deploy, or create_*.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (listing scaffolded files) but does not explicitly state when to use this tool versus alternatives like list_subsystems or list_samples. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_opmodesList team OpModesA
List all @TeleOp/@Autonomous OpModes in the project's TeamCode module.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It states it lists items, implying a read operation, but does not explicitly confirm it is non-destructive or safe. For a list tool, the behavioral transparency is adequate but could be improved by stating it is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It conveys the essential information efficiently and is well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one optional parameter, no output schema, and no annotations, the description provides a complete high-level understanding. It could be slightly more thorough by mentioning the output format (e.g., returns names) or that it filters by annotation, but overall it is sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter (projectPath), so the description adds no additional value beyond the schema. The tool's purpose is straightforward, and the parameter is self-explanatory, thus score is baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the target ('all @TeleOp/@Autonomous OpModes'), and the location ('in the project's TeamCode module'). It distinguishes itself from siblings like list_samples and list_subsystems by specifying OpModes and the filter by annotation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives (e.g., list_samples or list_subsystems). It also lacks information about prerequisites or typical scenarios. The agent is left to infer usage solely from the name and brief description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_samplesList FTC sample OpModesA
List the official FtcRobotController sample OpModes (drive code, sensors, AprilTag vision, gamepad, telemetry...). Start here to find working reference code for any FTC hardware or SDK feature.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by sample category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. The description implies a read-only listing operation with no side effects. It doesn't detail pagination or ordering, but a listing tool is straightforward enough. The description adds context that the samples are official and reference implementations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the action and scope, the second adds usage guidance. Front-loaded with key verb 'List' and resource 'official FtcRobotController sample OpModes'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one optional filter and no output schema, the description is fairly complete. It explains what the tool does and why to use it. Minor missing details about return format, but acceptable given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (category parameter has a description). The main description adds context by listing example categories (drive code, sensors, etc.), which helps interpret the enum values beyond the schema's 'Filter by sample category'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists official FtcRobotController sample OpModes, provides examples (drive code, sensors, etc.), and distinguishes from sibling tools like get_sample (retrieves a specific sample) and list_opmodes (likely user's own OpModes) by specifying 'official' samples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage hint: 'Start here to find working reference code for any FTC hardware or SDK feature.' This implies use before get_sample or custom code, but lacks explicit when-to-use vs alternatives or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subsystemsList documented subsystemsA
List the robot's subsystems from the docs/ knowledge base. Start here to learn the robot's architecture.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. It specifies the source (docs/ knowledge base) but doesn't disclose any side effects or output details. Adequate but not extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no fluff. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main purpose and usage context well for a simple list tool. Lacks mention of output format, but not critical given the simplicity and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description adds no further detail about the optional projectPath parameter beyond defaults. Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states it lists subsystems from the docs/ knowledge base, and recommends starting here to learn architecture. Clearly distinguishes from sibling tools like get_subsystem or document_subsystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context to use this tool first for learning architecture, implying it's the starting point. No explicit alternatives or when-not-to-use, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reference_statusCheck reference library statusA
Report local FTC sample and Pedro documentation counts, Git branches, commits, dates, and cache location without using the network.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the offline behavior but does not explain actions if the local cache is missing or what specific git info is included. For a status tool, this is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the key elements: what is reported and the constraint (no network). Every word contributes to clarity without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully informs the user about the tool's behavior and output scope. It is complete for a simple status-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% (trivially). The description adds no parameter info, which is acceptable as none exist. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: 'report local FTC sample and Pedro documentation counts, Git branches, commits, dates, and cache location'. It distinguishes from sibling tools by emphasizing 'without using the network', which contrasts with potentially network-dependent tools like 'get_sample'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies offline usage ('without using the network'), providing clear context. However, it does not explicitly state when to use versus alternatives, nor does it mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_robot_controllerRestart Robot Controller appA
Force-stop and restart the Robot Controller app without rebuilding or reinstalling the APK. Useful when the Driver Station is stale or an OpMode left the app unhealthy.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | adb device serial; required when multiple devices are connected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions 'force-stop', implying a destructive restart, but does not explain side effects like loss of unsaved state, disconnection from devices, or error handling. The description is too brief.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action. Every word adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description provides the essential purpose and usage context. However, it lacks behavioral details (e.g., prerequisites like adb connection, effects on other processes) that would make it complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter ('serial') with a clear description, and schema coverage is 100%. The tool description does not add further parameter information, but the schema already covers meaning adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('force-stop and restart') and clearly identifies the resource ('Robot Controller app'). It distinguishes from sibling tools like 'deploy' or 'build' which involve rebuilding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'when the Driver Station is stale or an OpMode left the app unhealthy.' It does not list alternatives or when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_backupPreview or restore a backupA
Preview restoration from an ftc-toolchain backup, optionally selecting relative file paths. No files change unless confirm is true; a confirmed restore backs up current versions first and never deletes files.
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | Relative paths to restore; defaults to every file in the snapshot | |
| confirm | No | Must be true to write; omitted/false returns a side-effect-free preview | |
| backupId | Yes | Exact snapshot ID returned by list_backups | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses key behaviors: preview mode does not change files, confirmed restore backs up current versions first, and never deletes files. This covers safety and side-effect profile well, though some operational details (error handling, permissions) are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver all essential information: purpose, optionality, and behavioral impact of confirm. No redundancy or filler, perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 params with full schema coverage, no output schema, and no annotations, the description adequately covers key aspects (preview vs write, safety guarantees). Could mention return value or prerequisite backupId, but remains sufficiently complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context by linking 'files' to 'relative file paths' and implying confirm's role, but does not significantly extend the schema's explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for previewing and restoring from an ftc-toolchain backup with optional file selection. It distinguishes from sibling tools like list_backups by focusing on restoration actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when restoration is needed (preview or confirmed) but does not explicitly state when to use vs alternatives or provide exclusions. No sibling differentiation beyond the tool's own purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_logsRead robot logsA
Dump recent logcat from the robot. Use after deploying or when an OpMode crashes/misbehaves. Useful filters: 'RobotCore' (SDK events), your OpMode class name, 'Exception'.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | How many recent lines (default 300) | |
| filter | No | Only lines containing this substring (case-insensitive) | |
| serial | No | ||
| errorsOnly | No | Only error-level log entries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It indicates a read operation ('dump') but does not elaborate on whether it is non-destructive, performance implications, or what happens if no logs exist. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and no unnecessary words. Efficiently communicates the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description covers usage and filter tips but omits details on 'serial' parameter and return format. Adequate but incomplete for comprehensive context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value beyond the schema by suggesting filter values like 'RobotCore' and 'Exception'. However, it does not mention the 'serial' parameter, and schema already covers 75% of parameters. Moderate enhancement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Dump' and specifies the resource 'recent logcat', clearly indicating what the tool does. It distinguishes from siblings like 'clear_robot_logs' by focusing on reading logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states to use this tool 'after deploying or when an OpMode crashes/misbehaves', providing clear context. It also suggests useful filters but does not explicitly mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_statusInspect connected robot statusA
Read-only connected-device snapshot: selected adb serial, model, Android version, Robot Controller app version, battery service, and data storage. Requires an explicit serial when multiple devices are attached.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | adb device serial; required when multiple devices are connected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description bears full burden. Declares 'Read-only' (safe), and notes serial requirement. For a snapshot tool, this is sufficient behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loads purpose and key constraint. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter, no output schema. Description covers what it returns (fields), usage condition, and safe nature. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with description. Description adds 'requires an explicit serial when multiple devices are attached', clarifying the parameter's conditional necessity beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title 'Inspect connected robot status' and description 'Read-only connected-device snapshot' clearly state the tool's purpose, listing specific data fields. It distinguishes from sibling tools like adb_devices and robot_logs by focusing on device status snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates when an explicit serial is required ('when multiple devices are attached'), guiding usage. Does not explicitly state when not to use or list alternatives, but the condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch FTC + Pedro Pathing knowledgeA
Keyword search across the Pedro Pathing documentation and the official FTC sample OpModes. Use for questions about path following, tuning, localization, coordinates, and SDK features.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Search terms, e.g. 'pinpoint localizer tuning' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only says 'keyword search.' It does not disclose read-only nature, result format, pagination, or rate limits. Significant gap for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and usage. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for basic search, but lacks details on return format, result structure, or how results are presented. Without output schema or annotations, the description should provide more guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has two parameters with 50% description coverage. The description does not add meaning beyond the schema: 'query' is described in schema, 'limit' is not. No compensation for missing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a keyword search across Pedro Pathing documentation and FTC sample OpModes. It distinguishes from siblings like 'get_doc' and 'get_sample' by focusing on search rather than retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions use cases: 'path following, tuning, localization, coordinates, and SDK features.' No explicit alternatives or when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_referencesUpdate FTC and Pedro referencesA
Fast-forward the local official FTC SDK samples and Pedro docs checkouts. Refuses to touch a reference checkout with local changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses the mutation behavior (fast-forward) and a key constraint (refuses if local changes). However, it lacks details on failure mode or recovery.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences that front-load the action and resource. No extraneous words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description covers purpose and key behavior. However, it could clarify what 'fast-forward' entails (e.g., git pull, rebase) for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% by default. The description correctly does not need to add parameter information, meeting the baseline for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates ('fast-forward') local checkouts of FTC SDK samples and Pedro docs, which is a specific verb+resource. It distinguishes from siblings like get_sample (retrieve) and reference_status (check status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a refusal condition (local changes), which provides a when-not-to-use hint, but does not explicitly advise when to use this tool versus alternatives or provide broader usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_hardwareValidate hardware configuration namesA
Pre-flight check for robot configuration mistakes. Flags one Driver Station name requested as incompatible device types, cross-file sharing, and unresolved constants, then tells the team whether it is safe to continue.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavior. It describes the checks performed and the outcome (tells whether safe to continue), but does not explicitly state that the tool is read-only or has no side effects. This is a gap for a validation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose. Every sentence adds value: first states the tool category, second lists specific issues and outcome. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple validation tool with one optional parameter and no output schema, the description covers the basic function. However, it does not describe the output format (e.g., boolean, report) or mention whether the tool modifies anything. Missing output details reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The tool description adds no additional meaning beyond what the schema already provides for the projectPath parameter. It does not explain default behavior or how the path is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a 'pre-flight check for robot configuration mistakes' and lists specific issues it flags (incompatible device types, cross-file sharing, unresolved constants), distinguishing it from sibling tools like check_project_hygiene which likely check code style.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The term 'pre-flight check' implies use before building or deploying, providing clear context. However, it does not explicitly state when not to use it or mention alternatives like check_project_hygiene, leaving some room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wifi_deploy_startBuild, switch Wi-Fi, and deployA
Build TeamCode while internet is available, start a local background job that switches macOS or Windows to a saved Control Hub Wi-Fi profile, connects ADB, installs the APK, restarts Robot Controller, and restores the original Wi-Fi even after failure. Returns before the network switch so the AI can receive the job ID.
| Name | Required | Description | Default |
|---|---|---|---|
| clean | No | Run :TeamCode:clean before building | |
| dryRun | No | Preview the build, Wi-Fi, ADB, APK, and return-network plan without changing anything | |
| homeSsid | No | Saved internet Wi-Fi network to restore; defaults to the currently connected SSID | |
| platform | No | Preview override for dryRun; real jobs must match the host OS | |
| robotHost | No | Control Hub host; default 192.168.43.1 | |
| robotPort | No | ADB TCP port; default 5555 | |
| robotSsid | Yes | Saved Control Hub Wi-Fi network name. Connect to it manually once before using this tool | |
| stacktrace | No | Include Gradle stacktrace details on build failure | |
| projectPath | No | Path to the FtcRobotController SDK project. Defaults to $FTC_TOOLCHAIN_PROJECT_DIR, then the workspace clone made by create_project. | |
| delaySeconds | No | Seconds before Wi-Fi switches, allowing the tool response to reach the AI; default 10 | |
| timeoutSeconds | No | Gradle build timeout; default 600 seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It outlines the full sequence of actions and notes that Wi-Fi restoration happens even after failure. It also mentions the background job and early return. Could add more detail on build failure handling, but it is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the key actions, and every sentence contributes meaningful information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no output schema), the description covers the main workflow and mentions the important detail of returning before network switch. It could mention what the job ID is used for (likely with wifi_deploy_status), but it is sufficiently complete for an agent to understand.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 11 parameters with descriptions. The tool description adds minimal parameter context beyond what the schema provides, but it does mention the job ID return and the 'dryRun' preview feature, which adds value. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: builds TeamCode, switches Wi-Fi to a Control Hub profile, deploys APK, restarts Robot Controller, and restores original Wi-Fi. It distinguishes from siblings by specifying the Wi-Fi switching and background job, which is unique among the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for deploying to a robot over Wi-Fi with network switching, and mentions returning before network switch so AI can get job ID. However, it does not explicitly state when to use this tool versus alternatives like build_and_deploy or deploy_robot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wifi_deploy_statusRead Wi-Fi deployment resultA
Read the latest or specified background Wi-Fi deployment job after the computer reconnects to internet. Reports queued, switching, deploying, returning, succeeded, or failed state plus the complete local build/deploy/recovery timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | No | Job ID returned by wifi_deploy_start; omit to read the most recent job |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool reports states and a timeline, indicating a read-only operation. However, it does not mention potential side effects, rate limits, or whether the tool may block waiting for results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the purpose, lists possible states, and mentions the timeline. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema, the description adequately explains what is returned (states and timeline) and the usage context. However, it lacks details on the response format (e.g., JSON structure) and error handling, which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter. The description adds significant value beyond the schema by explaining that omitting jobId returns the most recent job, which clarifies the optional behavior and default action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool reads the latest or a specified Wi-Fi deployment job. It includes the verb 'Read' and the resource 'background Wi-Fi deployment job', and distinguishes from sibling tools like wifi_deploy_start by focusing on status rather than initiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that the tool is used after the computer reconnects to the internet and allows specifying a jobId or omitting for the latest job. However, it does not explicitly state when not to use this tool or mention alternatives (e.g., reading status from other sources).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
35 tool updates
v0.2.0- First observed
adb_connect - First observed
adb_devices - First observed
build - First observed
build_and_deploy - First observed
check_project_hygiene - First observed
clear_robot_logs - First observed
create_calculation - First observed
create_opmode - First observed
create_project - First observed
create_subsystem - First observed
create_teleop - First observed
deploy - First observed
deploy_robot - First observed
document_subsystem - First observed
get_doc - First observed
get_sample - First observed
get_subsystem - First observed
hardware_manifest - First observed
inspect_project - First observed
install_pedro - First observed
list_backups - First observed
list_generated_files - First observed
list_opmodes - First observed
list_samples - First observed
list_subsystems - First observed
reference_status - First observed
restart_robot_controller - First observed
restore_backup - First observed
robot_logs - First observed
robot_status - First observed
search_docs - First observed
update_references - First observed
validate_hardware - First observed
wifi_deploy_start - First observed
wifi_deploy_status
TDQS
Scored across 35 tools
Each tool has a clearly distinct purpose, from ADB operations to project scaffolding, building, deployment, and documentation. Overlapping areas like deployment are handled by separate tools with specific workflows (e.g., build_and_deploy vs. wifi_deploy_start), avoiding ambiguity.
All tool names consistently use snake_case with a verb_noun pattern (e.g., create_opmode, list_subsystems, deploy_robot). There are no mixed conventions or vague verbs, making the naming predictable and easy to navigate.
35 tools is excessive for the typical MCP server scope, far exceeding the recommended 3-15 range. While many tools are specialized for FTC development, the count is high enough to overwhelm an agent, indicating poor scoping.
The tool surface covers the full FTC development lifecycle: setup, coding, building, deployment, debugging, and documentation. Minor gaps exist, such as lack of dedicated tools for sensor configuration or simulation, but core workflows are well-supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAn MCP server that provides AI coding agents with AST-accurate, context-budget-aware codebase querying, safety gates, and team policy integration via structured tools and a local plugin layer.5624MIT
- FlicenseNot gradedqualityDmaintenanceRemote MCP server for FTC & Pedro Pathing research, providing tools to search technical notes, code templates, and verified team examples to assist AI agents in code generation and robotics development.-
- AlicenseAqualityDmaintenanceMCP server that injects verified FTC documentation and code examples into AI assistants, enabling teams to write correct, competition-ready Java robot code through natural language.3112MIT
- AlicenseAqualityAmaintenanceAn MCP server that empowers AI coding agents to work effectively with Minecraft mod development, providing static analysis of decompiled source code and runtime interaction with a running Minecraft instance.314413MIT