compose-bridge
Rebranded to ComposeLint AI. Repository has been moved to TechsOneAi/ComposeLintAI.
This MCP server lets AI agents inspect, refactor, and safely edit Jetpack Compose design tokens and source code while managing approvals, rollbacks, builds, diagnostics, and device sync.
Discover and analyze design tokens: list tokens, reverse lookup by color, find orphans/duplicates, token impact, siblings, groups, and naming conventions.
Analyze design-system issues: locate scattered hardcoded colors/dimensions/strings, detect conditional variants, and suggest token splits.
Edit source safely: set token values, set/replace text with registry wrapping, add new tokens, and batch-replace patterns with dry-run support.
Manage changes: list modified files, view unified diffs, approve/reject files or individual hunks, approve/reject all, and use safe or forced rollbacks.
Verify code: run whitelisted Gradle tasks asynchronously, poll build status, list allowed tasks, fetch IDE diagnostics, and scan project diagnostics.
Configure and sync: inspect/set design-file mappings, clean cache/journal/logs, trigger device edit sync, and check sync status.
Enables live UI tuning and design token syncing on a running Android app, allowing AI agents to edit Compose UI properties and persist changes back to Kotlin source.
Provides tools for running Gradle builds and listing allowed Gradle tasks, enabling AI agents to build and validate Android/KMP projects after making UI changes.
Provides tools for interacting with Jetpack Compose UI, including token discovery, pattern refactoring, and live editing of composable properties with AST-guided source splicing.
ComposeLintAI 🌉
Enterprise AI Governance, Architecture Diagnostics & AST Refactoring Platform for Jetpack Compose + MCP Server.
Govern AI coding agent technical debt, enforce design systems, diagnose architectural health, and execute surgical source code modifications with zero-rebuild live device inspection.
📰 Featured In
📥 Direct Downloads (v1.1.9)
Package | Asset | Purpose |
IDE Plugin (Android Studio / IntelliJ) | 🚀 Install from JetBrains Marketplaceor 📦 ComposeLintAI-1.1.9.zip | Official Marketplace install (One-click) or manual install via |
Compose Runtime Library (Release & Debug) | Core registries (~9KB). Required in | |
Compose Agent Library (Debug Only) | Visual overlays, touch inspector, and WebSocket bridge. Put in |
Related MCP server: Vibgrate AI Context
📸 Visual Demo
Watch ComposeLintAI visually edit a running Jetpack Compose UI live:
Screenshots
1. Studio ToolWindow & Token Scanner | 2. Surgical Pattern Refactoring & Diff | 3. Live On-Device Preview & Inspector |
|
|
|
🔄 Upgrading from v1.1.x to v1.1.9
Upgrading from ComposeLintAI v1.1.x to v1.1.9 is straightforward and involves zero breaking changes in your codebase or Gradle configurations:
Update the IDE Plugin: Install the latest
dist/ComposeLintAI-1.1.9.zipin Android Studio (Settings ➔ Plugins ➔ Install Plugin from Disk...) and restart the IDE.Update Android AAR: Replace
composebridge-agent-release.aarin your app module'slibs/folder with the updated build fromdist/composebridge-agent-release.aar, then re-sync Gradle.Update Python Server: If running standalone, re-run
pip install -r requirements.txt --upgradeinserver/.Breaking Changes: None. All protocol messages, runtime registries, and MCP tool signatures remain 100% backward-compatible.
⚡ Quick Start in 60 Seconds
Step 1: Install IDE Plugin
Download ComposeLintAI-1.1.9.zip.
In Android Studio, go to Settings (Preferences) ➔ Plugins ➔ Click the ⚙️ gear icon ➔ Install Plugin from Disk....
Select the zip file and restart Android Studio.
Step 2: Add Dependencies to your Android App
Copy composebridge-runtime-release.aar and composebridge-agent-release.aar into your app module's libs/ folder:
// app/build.gradle.kts
dependencies {
// 1. Runtime registries: compiles cleanly in both Debug & Release
implementation(files("libs/composebridge-runtime-release.aar"))
// 2. Interactive visual inspector: debug builds only
debugImplementation(files("libs/composebridge-agent-release.aar"))
}⚠️ Kotlin Multiplatform (KMP) Projects
If your project targets both Android and Desktop (KMP) and you use ComposeLintAI registries inside commonMain, DO NOT use the .aar files (as the desktop compiler cannot read Android .aar binaries). Instead, use the source modules as follows:
Copy the
agent/runtimefolder into your project (e.g.composebridge-agent/runtime).In
settings.gradle.kts(orsettings.gradle), include the runtime module:include(":composebridge-runtime") project(":composebridge-runtime").projectDir = file("composebridge-agent/runtime")In
composebridge-agent/build.gradle.kts, expose runtime as an API dependency:kotlin { sourceSets { commonMain.dependencies { api(project(":composebridge-runtime")) } } }In
composeApp/build.gradle.kts, implement the agent module incommonMain:kotlin { sourceSets { commonMain.dependencies { implementation(project(":composebridge-agent")) } } }
Step 3: Initialize in MainActivity (Debug)
// MainActivity.kt
import com.composebridge.agent.ComposeLintAIAgent
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Start bridge connection (automatically connects to local hub)
ComposeLintAIAgent.start(context = this, serverUrl = "ws://127.0.0.1:8711")
setContent {
// Wrap root content in ComposeLintAIAgent.Root
ComposeLintAIAgent.Root {
MyApplicationTheme {
MainScreen()
}
}
}
}
}Step 4: Start the Bridge & Tune Live
In Android Studio, open the ComposeLintAI tool window on the right sidebar and click ▶ Start Bridge (this starts the local server and runs
adb reverse tcp:8711 tcp:8711automatically).Run your app on your device or emulator.
Tap the floating 🔧 FAB on screen to toggle Design Mode.
Tap any text, color, or dimension to adjust values in real-time!
🌐 Remote Connection (Experimental)
Tune your running Compose UI over the internet (cellular data, separate Wi-Fi networks, or remote testing) without a physical USB cable using Tailscale Funnel:
Prerequisites
Install Tailscale on your PC and mobile device.
Sign up for a Tailscale account (free for personal use).
Step-by-Step Setup:
Step 1: Configure Tailscale ACLs (Crucial!)
By default, Tailscale disables Funnel unless granted by your Access Control Lists (ACL). Before running the funnel command:
In the JSON policy editor, add the following
nodeAttrsblock inside the root{ ... }:"nodeAttrs": [ { "target": ["*"], "attr": ["funnel"] } ]Click Save.
This step is required to grant your devices permission to expose Funnel ports. Skipping this step will causetailscale funnel 8711 to fail with: funnel not allowed by ACLs.
Step 2: Start Tailscale Funnel on your Computer
Launch Tailscale on your PC and sign in.
Open a Terminal or PowerShell prompt and run:
tailscale funnel 8711(Or:
tailscale serve https / http://127.0.0.1:8711)Leave this terminal open (Tailscale Funnel must remain active).
Step 3: Get Connection Link in Android Studio / IntelliJ Plugin
Open the ComposeLintAI tool window on the right sidebar.
Click the "Share Remote" button.
A dialog will open displaying a QR Code and your secure connection URL (
wss://...).
Step 4: Connect on your Mobile Device
Launch your app (with ComposeLintAI Agent enabled).
Tap the floating Design Mode button 🎨 -> Connection Settings.
Select "Remote":
Tap "Scan QR" and scan the code directly from your computer screen, OR
Paste the URL via "Paste from Clipboard".
Tap "Connect Remote" to establish the live bridge.
Honest Notice: Remote connections are experimental. The session may disconnect due to network changes (switching between Wi-Fi and mobile data), restrictive corporate firewalls, carrier NATs, or phone battery-saver/sleep modes. For maximum stability and guaranteed sub-50ms latency, a physical USB connection (adb reverse tcp:8711 tcp:8711) remains the gold standard. For technical boundaries, see LIMITATIONS.md.
⚙️ How It Works (Under the Hood)
ComposeLintAI operates as a tri-part system coordinating an IDE extension, a surgical AST engine, and an on-device Compose observer:
Android Studio / IntelliJ Plugin: Manages background Python server processes, displays real-time connection status, generates Tailscale WireGuard QR codes for remote WAN tunnels, and provides visual tabs (
Changes,Tokens,Orphans,Patterns,Status) with unified diff review.Python Server & Tree-sitter AST Engine: Runs an asynchronous WebSocket hub on port
8711. When an edit arrives, Tree-sitter parses the Kotlin syntax tree and performs surgical code splicing without disturbing un-targeted code, formatting, or comments. Employs atomic file locks (_atomic_write_text) with CRLF line-ending preservation.Android Agent (
:composebridge-agent): Renders a zero-overhead hit-testing overlay viaComposeLintAIAgent.Root. Evaluates touch gestures, maps coordinates to semantic node bounds usingCompositionRegistry, and applies overrides locally (<50ms) throughBridgeThemeRegistry,BridgeDimensionRegistry, andBridgeTextRegistryso the UI responds instantaneously.PatternJournal & Rollback Engine: Before touching any source file, a pristine snapshot is verified with Tree-sitter and preserved as
.bridge.bak. Rollbacks prioritize Git tracking (git checkout -- <file>), safely falling back to byte-level.bridge.bakrestoration for untracked files.Model Context Protocol (MCP Server): Exposes 36 structured tools over stdio/JSON-RPC, enabling autonomous AI coding assistants (Antigravity, Cursor, Claude) to discover design tokens, detect orphans, suggest splits, and validate builds independently without requiring a physical phone connected.
📐 Architecture & Communication Flow
ComposeLintAI coordinates three interconnected components over a fast local loopback interface:
+--------------------------+ +----------------------------+
| Android Phone / AVD | | Local WebSocket Hub |
| | | (Python 3.10+ Daemon) |
| [App UI in Compose] | | |
| | | WebSocket | server.py (:8711) |
| [:composebridge-agent] |<===============>| ├── Message Router |
| - Visual Touch Overlay| (Port 8711) | ├── AST Splicer |
| - Semantic Inspector | | └── PatternJournal |
| | | +----------------------------+
| [:composebridge-runtime]| ||
| - TextRegistry | || JSON-RPC
| - ThemeRegistry | || (stdio / TCP)
| - DimensionRegistry | \/
+--------------------------+ +----------------------------+
| Developer Tools & AI |
| |
| [Android Studio Plugin] |
| - Live Changes Diff |
| - Token Split / Scanner |
| [Autonomous MCP Agents] |
| - Antigravity / Claude |
| - 36 Standard MCP Tools |
+----------------------------+On-Device Agent (
:composebridge-agent): Injected viaComposeLintAIAgent.Root. Renders non-intrusive hit-testing overlays, extracts semantic metadata, and transmits change requests over local WebSocket (ws://127.0.0.1:8711).Decoupled Runtime (
:composebridge-runtime): Standalone ~9KB runtime containing registry singletons (BridgeTextRegistry,BridgeThemeRegistry,BridgeDimensionRegistry). Ensures production Release builds compile with zero overhead without packaging debug overlays.Local Bridge Server (
server.py): Acts as the central event hub and Kotlin AST manipulation engine. Applies deterministic changes using file write-locks, atomic rewrites, and maintains a byte-level.bridge.bakrollback journal.Model Context Protocol (MCP Server): Exposes 36 structured tools allowing AI pair programmers (Antigravity, Claude, Cursor) to autonomously analyze token usage, suggest token splits, and execute multi-file refactorings.
🚀 Core Capabilities
Capability | Description |
⚡ Instant Live Tuning | Tweak colors, paddings, and string contents with sub-50ms latency. Changes update dynamically without waiting for Gradle rebuilds. |
🧠 Semantic Token Intelligence | Detects whether a modified color or dimension is shared globally. Offers Split (create an isolated token for this widget) or Global (update theme-wide). |
📝 Text Editing & Auto-Migration | Tap any text element to edit wording directly on device. The AST engine automatically wraps raw strings into |
💾 Safe Rollbacks (PatternJournal) | Every surgical edit is backed up byte-for-byte. The Studio Changes tab allows reviewing unified diffs and reverting individual files or all edits with one click. |
🤖 Full MCP Server for AI Agents | 36 tools supporting token discovery, impact analysis, orphan detection, surgical pattern replacement, and safe Gradle compilation validation. |
🤖 AI Agent Integration (MCP)
ComposeLintAI exposes 36 deep-inspection and code refactoring tools to any AI assistant supporting the Model Context Protocol (MCP). No physical phone is required to use MCP tools.
💡 Ultra-Lightweight Context Window: ComposeLintAI uses Lazy Loading, so 36 MCP tools consume only ~176 tokens (<1% of context window).
Compatible AI Clients:
✅ Google Antigravity IDE
✅ Cursor
✅ Claude Desktop
✅ Windsurf / Continue
Integration Steps:
Step 1: Run the MCP Server
Make sure server dependencies are installed and the server is executable from your server directory:
cd server
pip install -r requirements.txtStep 2: Configure mcp_config.json
Add the ComposeLintAI server configuration to your AI agent's config file (e.g. in ~/.gemini/config/mcp_config.json or your IDE configuration):
{
"mcpServers": {
"composebridge": {
"command": "python",
"args": ["-u", "/path/to/compose-bridge/server/mcp_server.py"],
"env": {
"COMPOSEBRIDGE_ROOT": "/absolute/path/to/your/android/project",
"PYTHONIOENCODING": "utf-8"
}
}
}
}⚠️ Important: Any changes made to
mcp_config.jsonrequire starting a New Chat in your AI agent interface so that all 36 MCP tools are freshly discovered and initialized.
How to set it up in Android Studio / Antigravity:
Open Android Studio / IntelliJ IDEA.
Go to Settings (or Preferences on macOS) ➔ Tools ➔ AI ➔ MCP Servers.
Click on the Installed tab.
Click on the "Import JSON file" button (or "...Add via JSON" depending on your IDE version).
Paste the JSON configuration provided above.
Click OK or Apply.
⚠️ Crucial: Start a New Chat (or restart the agent) for the new 36 MCP tools to load and become visible.
Overview of MCP Tools (36 Tools):
Token Discovery & Analysis:
list_tokens,find_token_by_color,get_token_impact,get_token_siblings,get_all_token_groups,list_orphans,get_naming_convention.Surgical Code Editing:
set_token,set_text,add_token,rollback_last.Pattern Refactoring:
replace_pattern,list_applied_patterns,rollback_pattern,suggest_token_split,detect_conditional_variants.Change Management:
list_modified_files,get_file_diff,approve_file_changes,reject_file_changes,approve_all_files,reject_all_files,reject_all_files_force.Build Verification & Sync:
run_gradle_build,list_allowed_gradle_tasks,trigger_user_sync,get_sync_status.
⚠️ Honest Limitations & Operational Boundaries
📖 Full Technical Disclosure: For an exhaustive, unvarnished disclosure of operational edge cases and architectural constraints, see LIMITATIONS.md.
⚠️ Key Notice: Remote Connection is experimental. The tool will safely pause (
NEEDS_MANUAL_MAPPING) and refuse to modify code if it cannot find design files (Colors, Dimensions, Strings) until you map them in the Discovery tab, protecting your project from accidental code pollution.
Remote Tunnel Stability: Remote access via Tailscale is experimental. Mobile cellular handoffs or network firewalls can interrupt socket connectivity. USB tethering (
127.0.0.1) remains recommended for mission-critical zero-latency editing.Design System Mapping Required: If the tool cannot locate your design system files automatically, it safely stops and asks for configuration in the Discovery tab rather than writing to arbitrary files.
Live Preview Connection: Edits applied when the device is disconnected are saved safely to disk, but the mobile screen requires an active connection to recompose.
AI Agent Review: Always review AI refactorings in the IDE Changes tab before approving.
Concurrent External Edits: Editing the same line in your IDE while an unapproved bridge edit is pending will trigger an external conflict warning dialog.
Rate Limiting: High-frequency continuous slider movements are rate-limited (100 msgs/10s) to prevent thread congestion over slow Wi-Fi.
General Platform Constraints
Platform Target: Live on-device inspection currently supports Android (API 24+). Kotlin Multiplatform Desktop and iOS overlays are in active development.
Python Requirement: The local bridge server requires Python 3.10 or newer.
USB Port Forwarding: When testing on a physical device over USB, port forwarding is required (
adb reverse tcp:8711 tcp:8711). The Studio plugin runs this automatically on startup.Initial Rebuild on New Tokens: When converting a hardcoded literal to an entirely new named token for the first time, one standard Gradle compile is required so the Kotlin compiler emits the new getter bytecode. Subsequent live tweaks to that token are instantaneous.
🔧 Troubleshooting & FAQ
1. The phone shows [WS] Connection failed
Ensure the bridge server is running (
🟢 Bridge Runningin Studio orpython server.pyin terminal).If using USB, verify ADB reverse is active by running:
adb reverse tcp:8711 tcp:8711If using Wi-Fi without USB, specify your workstation's LAN IP when calling
ComposeLintAIAgent.start(serverUrl = "ws://192.168.1.X:8711").
2. Build error: Duplicate class found in modules
Make sure
composebridge-runtime-release.aaris added underimplementation(...)andcomposebridge-agent-release.aaris added underdebugImplementation(...). Do not include the agent in release configurations.
3. Edits do not show in Android Studio
Ensure you have the project root properly set in
composebridge.jsonor pass--project <path>when launchingserver.py.Check the Changes tab in the ComposeLintAI tool window to review pending file diffs.
🤝 Contributing & Community
We welcome contributions! Please review our:
Contributing Guidelines: Development setup, coding standards, and PR process.
Security Policy: Supported versions and vulnerability disclosure guidelines.
Architectural Vision (RFC-001): Technical roadmap and core invariants.
📄 License
Distributed under the Apache License 2.0.
🌐 Remote Access via Tailscale (WireGuard Secure Tunnel)
ComposeLintAI v1.1.6 introduces zero-configuration remote access using Tailscale Funnel. You can now inspect, tweak, and live-preview Compose UI on physical Android devices over cellular data or remote Wi-Fi networks securely.
1. Prerequisites
Install Tailscale on your workstation: https://tailscale.com/download
Log in and enable Tailscale:
tailscale upEnsure Tailscale Funnel is enabled for your tailnet node.
2. Share Remote from Android Studio
Open the ComposeLintAI tool window in Android Studio.
Click ▶ Start Bridge to launch the local WebSocket hub with dynamic 64-character token authentication.
Click 🌐 Share Remote in the toolbar:
The plugin initiates
tailscale funnel 8711 --bg.A QR Code modal appears with your secure
wss://<node>.<tailnet>.ts.netendpoint and session auth token.
(Optional) You can copy the URL or Token, or click Stop Sharing to turn off the funnel.
3. Connect from Android Device
Open your debug app with
ComposeLintAIAgent.Tap the floating 🎨 design button to open the toolbar, then tap the 🌐 remote button.
Tap 📷 Scan QR (or paste connection JSON from clipboard).
The agent immediately connects securely via TLS/WSS (
wss://...), validates credentials, and begins live streaming UI edits.To return to USB/local development, tap Local (127.0.0.1) in the remote dialog.
Available Tools
36 toolsadd_tokenADestructive
Convert a hardcoded value to a design token.
This tool:
1. Adds a new token definition to AppDimens.kt or AppColors.kt
2. Replaces ONLY the specified line with the new token
3. Does NOT touch any other line in the project
Use list_tokens() first to find hardcoded values that
could become tokens.
Args:
file: File name (e.g., "DashboardPage.kt")
line: Line number (1-indexed)
value: Expected value (e.g., "16.dp" or "0xFF7C3AED")
token_name: New token name (e.g., "padding_md")
token_type: "dimension" or "color"
preferred_token_file: Optional target token file (e.g. "Tokens.kt")
force_create: ⚠️ force_create bypasses duplicate detection. Use ONLY for testing.
Returns:
JSON with success status and details.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| value | Yes | ||
| token_name | Yes | ||
| token_type | Yes | ||
| force_create | No | ||
| preferred_token_file | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the exact mutation scope: it adds a token definition and replaces only the specified line without touching other lines. It also explains that force_create bypasses duplicate detection, which is important behavioral context for a destructive, non-idempotent 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 front-loaded with the core action, then uses a short numbered list to explain effects and a compact Args section for parameters. Every sentence provides useful information for correctly invoking a destructive mutation tool.
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 seven-parameter destructive tool with no schema descriptions, the definition covers purpose, scope, prerequisite usage, parameter meaning, and the risky force_create behavior. An output schema exists, so the brief return-value sentence 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 description coverage is 0%, so the description carries the full burden and does so well. It documents every parameter, gives examples for file, value, token_name, and preferred_token_file, specifies that line is 1-indexed, and states the valid token_type values.
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 states a specific verb and resource: convert a hardcoded value into a design token. It also explains the two concrete effects, adding a token definition and replacing exactly the specified line, which clearly distinguishes it from broader mutation tools like replace_pattern or set_token.
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?
It gives a clear prerequisite by telling the agent to use list_tokens() first to find hardcoded values. It also warns that force_create should be used only for testing. It stops short of explicitly naming when to use this instead of set_token or replace_pattern, so it is strong but not fully alternative-aware.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_design_scatterARead-onlyIdempotent
Analyzes scattered hardcoded design tokens (colors, dimensions, strings) across the project.
Returns a compact, categorized report to avoid context window exhaustion.
When to use:
- Call during project onboarding, architecture audits, or before major UI refactorings.
- Call to locate hardcoded color literals, raw Dp values, and string literals across Jetpack Compose files.
When NOT to use:
- Do not use if you already know the exact token name or file (use find_token_by_color or list_tokens instead).
- Do not use for applying code changes directly (use set_token, add_token, or set_text instead).
Side effects:
- None (strictly read-only AST inspection, does not modify any source code or configuration).
Args:
category: 'all', 'colors', 'dimensions', or 'strings'.
limit: Maximum number of files to return per category (default: 10).
project_root: Optional path to project root.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No | all | |
| project_root | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'Side effects: None (strictly read-only AST inspection)' line largely restates readOnlyHint=true, destructiveHint=false, and idempotentHint=true, which the annotations already establish. The genuinely additive behavioral detail is that it returns a compact, categorized report specifically to avoid context-window exhaustion, which tells the agent the output is deliberately abbreviated. That one useful disclosure, plus the AST-implementation note, keeps it above the floor rather than at it.
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 front-loaded with the one-line purpose, then cleanly sectioned into When to use / When NOT to use / Side effects / Args, so an agent can scan to the relevant block. It is slightly longer than necessary because the 'Side effects: None' block duplicates annotation data and the Args block overlaps the schema defaults.
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-only analysis tool with an output schema, everything needed to invoke it correctly is present: selection guidance, exclusions, safety profile, and the meaning of all three parameters. The only gap is a definition of what makes a token 'scattered' or how results are thresholded, which would help an agent interpret the report.
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 0%, so the description carries the burden and does so for all three params: it enumerates the category values ('all', 'colors', 'dimensions', 'strings') that the schema only types as an unconstrained string, clarifies that limit is files returned per category (not total), and marks project_root as optional. It does not explain what the 'all' category aggregates vs. individual categories, which is the one remaining ambiguity.
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?
States a specific verb and resource: 'Analyzes scattered hardcoded design tokens (colors, dimensions, strings) across the project.' The parenthetical names exactly what kinds of literals are in scope, and later lines distinguish it from find_token_by_color, list_tokens, and set_text, so an agent can pick it over siblings without opening a schema.
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?
Explicit when-to-use triggers are given (project onboarding, architecture audits, before major UI refactorings) and explicit when-NOT-to-use cases name the correct alternatives: find_token_by_color or list_tokens when the exact token/file is known, and set_token/add_token/set_text for applying changes. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_all_filesADestructiveIdempotent
Destructive: Approves ALL pending changes permanently. Removes them from journal.
What it does: Permanently accepts all pending changes in the journal across all modified files.
When to use: When all modifications from recent operations are verified and accepted.
When NOT to use: No rollback after this action. Use approve_file_changes for single files. Use reject_all_files to discard instead.
Side effects: Destructive: Permanently clears all backups and journal entries. Changes cannot be rolled back.
Parameters: None.
Returns:
JSON string confirming all files approved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds concrete consequences beyond that: journal entries are removed and backups are permanently cleared with no rollback. It does not mention whether approval can partially fail across files, which keeps it short of a 5.
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?
Front-loaded with 'Destructive:' and organized into labeled sections, which is easy to scan. The destructiveness/irreversibility is restated three times (header, when-not-to-use, side effects), slightly more repetition than needed.
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?
An output schema exists, yet the description still briefly confirms the return (JSON confirmation string). Combined with use conditions, alternatives, and side effects, nothing an agent needs before calling is missing.
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 takes zero parameters, so the baseline is 4; the description correctly notes 'Parameters: None.' and leaves nothing ambiguous.
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?
States a specific verb and resource with explicit scope: 'Approves ALL pending changes permanently' across all modified files. The all-files scope is distinguished from the single-file sibling approve_file_changes.
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?
Explicit when-to-use ('all modifications from recent operations are verified and accepted'), when-not-to-use ('No rollback after this action'), and names two concrete alternatives: approve_file_changes for single files and reject_all_files to discard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_changeADestructiveIdempotent
Approves a single granular change (hunk) in a file.
What it does: Incorporates the specific change into the file's baseline backup, leaving other changes pending.
When to use: When one specific change in a file is approved, but other changes need further inspection or rejection.
Parameters:
- file_path: relative path to project root
- change_id: hunk ID (e.g. "h1", "h2") or line number
Returns:
JSON string with operation result and remaining changes.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description's extra detail is genuinely additive: it explains that the hunk is merged into the file's baseline backup while other changes remain pending. That state-change disclosure is exactly what an agent needs before a destructive call; only permissions/irreversibility detail is missing.
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?
Labeled sections (What it does / When to use / Parameters / Returns) with the core action front-loaded in the first line. Every sentence carries distinct information; nothing is padding.
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 2-param destructive mutation, the description covers action, scope, triggering condition, parameter meaning, and return shape, which is ample. Since an output schema exists, the Returns line is somewhat redundant but harmless; missing detail on failure modes or permission requirements keeps it short of a 5.
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 0%, so the description must carry the load and it does: file_path is clarified as relative to project root, and change_id is clarified as a hunk ID like "h1"/"h2" or a line number. The format examples add meaning the schema lacks, though edge cases (line number vs hunk ID precedence) are unstated.
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?
States a specific verb and resource ("Approves a single granular change (hunk) in a file") and the scope word "single" plus "hunk" cleanly separates it from approve_file_changes, approve_all_files, and reject_change. An agent can pick the right sibling without opening any schema.
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 "When to use" line gives an explicit condition: one specific change approved while other changes need inspection or rejection. It implies but does not name the alternatives (reject_change, approve_file_changes), so the routing guidance is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_file_changesADestructiveIdempotent
Approves pending changes for a SPECIFIC file. Removes its entry from journal.
What it does: Marks changes as accepted and discards the backup so the file is no longer in pending state.
When to use: When changes to a specific file have been inspected (via get_file_diff) and verified correct.
When NOT to use: File must be modified. To approve all files use approve_all_files.
Side effects: Clears the journal entry and backup for this file. Modifications remain permanently on disk.
Parameters:
- file_path: relative to project root (e.g., 'QuickActionsWidget.kt' or 'ui/theme/AppStrings.kt').
Returns:
JSON string confirming file approval.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive annotation, the description explains exactly what is destroyed: the backup is discarded, the journal entry is cleared, and modifications remain permanently on disk. This gives an agent the side-effect information needed before invoking a destructive 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?
The description is well structured and front-loaded with what it does, when to use it, and side effects. It contains some repetition, such as restating that the journal entry is removed and including a return line despite the output schema.
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-parameter destructive tool, the description covers purpose, prerequisites, alternatives, side effects, parameter format, and return behavior. An agent has enough context to decide when to call it and what the consequences will be.
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 has 0% parameter description coverage, but the description compensates by specifying that file_path is relative to the project root and provides concrete examples. This adds meaningful syntax guidance beyond the bare string parameter.
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 states a specific verb and resource: it approves pending changes for a specific file. It also distinguishes this from approve_all_files, making the scope clear without needing the schema.
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?
It gives a clear prerequisite: inspect via get_file_diff and verify correctness before approving. It also names approve_all_files as the alternative for approving all files, but the exclusion 'File must be modified' is ambiguously worded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_cacheADestructiveIdempotent
Safely cleans temporary cache, state files, and logs (.composebridge-state, .composebridge-journal.json, *.tmp)
without touching source code or .bridge.bak backups.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known; the description earns credit for adding the concrete deletion set and, crucially, the protected artifacts it will not touch. It does not disclose irreversibility or whether files are moved to a trash/backup before removal, and the word 'safely' slightly undersells the destructive hint without contradicting it.
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?
A single front-loaded sentence with the exclusion clause immediately after the inclusion list — every clause carries unique information and nothing is repeated from annotations or schema.
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?
Output schema exists, so return values need not be explained, and given zero parameters the description is nearly sufficient. The remaining gap is that it never says where these files live (workspace root? project directory?), which matters for a destructive cleanup invoked across a multi-project workspace.
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 takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies a no-argument invocation with fixed, predetermined targets.
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?
States a specific verb ('cleans') and enumerates the exact resources removed with literal file patterns (.composebridge-state, .composebridge-journal.json, *.tmp). It also bounds the scope negatively ('without touching source code or .bridge.bak backups'), so an agent knows precisely what is and is not deleted. No sibling tool overlaps with cache cleanup, so sibling differentiation is not a gap here.
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?
Usage is only implied by the scope statement — an agent can infer this is a housekeeping/cleanup action, but there is no explicit when-to-use guidance or prerequisite mention (e.g. whether it should follow a build or sync). No alternative tool is named as a substitute or as a complement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_conditional_variantsBRead-onlyIdempotent
Detect repeated patterns like:
if (isDark) Color(0xFF818CF8) else AppColors.Primary
Args:
token_name: optional — filter by base token name.
Returns:
JSON with detected patterns + occurrences + suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
| token_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that results include detected patterns, occurrences, and suggestions, which hints at scan-plus-recommendation behavior. It doesn't say how patterns are grouped, whether occurrences reference file/line locations, or how the suggestions should be acted on, so the added value is modest.
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?
Front-loaded with an illustrative example, then clean Args/Returns sections — no filler sentences. The example line is worth its space because the tool name alone would not convey the target pattern shape. Slightly terse overall, but nothing to cut.
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?
An output schema exists, so return values needn't be spelled out, and annotations cover safety; the description just needs purpose and the filter. It is complete for a single-optional-param analysis tool, with the main residual gap being the absence of any workflow guidance about when a conditional-variant scan is the right move.
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 0% for the single parameter, so the description carries the burden and does at least say it is optional and filters by 'base token name'. It does not clarify matching semantics (exact vs. prefix vs. case-sensitive) or what happens when omitted beyond the word 'optional', leaving real ambiguity for the agent.
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 gives a concrete verb ('Detect') plus a resource ('repeated patterns') and immediately grounds it with a code example of the target shape (a conditional color expression). An agent can tell this is a read-only analysis sweep for conditional token variants. It doesn't explicitly differentiate itself from nearby analysis siblings such as suggest_token_split or analyze_design_scatter, which keeps it out of 5 territory.
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?
There is no when-to-use guidance, no prerequisites, and no named alternative. The Args section explains the filter but never says when to run a filtered scan versus a full scan, or how this relates to suggest_token_split / replace_pattern in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_token_by_colorARead-onlyIdempotent
Reverse lookup: Find token(s) matching an exact hex color.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_color | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds two genuinely useful behavioral facts beyond that: matching is EXACT (no fuzzy or nearest-color fallback) and the result may be plural ('token(s)'), so the caller should expect zero-to-many matches rather than a single object.
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 short sentence, front-loaded with the 'Reverse lookup' framing and then the concrete constraint, with no filler or redundant restatement of the tool name.
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?
With an output schema present and only one required parameter, the description does not need to explain return shape, and it correctly signals exactness and possible multiplicity. However, for a color-input tool the absence of hex format guidance (prefix, digit count, casing) is the one gap that could cause a failed or empty call.
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 0% and the single hex_color parameter has only a title, so the description must carry the format burden. It does confirm the value is a hex color and that matching is exact, but it omits the concrete format details an agent needs: leading '#', 3- vs 6-digit forms, alpha channel support, and case sensitivity.
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 gives a specific verb-plus-resource ('Find token(s)') and frames it as a 'Reverse lookup' on an exact hex color, which clearly separates it from forward-looking siblings like add_token, set_token, or get_token_siblings. It stops short of naming an adjacent search/list tool (e.g. list_tokens) that an agent might otherwise confuse it with.
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?
Usage is implied rather than stated: the agent can infer this is the tool for 'I have a color, what token is it?' and that it is not for listing or editing tokens. There is no explicit when-not guidance, no mention of alternatives when the color is not an exact match, and no note on what to do if nothing is found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_token_groupsARead-onlyIdempotent
Read-only. Returns ALL semantic token groups in the project (e.g., 'Actions', 'Dashboard', 'Settings').
What it does: Lists all token groups discovered across design system objects.
When to use: To inspect the high-level semantic grouping of design tokens.
When NOT to use: Use list_tokens for individual tokens. Groups are based on object declarations in AppStrings/DesignSystem.
Side effects: Read-only. No files modified.
Parameters: None.
Returns:
JSON string with group names, member token counts, and parent objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, and the description largely restates this ('Read-only', 'Side effects: Read-only. No files modified'), which earns no extra credit. The one genuine addition is the derivation rule — groups come from object declarations in AppStrings/DesignSystem — which explains what 'group' means and why the set is unfiltered, but no mention of ordering, scale limits, or whether results can be stale.
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?
Well front-loaded with the key fact ('Returns ALL semantic token groups') in the first line and cleanly sectioned by what/when/when-not/returns. The only waste is the triple restatement of read-only behavior ('Read-only' lead, the 'Side effects' line, and the annotations themselves), which could be collapsed to one clause.
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 zero-parameter, annotated, output-schema-backed read tool, the description covers purpose, scope ('ALL', unfiltered), group derivation, exclusion against list_tokens, and a return summary. Nothing an agent needs to decide or invoke correctly is missing.
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 takes zero parameters, which is the baseline-4 case; the description confirms 'Parameters: None' and does not mislead about any implicit filtering. No further parameter meaning is needed or possible.
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?
States a specific verb and resource: 'Returns ALL semantic token groups in the project', and grounds the concept with concrete examples ('Actions', 'Dashboard', 'Settings'). It also distinguishes itself from the closest sibling by naming list_tokens as the per-token alternative, so an agent can route correctly without opening either schema.
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 gives a when-to-use ('inspect the high-level semantic grouping of design tokens') and a when-NOT-to-use that names the alternative tool (list_tokens for individual tokens). The selection rule between the two siblings is fully specified, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_design_file_mappingsARead-onlyIdempotent
Returns current design/registry file mappings configured in .composebridge/config.json.
When to use:
- Call before modifying design tokens to inspect which files are mapped for colors, dimensions, and strings.
- Call to verify current target files when debugging token resolution issues.
When NOT to use:
- Do not use to configure or modify file mappings (use set_design_file_mapping instead).
- Do not use to list token names and values (use list_tokens instead).
Side effects:
- None (strictly read-only configuration lookup, does not modify any files).
Args:
project_root: Optional path to project root.
| Name | Required | Description | Default |
|---|---|---|---|
| project_root | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the 'Side effects: None (strictly read-only...)' section largely restates structured data. The genuinely additive fact is that mappings come from the .composebridge/config.json file, which is modest added context.
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?
Well front-loaded: one-line purpose followed by clearly labeled when-to-use, when-not-to-use, and side-effect sections. There is mild redundancy in repeating the read-only guarantee and in an Args line that echoes the schema, but no wasted prose.
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 read tool with rich annotations and an output schema, the description covers purpose, alternatives, and safety adequately. The only meaningful gap is the fallback behavior when project_root is not supplied.
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 single parameter has 0% schema description coverage, so the description must compensate, but it only offers 'project_root: Optional path to project root,' which essentially restates the parameter's title and null default. It does not say what happens when omitted (e.g., whether the current working directory or an auto-detected root 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?
States a specific verb and resource ('Returns current design/registry file mappings') plus the source of truth ('.composebridge/config.json'), so an agent can distinguish it from set_design_file_mapping and list_tokens without opening the schema.
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 explicit 'When to use' conditions (before modifying design tokens, when debugging token resolution) and explicit 'When NOT to use' exclusions that name the correct alternative siblings for each case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_diffARead-onlyIdempotent
Read-only. Returns before/after content and unified diff for a specific modified file.
What it does: Computes unified diff comparing original backup (.bridge.bak) with current on-disk content.
When to use: To inspect exact changes before approving (approve_file_changes) or rejecting (reject_file_changes).
When NOT to use: Use list_modified_files first to get valid paths. file_path should match the entry from list_modified_files (relative to project root).
Side effects: Read-only. No files modified.
Parameters:
- file_path: relative path to project root (e.g., 'QuickActionsWidget.kt' or 'ui/theme/AppStrings.kt').
Returns:
JSON string with original content, modified content, and unified diff.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds the concrete mechanism (diffing the .bridge.bak backup against on-disk content) and a 'no files modified' side-effect statement. The 'Read-only' lines duplicate the annotation, so the value beyond structured fields is solid but partly redundant.
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?
Front-loaded with the one-line purpose, then organized into labeled sections (What it does / When to use / When NOT / Side effects / Parameters / Returns). Slightly redundant in repeating 'Read-only' in both the opening and the side-effects line, but every section 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?
A single-parameter read tool whose description covers purpose, workflow positioning, path semantics, side effects, and return shape; an output schema also exists, so return values need not be detailed further. Nothing an agent needs to invoke it correctly is missing.
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 0%, so the description carries the full burden and does so: file_path is defined as relative to project root, with concrete example paths including a nested 'ui/theme/AppStrings.kt'. It also ties the parameter to entries returned by list_modified_files, which adds meaning the schema lacks.
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?
States a specific verb and resource: returns before/after content plus a unified diff for a specific modified file, and explains how the diff is computed (.bridge.bak backup vs current on-disk content). This clearly separates it from sibling read tools like list_modified_files and from the approve/reject mutators.
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 gives when to use (inspect exact changes before approving or rejecting), when not to use (call list_modified_files first to obtain valid paths), and names the sibling tools approve_file_changes and reject_file_changes as the downstream actions. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gradle_statusARead-onlyIdempotent
Check the status and result of a Gradle build job.
When to use:
- Call to poll background Gradle build status returned by run_gradle_build.
When NOT to use:
- Do not use if no Gradle job was started.
Side effects:
- None (strictly read-only job status query).
Args:
job_id: ID returned by run_gradle_build.
Returns:
JSON with {job_id, status: 'queued'|'running'|'completed'|'failed', result: {...}}.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/destructive/idempotent hints, so the 'strictly read-only' line is mostly redundant. The description nonetheless adds real behavioral value the annotations cannot: that this is a polling endpoint, that job_id is a background handle, and the status state machine (queued|running|completed|failed).
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?
Front-loaded purpose followed by labeled sections, which is easy to scan. A few lines (the 'Side effects: None' note, the Args/Returns headers) repeat structured data or boilerplate and could be trimmed without losing meaning.
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-parameter read tool this covers everything an agent needs: purpose, invocation condition, exclusion, argument provenance, and the shape and enumeration of the response. No output schema is required to disambiguate the return value.
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 0% — job_id is an undocumented string — so the description carries the burden, and it does: it identifies job_id as the ID returned by run_gradle_build, which tells the agent where to obtain the value. The expected format of the ID itself is still unspecified.
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?
States a specific verb and resource ('Check the status and result of a Gradle build job') and ties it to the sibling that produces the job, so an agent can separate it from run_gradle_build or list_allowed_gradle_tasks without opening the schema.
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?
Explicit 'When to use' (polling background status returned by run_gradle_build) and 'When NOT to use' (no Gradle job started) sections, naming the related tool directly. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ide_diagnosticsARead-onlyIdempotent
Fetches real-time compilation, unresolved reference, and syntax errors directly from Android Studio / IntelliJ IDE without running Gradle.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | ||
| timeout_seconds | No | ||
| include_warnings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, it discloses that results are real-time, come directly from the IDE, and do not trigger Gradle. It still omits operational details such as whether an IDE must be open or connected and what happens when the timeout expires or diagnostics are unavailable.
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 single sentence is front-loaded with the action and diagnostic types, then adds the useful IDE-source and no-Gradle constraints. There is no filler or redundant restatement of the tool name.
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 output schema removes the need to describe return fields, and the core operation is clear enough for a basic read-only call. Completeness is limited by undocumented optional parameters, missing IDE availability and failure behavior, and no explicit boundary with scan_project_diagnostics.
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 0%, and the description does not explain any of the three parameters. In particular, it never states that file_path optionally limits scope, how timeout_seconds affects the IDE request, or that include_warnings controls whether warnings accompany the reported errors.
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 gives a specific verb and resource: fetching compilation, unresolved-reference, and syntax errors from Android Studio or IntelliJ. "Without running Gradle" distinguishes it from build-based diagnostics, but it does not clearly differentiate the closer sibling scan_project_diagnostics.
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 wording supplies a clear use case: obtain current IDE-reported errors while avoiding a Gradle build. It does not explicitly say when to prefer scan_project_diagnostics or run_gradle_build, nor when file_path should be used to narrow the request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_naming_conventionARead-onlyIdempotent
Read-only analysis. Detects if project uses camelCase, snake_case, or PascalCase for tokens.
What it does: Analyzes existing tokens to detect whether project uses camelCase, snake_case, or PascalCase.
When to use: Use BEFORE creating new tokens with add_token or replace_pattern to maintain project consistency.
When NOT to use: Do not use to inspect actual token values; use list_tokens instead.
Side effects: Read-only. No files modified.
Parameters:
- token_type: 'dimension' (default) or 'color'.
Returns:
JSON string with detected style (e.g. 'camelCase'), confidence score, examples, and recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| token_type | No | dimension |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'Read-only analysis' and 'Side effects: Read-only. No files modified.' largely restate structured data. The description does add some value by naming the return payload fields (detected style, confidence score, examples, recommendations) and the fact that analysis is heuristic rather than exhaustive, but it discloses nothing about permissions, cost, or how confidence is derived.
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 labeled sections (What it does / When to use / When NOT to use / Side effects / Parameters / Returns) make it scannable and front-loaded. But the opening line and the 'What it does' line say the same thing, and the read-only guarantee appears three times, so several sentences do not earn their 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?
For a single-optional-parameter read tool this covers usage, alternatives, accepted parameter values, and the shape of the result. An output schema exists, so the Returns section is a bonus rather than a necessity, and the only remaining soft spot is that 'dimension' as a token type is never defined.
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 0% and the schema has no enum, so the description is doing real work by enumerating the accepted values 'dimension' (default) and 'color'. It does not explain what distinguishes a dimension token from a color token, which would have fully closed the gap.
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?
States a specific verb and resource: detects camelCase, snake_case, or PascalCase usage across project tokens. It also carves out a clear boundary against list_tokens, so an agent can distinguish it from the sibling that inspects token values without opening either schema.
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?
Explicit when-to-use: call before add_token or replace_pattern to keep new tokens consistent with the existing style. Explicit when-not-to-use: do not use it to read token values, use list_tokens instead. Both the positive and negative routing conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sync_statusARead-onlyIdempotent
Get the current sync status from the Bridge Server.
When to use:
- Call to inspect agent_busy, queue_count, and snapshot_version before running batch operations.
When NOT to use:
- Do not use to apply changes (use trigger_user_sync instead).
Side effects:
- None (strictly read-only state inspection).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The "Side effects: None (strictly read-only)" line largely restates readOnlyHint and destructiveHint=false, which annotations already declare. What it adds beyond the annotations is the set of state fields surfaced (agent_busy, queue_count, snapshot_version) and the operational timing hint for batch runs.
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?
Front-loaded one-line purpose followed by labeled When to use / When NOT / Side effects blocks, easy to scan. The side-effects bullet is partly redundant with the annotations, a small amount of wasted text.
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?
A zero-parameter read tool with an output schema and full annotation coverage needs little more; the description supplies purpose, timing guidance, and the alternative tool. Return-value formatting can be delegated to the 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?
Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The named state fields describe returned data rather than inputs, which is harmless but not a schema contribution.
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?
States a specific verb and resource ("Get the current sync status") and scopes it to the Bridge Server, and the When NOT section names the sibling trigger_user_sync so the agent can differentiate without opening a schema.
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?
Explicit when-to-use (inspect agent_busy, queue_count, snapshot_version before batch operations) plus an explicit when-not-to-use routing to trigger_user_sync for applying changes. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_impactARead-onlyIdempotent
Get impact analysis for a specific token.
When to use:
- Call BEFORE modifying or deleting a token to see every file and line that references it.
When NOT to use:
- Do not use if you already intend to change all occurrences without impact inspection.
Side effects:
- None (strictly read-only impact analysis).
Shows:
- All places where the token is used (file:line)
- The enclosing @Composable for each usage
- Total number of affected UI elements
Use this BEFORE changing a token to understand the impact.
Args:
token_name: "welcomeCardHeight" or "Primary"
project_path: optional — explicit path to project root.
Returns:
JSON with full impact analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| token_name | Yes | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and idempotentHint, so the 'Side effects: None (strictly read-only)' line is largely redundant. Beyond that, the description adds genuine behavioral context about the shape of the result — per-usage file:line locations and enclosing composables — which the annotations do not cover.
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 labeled sections make it scannable and front-loaded, but there is waste: the closing line 'Use this BEFORE changing a token to understand the impact' repeats the 'When to use' bullet verbatim in substance, and 'Side effects: None' restates the annotations. Trimming those two items would make the definition tighter.
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 two-parameter read-only analysis tool with an output schema already present, the definition covers purpose, timing, exclusions, parameter examples, and result contents, so an agent can invoke it correctly without guessing. The 'Returns: JSON with full impact analysis' line adds nothing beyond the output schema, but the overall coverage 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?
Schema description coverage is 0%, so the description must carry the burden, and it does: it gives concrete example values for token_name ('welcomeCardHeight' or 'Primary') and clarifies that project_path is an optional explicit project root. That said, it does not explain token_name semantics such as whether it accepts a key, a display name, or a dotted path.
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?
States a specific verb plus resource ('Get impact analysis for a specific token') and enumerates exactly what the analysis contains (file:line usages, enclosing @Composable, total affected UI elements). It is clearly distinct from data-mutation siblings like set_token or rollback_last, though it never names an alternative tool explicitly.
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 explicit 'When to use' ('Call BEFORE modifying or deleting a token') and 'When NOT to use' sections, plus a restated precondition. The agent knows exactly when this tool is the right choice and when to skip it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_siblingsARead-onlyIdempotent
Read-only. Returns semantically related tokens (e.g., Primary → PrimaryDark, PrimaryLight).
What it does: Finds related variants of a token based on naming patterns and semantic links.
When to use: When exploring related tokens or checking which color variants already exist.
When NOT to use: Does NOT include the original token. Returns empty list if no siblings.
Side effects: Read-only. No files modified.
Parameters:
- token_name: exact token name (e.g., 'Primary') or fully-qualified (e.g., 'AppColors.Primary').
Returns:
JSON string with list of sibling token names and current values.
| Name | Required | Description | Default |
|---|---|---|---|
| token_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, making the repeated 'Read-only' and 'No files modified' statements redundant. The description still adds useful behavioral context by specifying that the original token is excluded and that an empty list is returned when no siblings exist.
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 sectioned, front-loaded, and easy to scan, with only minor redundancy such as repeating read-only behavior twice and including a return-value summary despite an output schema. Most sentences earn their 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 a single-parameter read-only tool with rich annotations and an output schema, the description covers purpose, usage conditions, exclusions, parameter format, and return behavior. An agent has everything needed to call it 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?
Schema description coverage is 0%, so the description must carry parameter meaning. It does this well by explaining that token_name accepts either an exact name like 'Primary' or a fully-qualified name like 'AppColors.Primary', adding format detail beyond the bare string 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 states a specific verb and resource ('Returns semantically related tokens') with a concrete example (Primary → PrimaryDark, PrimaryLight) and distinguishes the result from the original token. An agent can understand the tool's unique function without opening the schema.
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?
It gives explicit when-to-use ('exploring related tokens or checking which color variants already exist') and when-not-to-use guidance (no original token, empty list if none exist). It does not name sibling alternatives such as list_tokens or find_token_by_color, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_allowed_gradle_tasksARead-onlyIdempotent
List gradle tasks that can be run via run_gradle_build.
When to use:
- Call to check which Gradle tasks are whitelisted for safe execution.
When NOT to use:
- Do not use to run builds (use run_gradle_build instead).
Side effects:
- None (strictly read-only whitelist listing).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 'side effects: none' line largely restates structured data. However, the description adds the meaningful concept of a whitelist policy that governs what can be executed, which is context not present in the 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?
Front-loaded purpose followed by clearly labeled when/when-not/side-effects sections; every line carries actionable routing or behavioral information with no filler.
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?
An output schema exists, so return values need not be described, and a zero-parameter read-only tool needs no further prerequisites. Nothing an agent needs to select and invoke it correctly is missing.
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 takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. Nothing in the description contradicts or misleads about inputs.
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 first sentence states a specific verb (list) and resource (Gradle tasks) and immediately ties it to a scope ('that can be run via run_gradle_build'). This distinguishes it clearly from the sibling run_gradle_build without requiring the schema to be opened.
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 names both the when-to-use condition ('check which Gradle tasks are whitelisted') and the when-not-to-use case with the alternative tool named ('use run_gradle_build instead'). No inference is required to route between the two.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_applied_patternsARead-onlyIdempotent
List all applied patterns that can be rolled back.
When to use:
- Call to inspect history of pattern refactorings before deciding to roll back.
- Call to retrieve valid pattern_ids for rollback_pattern.
When NOT to use:
- Do not use to revert changes (use rollback_pattern instead).
Side effects:
- None (strictly read-only journal lookup).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety behavior is well covered. The description adds that this is a strictly read-only journal lookup and that it returns rollback-eligible patterns, though the side-effects sentence largely repeats annotation information.
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 short and front-loaded, with clear sections for purpose, when to use, when not to use, and side effects. Every sentence supports correct tool selection or invocation.
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 empty parameter schema, rich annotations, output schema, and nearby rollback tools, the description supplies everything needed for selection and invocation. Return-value details can be delegated to the 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?
There are zero parameters, so the baseline is 4. The description adds no parameter detail, but none is needed because the schema has no 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 uses a specific verb-resource pair, 'List all applied patterns,' and qualifies scope as patterns that can be rolled back. It explicitly distinguishes this from rollback_pattern, so an agent can identify the tool without opening sibling schemas.
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?
It gives explicit when-to-use cases: inspecting refactoring history and retrieving valid pattern_ids for rollback_pattern. It also gives an explicit when-not-to-use case and names the correct alternative, rollback_pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modified_filesARead-onlyIdempotent
Read-only. Lists files modified by recent replace_pattern operations in the current session.
What it does: Queries the session journal to return all files currently in a modified state.
When to use: To see what files have unapproved changes before approving or rejecting.
When NOT to use: Does NOT persist across sessions. For git-based modifications use get_file_diff. Returns files in journal (not git status).
Side effects: Read-only. No files modified.
Parameters: None.
Returns:
JSON string with list of relative file paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered, but the description adds genuinely new behavior: results come from the session journal rather than git status and do not survive session boundaries. Minor credit lost for restating 'Read-only. No files modified.' twice, which duplicates readOnlyHint.
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?
Labeled sections are front-loaded and scannable, with the scoping caveat appearing before the tool is ever called. The only waste is the duplicated read-only statement in the opening line and the 'Side effects' section.
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 no-argument, read-only list tool this covers purpose, usage boundary, session lifetime, source of truth, and return shape. Nothing an agent needs in order to select or call it is missing.
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?
Zero parameters, so the baseline is 4; 'Parameters: None.' is consistent with the empty schema and prevents an agent from looking for filter arguments. Nothing further is needed or possible here.
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?
States a specific verb and resource ('Lists files modified by recent replace_pattern operations') plus the scoping qualifier 'in the current session'. That scope detail distinguishes it from the git-oriented sibling get_file_diff without the agent needing to open any schema.
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?
Contains explicit 'When to use' (reviewing unapproved changes before approve/reject) and 'When NOT to use' (cross-session persistence; git-based diffs → get_file_diff). It names the alternative and the condition that selects it, which is exactly what routing requires among 30+ siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_orphansARead-onlyIdempotent
List all orphan tokens (registered but never used).
When to use:
- Call during design system cleanup or dead code elimination.
When NOT to use:
- Do not use to delete tokens directly (must be removed manually or approved).
Side effects:
- None (strictly read-only orphan detection).
Orphan tokens are a sign of design system clutter.
Use this to identify tokens that can be safely removed
or that need to be used in the codebase.
Args:
project_path: optional — explicit path to project root.
Returns:
JSON with list of orphan tokens and their locations.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the 'None (strictly read-only)' side-effects note largely restates structured data. It does add useful context beyond annotations: that removal must be done manually or approved, and that output is JSON with token locations.
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?
Sectioned and front-loaded with the core statement first, so the important part is immediately visible. A few lines do not earn their place, notably the filler sentence 'Orphan tokens are a sign of design system clutter' and a redundant 'Returns' block given an output schema exists.
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 read-only listing tool, everything an agent needs is present: what the tool returns, when to use it, its non-destructive nature, and the caveat that it cannot remove anything. Output schema and annotations fill the remaining gaps.
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 0% and the single project_path parameter has no schema description, so the description must carry the load. 'optional — explicit path to project root' conveys optionality and intent, but leaves unstated what happens when omitted (implicit project discovery), so it only partially compensates.
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?
States a specific verb and resource ('List all orphan tokens') and immediately defines the filter in a parenthetical ('registered but never used'), which distinguishes it semantically from the sibling list_tokens. An agent can tell exactly what set of tokens it will get back.
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?
Explicit 'When to use' (design system cleanup, dead code elimination) and 'When NOT to use' (do not expect it to delete tokens) sections give clear context and one exclusion. It stops short of naming a concrete alternative sibling (e.g. list_tokens for all tokens), which would be the 5-level detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tokensARead-onlyIdempotent
List all design tokens in the project.
Returns a comprehensive report:
- Registered tokens (dimensions, colors)
- Hardcoded values that could become tokens
- Duplicate tokens (same value, different names)
- Orphan tokens (registered but unused)
When to use:
- Call to explore all existing design tokens (colors and dimensions) and hardcoded literals in the project.
- Call before adding or modifying tokens to understand the existing design system.
When NOT to use:
- Do not use for reverse hex lookup (use find_token_by_color instead).
- Do not use for editing token values (use set_token or add_token instead).
Side effects:
- None (strictly read-only design token inspection).
Args:
project_path: optional — explicit path to project root.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered; the description's "strictly read-only" line is largely redundant. What it does add of value is the shape of the result set — naming duplicate and orphan detection alongside registered and hardcoded values — which tells the agent this is an audit-style sweep rather than a simple enumeration.
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?
Front-loaded with the core action, then organized under clear labeled sections, so an agent can scan it quickly. The "Side effects: None" line duplicates the annotations and slightly dilutes an otherwise tight definition.
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 one-optional-parameter read tool with a full annotation set and an output schema, this covers purpose, return categories, exclusions, and the sole parameter. Nothing needed to invoke it correctly is missing; the only omission, default path resolution, is minor and inferable.
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 0% and the schema only says the single property is a string, so the description's "optional — explicit path to project root" materially adds both optionality and meaning. It stops short of explaining what happens when project_path is omitted (presumably auto-detection), leaving one small gap.
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?
States a specific verb and resource ("List all design tokens in the project") and enumerates exactly what the listing comprises: registered tokens, hardcoded literals, duplicates, and orphans. It is clearly separable from siblings like find_token_by_color, set_token, and add_token, which are named explicitly.
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 dedicated "When to use" and "When NOT to use" sections, and routes the agent to the correct alternative in each exclusion case (find_token_by_color for reverse lookup, set_token/add_token for edits). This is explicit when/when-not plus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_all_filesADestructive
Destructive: Reverts ALL pending changes using byte-level backup (.bridge.bak).
What it does: Rolls back byte-for-byte all files modified in the current journal session.
When to use: To completely discard all recent changes and return every file to its exact prior state.
When NOT to use: Use reject_file_changes for a single file. Use reject_all_files_force if some rollbacks may fail.
Side effects: Destructive rollback. Overwrites all modified files with their .bridge.bak backups and clears journal.
Parameters: None.
Returns:
JSON string with list of reverted files and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes further: it discloses the .bridge.bak byte-level backup mechanism, states that modified files are overwritten and the journal is cleared, and warns that rollbacks may fail (pointing to the force variant). That is material behavioral context beyond what the annotations carry.
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?
Front-loaded with the destructive warning and organized into labeled sections (What it does, When to use, When NOT, Side effects, Returns), which makes scanning fast. Minor redundancy: the Returns section restates what an output schema already covers, and 'Parameters: None.' is padding, but neither obscures the essentials.
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 zero-parameter destructive rollback, the description covers purpose, exclusions, side effects, backup mechanism, journal clearing, and the failure caveat. Nothing an agent needs in order to decide whether to call this or its siblings is missing.
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 takes zero parameters, so there is nothing to disambiguate and the schema is trivially complete; the description's 'Parameters: None.' is consistent with that. No extra meaning is needed or possible here, capping the realistic value at the baseline.
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?
Names a specific verb and scope: rolls back byte-for-byte all files modified in the current journal session. Together with the name and the explicit 'Destructive:' lead-in, an agent can distinguish this bulk rollback from single-file or force variants without reading any schema.
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?
Gives explicit when-to-use ('completely discard all recent changes') and when-not-to-use with named alternatives: reject_file_changes for a single file and reject_all_files_force when rollbacks may fail. Both exclusions and the sibling routing are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_all_files_forceADestructive
Destructive + Forceful. Clears the entire journal EVEN IF some rollbacks fail.
What it does: Forcefully attempts rollback and clears the journal unconditionally.
When to use: Use only when reject_all_files fails due to missing backups or file corruption.
When NOT to use: May leave files in inconsistent state. For safe rollback use reject_all_files.
Side effects: Destructive + Forceful: Clears all journal tracking regardless of whether every file reverted cleanly.
Parameters: None.
Returns:
JSON string with forced rollback results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds the crucial nuance beyond that: the journal is cleared even if some rollbacks fail, and files may be left inconsistent. That is exactly the consequence an agent needs before choosing the forceful path over the safe one.
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 header structure (what/when/when-not/side effects/returns) is front-loaded and scannable, with the destructive warning first. There is minor redundancy between the opening 'Destructive + Forceful' line, the 'What it does' sentence, and the 'Side effects' line restating the same unconditional-clear behavior.
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 zero-parameter destructive tool, the description covers the decision criteria, the risk, and the fallback, and an output schema already exists so return details need not be expanded. Nothing an agent needs to invoke this correctly is missing.
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 there is no semantics to convey; the description's 'Parameters: None.' correctly confirms this. Baseline for a no-parameter tool applies, with no added meaning possible.
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 gives a specific verb and resource ('forcefully attempts rollback and clears the journal unconditionally') and immediately contrasts it with the non-force sibling reject_all_files. An agent can distinguish it from approve_all_files and reject_all_files without opening any schema.
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?
It explicitly states the trigger condition ('only when reject_all_files fails due to missing backups or file corruption') and names the safe alternative to use otherwise. Both the when and the when-not are spelled out with the specific failure mode that selects this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_changeADestructive
Reverts a single granular change (hunk) in a file while keeping other changes intact.
What it does: Reverts only the specified hunk back to its original baseline on disk.
When to use: When one specific change in a file is unwanted, but other changes in the file should be kept.
Parameters:
- file_path: relative path to project root
- change_id: hunk ID (e.g. "h1", "h2") or line number
Returns:
JSON string with operation result and remaining changes.
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is known; the description adds real value by scoping the destruction to only the specified hunk and by stating it restores the baseline on disk. It doesn't mention whether the action can be undone or that the file must currently be in a modified state, which would be the remaining useful context.
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?
Labeled sections (What it does / When to use / Parameters / Returns) make it scannable and the core action is front-loaded in the first sentence. The headers are slightly heavy for a two-parameter tool but every line carries 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?
For a destructive single-hunk mutation with two required params and an output schema, the definition covers purpose, selection criteria, parameter formats, and result shape. The only gap is recovery/undo behavior and any precondition about the file being modified, which matters given the destructive hint.
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 0%, so the description carries the full burden, and it does compensate well: file_path is anchored to "relative path to project root" and change_id accepts either a hunk ID with concrete examples ("h1", "h2") or a line number. The ambiguity of how a bare line number resolves to a hunk is left unexplained, keeping it from a 5.
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 states a specific verb and resource ("Reverts a single granular change (hunk) in a file") plus a scope qualifier ("while keeping other changes intact"). That granularity implicitly but clearly distinguishes it from sibling tools like reject_file_changes and reject_all_files, which operate at file or batch level.
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 "When to use" line gives a clear selection condition: one unwanted change while keeping others in the same file. It stops short of naming the alternative (reject_file_changes) explicitly for the case where all changes should go, so it falls shy of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_file_changesADestructive
Destructive: Reverts pending changes for a SINGLE file using .bridge.bak backup.
What it does: Rolls back byte-for-byte to the state before the recent surgical edit or replace_pattern.
When to use: When modifications to a specific file are incorrect and need to be discarded.
When NOT to use: File must be currently modified. Use reject_all_files for all files.
Side effects: Destructive rollback. Overwrites file with original backup and removes entry from journal.
Parameters:
- file_path: relative path to project root (e.g., 'QuickActionsWidget.kt' or 'ui/theme/AppStrings.kt').
Returns:
JSON string confirming rollback of the file.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: annotations only say destructiveHint=true, while the description discloses that it restores byte-for-byte from a .bridge.bak backup, overwrites the file, and removes the entry from the journal, plus the precondition that the file must currently be modified. The gap is the undocumented `force` parameter, which plausibly bypasses that precondition and is never explained.
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?
Labeled sections (What it does / When to use / When NOT / Side effects / Parameters / Returns) make it scannable and front-load the destructive warning. Slightly verbose, and the Returns line is redundant given an output schema exists, but nothing is filler.
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 destructive, journal-backed rollback tool it covers mechanism, precondition, and side effects thoroughly, and the return value is covered by the output schema so it needn't be expanded. The only real hole is the unexplained `force` flag, which matters given the tool's destructive nature.
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 0%, so the description carries the full burden, yet it documents only file_path (with a relative-path rule and two concrete examples). The second parameter, `force`, is never mentioned, leaving an agent with no idea what it changes about the destructive behavior.
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?
States a specific verb and resource ("Reverts pending changes for a SINGLE file") and immediately names the mechanism (.bridge.bak backup), which distinguishes it from the sibling reject_all_files and from approve_file_changes. The "SINGLE file" emphasis paired with the explicit alternative makes it unambiguous which tool to pick.
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 explicit "When to use" (modifications are incorrect and need discarding) and "When NOT to use" (file must be currently modified; use reject_all_files for all files), naming the alternative sibling directly. This is the textbook when/when-not/alternative structure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_patternADestructive
DESTRUCTIVE BATCH OPERATION: Replaces ALL occurrences of a pattern across the project.
What it does: Creates new token + replaces usages. Can be rolled back via rollback_pattern(pattern_id).
When to use: When replacing a recurring conditional or hardcoded pattern across all files.
When NOT to use: USE dry_run=True FIRST to preview affected files. pattern_id must come from detect_conditional_variants.
Side effects: DESTRUCTIVE: Modifies multiple .kt files simultaneously. Records changes in journal.
Parameters:
- pattern_id: Unique pattern identifier from detect_conditional_variants.
- dry_run: If True (recommended first), previews changes without writing to disk.
Returns:
JSON string with replacements made, modified files, and created token name.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| pattern_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes further: it discloses that multiple .kt files are modified simultaneously, that a new token is created, that changes are recorded in the journal, and that rollback is available through rollback_pattern(pattern_id). That is meaningful behavior beyond the annotation flags and beyond a bare 'destructive' signal.
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?
Front-loaded with the destructive warning and organized under labelled sections, which suits a risky batch operation. There is mild redundancy in flagging DESTRUCTIVE twice (header and Side effects) and 'When NOT to use' is really a 'how to mitigate' instruction rather than an exclusion, but no sentence is wasted.
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 destructive, multi-file mutation with two parameters, the definition covers mechanism, prerequisites, mitigation, side effects, and recovery. An output schema exists and the description still summarizes the return payload (replacements, modified files, created token name), leaving no material gap.
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 0%, so the description carries the full burden and does so: pattern_id is tied to its required source tool, and dry_run is explained as a preview that writes nothing to disk, with a recommendation to run it first. Both parameters gain meaning they do not have in the bare 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?
States a specific verb and resource with explicit scope: 'Replaces ALL occurrences of a pattern across the project,' plus the mechanism 'Creates new token + replaces usages.' This clearly separates it from siblings such as set_token, set_text, and detect_conditional_variants, which an agent could otherwise confuse with a replacement operation.
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 explicit 'When to use' (recurring conditional or hardcoded pattern across all files) and 'When NOT to use' guidance that routes the agent to dry_run=True first. It also imposes an upstream dependency, stating pattern_id must come from detect_conditional_variants, and names rollback_pattern as the undo path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_lastADestructive
Reverts the LAST surgical edit made in the current session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is known. The description adds useful scoping — it destroys exactly one edit, the most recent, and only within the current session. It does not say what happens when there is nothing to roll back, whether repeated calls walk further back through history, or whether the rollback is itself reversible.
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?
A single sentence with zero filler, and the two load-bearing constraints (LAST, current session) are front-loaded where the agent will see them. Nothing is repeated from the schema or annotations.
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 tool is simple, has no parameters, and has an output schema so return values need no prose. What is missing is disambiguation from rollback_pattern and any statement about behavior at the boundaries (empty history, repeated invocation), which matters for a destructive operation that is explicitly non-idempotent.
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 takes zero parameters, so per the baseline this scores 4. The description correctly adds no parameter discussion, and the choice to take no arguments is consistent with 'LAST edit' semantics.
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?
States a specific verb and target: 'Reverts the LAST surgical edit made in the current session.' The scope qualifiers (LAST, current session) make the operation concrete. It does not, however, distinguish itself from the sibling rollback_pattern, which also sounds like a revert operation, so an agent must guess which one applies.
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 phrase 'LAST ... in the current session' implies when this is appropriate (undo the most recent edit), but there is no explicit when-to-use statement, no exclusion, and no mention of rollback_pattern as the alternative for pattern-level reverts. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_patternADestructive
Rolls back ALL changes made by a specific replace_pattern call.
When to use:
- Call when a pattern replacement resulted in unexpected UI behavior or compilation issues.
- Call to safely undo all file changes associated with a pattern_id.
When NOT to use:
- Do not use to revert single token edits (use rollback_last or reject_change instead).
- Do not use without a valid pattern_id from list_applied_patterns.
Side effects:
- DESTRUCTIVE: Modifies source files on disk to restore their pre-replacement states.
What it does: Requires pattern_id from the original replace_pattern response. All files are reverted byte-for-byte.
When to use: When a replace_pattern operation caused regressions and needs complete reversal.
When NOT to use: Cannot undo if files were modified externally. Use rollback_last for single-edit undo.
Side effects: Destructive rollback. Modifies all files touched by the pattern back to their prior state.
Parameters:
- pattern_id: The exact pattern_id from the original replace_pattern response.
Returns:
JSON string with list of reverted files and status.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known, but the description adds real context: files are reverted byte-for-byte to pre-replacement state, and the rollback cannot succeed if files were modified externally. It also names the provenance requirement (pattern_id from the original replace_pattern response). It does not mention partial-failure behavior or whether the rollback is atomic across files.
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 same content is delivered twice: a structured block (What it does / When to use / When NOT to use / Side effects) followed by a near-identical prose repetition of every one of those points. Roughly half the text is redundant, which inflates length without adding information and risks the agent treating the duplicate lines as distinct constraints.
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 purpose, usage, prerequisites, destructive side effects, and the parameter source, which is everything an agent needs to invoke it correctly; an output schema exists so return details need not be spelled out (the description restates them anyway). Minor gap: no guidance on what state the workspace is left in if only some files can be reverted.
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 0% and the single parameter has no schema description, so the description must carry the burden — and it does, specifying that pattern_id must be the exact value returned by the original replace_pattern response. That provenance detail is meaningfully beyond the bare 'string' type in 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?
States a specific verb (rolls back) and a specific resource scope (ALL changes made by a specific replace_pattern call), including the 'ALL' quantifier that separates it from single-edit undo. An agent can distinguish it from rollback_last and reject_change without opening any schema.
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 explicit 'When to use' (unexpected UI behavior, compilation issues, undoing by pattern_id) and 'When NOT to use' (single token edits -> rollback_last or reject_change; no valid pattern_id -> list_applied_patterns) sections. Alternatives and the condition selecting each are named outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_gradle_buildA
Run a Gradle task with async tracking support.
When to use:
- Call to verify that surgical edits or token refactorings compile without errors.
- Call after batch changes before approving or completing a task.
When NOT to use:
- Do not use for arbitrary shell execution; tasks are strictly whitelist-restricted.
- Do not use for simple file reading or AST validation (use check_syntax_cli or ast_finder instead).
Side effects:
- Executes a Gradle build process in background; may write build artifacts to build/ directories.
This lets the agent verify that code changes compile successfully
before continuing with more changes, without locking the MCP connection.
Args:
task: gradle task to run (whitelist enforced: assembleDebug, assembleRelease, test, lint, clean, etc.).
timeout_seconds: max execution time (default 5 min).
async_mode: if true (default), returns job_id immediately so agent can poll with get_gradle_status.
Returns:
JSON with job_id and status, or execution result if sync.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | assembleDebug | |
| async_mode | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that the build runs in the background, that it writes artifacts to build/ directories, that tasks are whitelist-restricted, and that async mode returns a job_id for polling with get_gradle_status. This explains why readOnlyHint=false without contradicting destructiveHint=false, since artifacts are build output rather than user data.
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?
Well front-loaded and sectioned (When to use / When NOT to use / Side effects / Args / Returns), so an agent can scan quickly. Slight redundancy: the paragraph 'This lets the agent verify that code changes compile…' restates the when-to-use bullets, and the Args/Returns text duplicates the input and output schemas.
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 non-readonly build-invocation tool with an output schema present, the description covers side effects, async lifecycle, and the follow-up tool. The only omission is a concrete pointer for discovering the full task whitelist, which would be useful given the incomplete enumeration.
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 0%, so the description carries the load and does document all three parameters: task with whitelist enforcement and example values, timeout_seconds with a 5-minute default, and async_mode with its default and downstream polling behavior. The whitelist list is left as 'etc.' and does not point to the sibling list_allowed_gradle_tasks, which would have closed the remaining gap.
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?
States a specific verb and resource ('Run a Gradle task') plus the differentiating trait 'with async tracking support'. An agent can distinguish it from get_gradle_status (polling) and list_allowed_gradle_tasks (enumeration) without opening any schema.
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?
Explicit when-to-use bullets (verify surgical edits compile, run after batch changes) and explicit when-NOT-to-use bullets that name the alternative tools (check_syntax_cli, ast_finder) for the cases this tool does not cover. The alternative-routing is fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_project_diagnosticsBRead-onlyIdempotent
Sequentially scans all Kotlin files in the project workspace to collect compilation errors and technical debt warnings without running Gradle.
| Name | Required | Description | Default |
|---|---|---|---|
| max_files | No | ||
| timeout_seconds | No | ||
| include_warnings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new context: the scan is sequential, static (no Gradle invocation), and project-wide, which hints at cost. It stops short of saying how expensive a full scan is or how partial results are signalled when bounds are hit.
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?
A single well-formed sentence with the scope and the key differentiator ('without running Gradle') front-loaded. No filler, though it is arguably too terse given three undocumented parameters.
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?
An output schema exists, so return values need not be described, and annotations carry the safety profile. The gap is the input side: three tunable parameters including a timeout and a file cap that govern runtime behavior are left entirely undocumented for what is potentially an expensive project-wide scan.
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 0% and none of the three parameters (max_files, timeout_seconds, include_warnings) are explained in the description. Worse, the prose says it collects 'technical debt warnings' while include_warnings defaults to false, leaving the agent to guess at the interaction.
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?
States a specific verb and resource ('Sequentially scans all Kotlin files in the project workspace') plus the outputs collected ('compilation errors and technical debt warnings'). The phrase 'without running Gradle' implicitly separates it from run_gradle_build, but no sibling is named explicitly.
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 'without running Gradle' clause implies this is a lightweight alternative to a Gradle build, which gives an agent a usable cue. However, it never states when to prefer this over get_ide_diagnostics or run_gradle_build, and gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_design_file_mappingADestructiveIdempotent
Sets a designated design/registry file in .composebridge/config.json for a token type.
When to use:
- Call when ComposeBridge stops with NEEDS_MANUAL_MAPPING because design system files are in non-standard paths.
- Call to lock designated target files for colors, dimensions, or strings.
When NOT to use:
- Do not use if the project uses standard design file locations (e.g., Color.kt, AppStrings.kt).
- Do not use for reading existing token mappings (use get_design_file_mappings instead).
Side effects:
- Modifies .composebridge/config.json on disk to persist file mappings.
Args:
token_type: 'color', 'dimension', 'string', or 'all'.
file_path: Relative path to the Kotlin file (e.g. 'composeApp/src/commonMain/kotlin/.../Color.kt').
project_root: Optional path to project root.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| token_type | Yes | ||
| project_root | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered; the description still adds the concrete side effect that .composebridge/config.json is modified on disk. It does not state whether an existing mapping for the same token_type is silently overwritten, which is the main remaining behavioral gap.
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 purpose sentence is front-loaded, and the labeled sections make scanning fast. The Args block repeats some of the schema, but given the zero coverage that repetition is functional rather than waste.
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 destructive config-mutating tool the description covers trigger, exclusions, alternative, and disk side effect, and an output schema exists to explain return values. Only the overwrite/conflict semantics of re-mapping an already-mapped token type are left unstated.
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 0%, so the description must carry the parameter meaning, and it largely does: it supplies the accepted token_type values ('color', 'dimension', 'string', 'all') that the schema does not enumerate, gives a relative-path example for file_path, and marks project_root optional. It stops short of stating path constraints or validation rules for file_path.
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?
Names a specific verb and resource (sets a design file mapping) and pinpoints the artifact it writes (.composebridge/config.json) for a given token type. An agent can distinguish it from get_design_file_mappings without opening either schema.
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 an explicit 'When to use' section tied to a concrete trigger (NEEDS_MANUAL_MAPPING from ComposeBridge) and a 'When NOT to use' section that names both the excluded condition (standard file locations) and the alternative sibling (get_design_file_mappings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_textADestructive
DESTRUCTIVE: Modifies .kt files. Surgically edit text content with automatic BridgeTextRegistry wrapping.
What it does: Modifies .kt files. Auto-migrates hardcoded text to BridgeTextRegistry for live preview.
When to use: When editing UI text strings, whether defined in AppStrings or hardcoded in Composable Text("...") elements.
When NOT to use: Do not use for colors or dimensions (use set_token or add_token).
Side effects: DESTRUCTIVE: Modifies source code on disk. Requires approve_file_changes before changes take effect in git. Can be reverted via reject_file_changes.
Parameters:
- token_name: reference key (e.g., 'AppStrings.Dashboard.title') OR exact old text content to replace.
- new_value: The new text string to set.
- file_path: relative path to source file (e.g., 'QuickActionsWidget.kt' or 'ui/theme/AppStrings.kt').
- line: optional line number for disambiguation if text appears multiple times.
Returns:
JSON string with success status, old_text, new_text, and modified file location.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | ||
| file_path | No | ||
| new_value | Yes | ||
| token_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds the real workflow consequences: writes on disk, requires approve_file_changes to land in git, and is revertible via reject_file_changes. It also discloses non-obvious auto-migration side effects. It does not mention scope of the edit when file_path is omitted, which keeps it from a 5.
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?
Labeled sections (What it does / When to use / When NOT / Side effects / Parameters / Returns) make it scannable and front-loaded with the DESTRUCTIVE warning. Minor redundancy: 'Modifies .kt files' appears twice in the first three lines.
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?
Output schema exists, yet the returns line still usefully names success status, old_text, new_text, and file location. The one real gap is that file_path is optional but the description never says what happens when it is omitted (search scope across files), which matters for a destructive edit.
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 0%, so the description carries the full burden and does: token_name is explained as either a reference key or literal old text, new_value as the replacement, file_path with path examples, and line as an optional disambiguator for repeated text. The dual-mode token_name semantics are otherwise undiscoverable.
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?
States a specific verb and resource ('Surgically edit text content', 'Modifies .kt files') plus the automatic BridgeTextRegistry wrapping behavior. It clearly distinguishes itself from the token-oriented siblings by declaring text strings as its domain.
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?
Gives an explicit 'When to use' covering both AppStrings-defined and hardcoded Text("...") cases, and an explicit 'When NOT to use' routing colors/dimensions to set_token or add_token. This is exactly the routing an agent needs against a large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_tokenADestructive
DESTRUCTIVE: Modifies .kt files. Surgically edit a design token value in source code.
What it does: Modifies .kt files containing the token definition. Notifies phone via WebSocket (live preview).
When to use: When adjusting a design token (color or dimension) and immediately observing visual feedback.
When NOT to use: Do not use for text strings (use set_text). Do not use for converting hardcoded values to tokens (use add_token).
Side effects: DESTRUCTIVE: Modifies source code on disk. Requires approve_file_changes to commit changes or reject_file_changes to revert.
Parameters:
- token_name: exact token name OR 'AppColors.TokenName' (e.g., 'Primary', 'cardCorner').
- value: '#RRGGBB' for colors or numeric for dimensions (e.g., '#FF1122', '24.dp').
Returns:
JSON string with update status, file path, and previous/new values.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| token_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes well beyond them: it discloses that source code on disk changes, that a WebSocket live preview is pushed to the phone, and that approve_file_changes must commit or reject_file_changes must revert. That approval-workflow dependency is exactly the kind of context annotations cannot convey.
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?
Labeled sections (What it does / When to use / When NOT to use / Side effects / Parameters / Returns) make it scannable and front-loaded. Minor redundancy: 'DESTRUCTIVE: Modifies .kt files' appears in the opening line and again under side effects, and the returns section partially duplicates the output schema.
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 destructive, two-parameter mutation tool, the description covers purpose, alternatives, on-disk consequences, the approval gate, and parameter formats. An output schema exists, so the brief Returns note is supplementary rather than the sole source of return-shape information, leaving no meaningful gap.
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 0% and both properties are bare strings, so the description carries the full burden. It supplies accepted formats and examples for each: token_name as either 'Primary' or 'AppColors.TokenName', and value as '#RRGGBB' or a numeric dimension like '24.dp'. This fully compensates for the empty 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?
States a specific verb and resource ('Surgically edit a design token value in source code') and immediately scopes it to .kt files containing the token definition. It explicitly names the siblings it is not (set_text, add_token), so an agent can disambiguate without opening any schema.
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 an explicit 'When to use' condition (adjusting a color or dimension with immediate visual feedback) and a 'When NOT to use' section that routes text edits to set_text and hardcoded-value conversion to add_token. Both alternatives are named with the condition that selects them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_token_splitARead-onlyIdempotent
Read-only analysis. Suggests splitting tokens used in multiple contexts.
What it does: Detects if a token is used in different contexts (e.g. cards and buttons) and proposes contextual splits.
When to use: Use BEFORE replace_pattern.
When NOT to use: For token impact analysis use get_token_impact. For sibling tokens use get_token_siblings.
Side effects: Read-only. No files modified.
Parameters:
- token_name: optional filter to analyze a specific token only.
- project_path: optional override for project root path.
Returns:
JSON string with split suggestions, proposed token names, and affected call sites.
| Name | Required | Description | Default |
|---|---|---|---|
| token_name | No | ||
| project_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only. No files modified' largely repeats structured data (twice, in the lead line and the Side effects line). The description does add one piece of behavior beyond annotations: the sequencing constraint that this must run before replace_pattern. No mention of cost, scope limits, or confidence of suggestions.
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?
Well-structured with labeled sections, front-loaded with the key constraint. The 'Read-only' claim appears in both the opening line and the Side effects field, and the Returns section duplicates the output schema, so a little space is wasted.
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 two-optional-parameter read-only analysis tool, the description covers purpose, preconditions, exclusions, parameter meaning, and output shape. Nothing an agent needs in order to call it correctly is missing.
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 0%, so the description must compensate; it does describe both parameters' purpose ('optional filter to analyze a specific token only', 'optional override for project root path'), which is meaningful. However, it adds no format or syntax detail (e.g. expected path shape or token name convention) that the bare schema lacks, so it only partly fills the gap.
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?
States a specific verb and resource ('suggests splitting tokens used in multiple contexts') plus a concrete detection criterion ('cards and buttons'). The explanation of 'what it does' makes it clearly distinguishable from generic token-editing 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?
Explicitly says to use it BEFORE replace_pattern, and names two exclusions with the correct alternatives (get_token_impact for impact analysis, get_token_siblings for sibling tokens). An agent needs no inference to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_user_syncADestructive
Trigger user_sync on the Bridge Server.
When to use:
- Call to flush and apply pending queued edits (dimensions and colors) from the Android device to source files.
When NOT to use:
- Do not use if the AI agent is actively modifying source files (agent_busy lock).
Side effects:
- Modifies source files on disk by applying pending changes from the queue.
Applies all queued edits (dimension + color) to the files.
Only works when the AI agent is not busy.
Returns:
JSON with {success, applied, skipped, errors}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the description's added value is the precondition (only works when the AI agent is not busy) and the disclosure that on-disk source files are mutated. It stops short of saying whether a failed run leaves partial edits, which matters for a non-idempotent destructive 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?
The labelled structure (when to use / when not to use / side effects) is scannable and front-loaded with the core action. There is mild redundancy in restating 'applies all queued edits (dimension + color)' a second time and in the Returns block, which duplicates the output schema.
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 zero-parameter, non-idempotent, destructive tool the description covers intent, precondition, side effect and result shape, and an output schema plus annotations carry the rest. The remaining gap is recovery guidance – nothing points at rollback_last if applied edits turn out to be wrong.
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 takes no parameters, so there is nothing for the description to disambiguate – the baseline applies. The only semantic detail given, that the queued edits cover dimensions and colors, is useful framing but not a parameter concern.
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 names a concrete operation (trigger user_sync on the Bridge Server) and states its effect: applying queued dimension and color edits to source files. That is enough to separate it from siblings such as get_sync_status or approve_file_changes, though those siblings are never named explicitly.
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?
It gives an explicit 'When to use' rule (flush and apply pending queued edits from the Android device) and an explicit 'When NOT to use' rule (the agent_busy lock, or the agent actively editing source files). The reader needs no inference to decide whether to call it.
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.
2 tool updates
v1.1.8- Added
get_ide_diagnostics - Added
scan_project_diagnostics
6 tool updates
- Added
analyze_design_scatter - Added
approve_change - Added
clean_cache - Added
get_design_file_mappings - Added
reject_change - Added
set_design_file_mapping
2 tool updates
v1.1.5- Added
get_gradle_status - Changed
run_gradle_build1 field changed- added
Input schema / properties / async_modeAdded value: +{ + "default": true, + "title": "Async Mode", + "type": "boolean" +}
27 tool updates
- Added
add_token - Added
approve_all_files - Added
approve_file_changes - Added
detect_conditional_variants - Added
find_token_by_color - Added
get_all_token_groups - Added
get_file_diff - Added
get_naming_convention - Added
get_sync_status - Added
get_token_impact - Added
get_token_siblings - Added
list_allowed_gradle_tasks - Added
list_applied_patterns - Added
list_modified_files - Added
list_orphans - Added
list_tokens - Added
reject_all_files - Added
reject_all_files_force - Added
reject_file_changes - Added
replace_pattern - Added
rollback_last - Added
rollback_pattern - Added
run_gradle_build - Added
set_text - Added
set_token - Added
suggest_token_split - Added
trigger_user_sync
27 tool updates
- Removed
add_token - Removed
approve_all_files - Removed
approve_file_changes - Removed
detect_conditional_variants - Removed
find_token_by_color - Removed
get_all_token_groups - Removed
get_file_diff - Removed
get_naming_convention - Removed
get_sync_status - Removed
get_token_impact - Removed
get_token_siblings - Removed
list_allowed_gradle_tasks - Removed
list_applied_patterns - Removed
list_modified_files - Removed
list_orphans - Removed
list_tokens - Removed
reject_all_files - Removed
reject_all_files_force - Removed
reject_file_changes - Removed
replace_pattern - Removed
rollback_last - Removed
rollback_pattern - Removed
run_gradle_build - Removed
set_text - Removed
set_token - Removed
suggest_token_split - Removed
trigger_user_sync
1 tool update
v1.1.0- Added
set_text
26 tool updates
v0.1.0- First observed
add_token - First observed
approve_all_files - First observed
approve_file_changes - First observed
detect_conditional_variants - First observed
find_token_by_color - First observed
get_all_token_groups - First observed
get_file_diff - First observed
get_naming_convention - First observed
get_sync_status - First observed
get_token_impact - First observed
get_token_siblings - First observed
list_allowed_gradle_tasks - First observed
list_applied_patterns - First observed
list_modified_files - First observed
list_orphans - First observed
list_tokens - First observed
reject_all_files - First observed
reject_all_files_force - First observed
reject_file_changes - First observed
replace_pattern - First observed
rollback_last - First observed
rollback_pattern - First observed
run_gradle_build - First observed
set_token - First observed
suggest_token_split - First observed
trigger_user_sync
TDQS
Scored across 36 tools
The core token-editing tools are largely distinct, but there is a dense, overlapping cluster of approval/rollback tools (approve_file_changes, approve_change, approve_all_files, reject_file_changes, reject_change, reject_all_files, reject_all_files_force, rollback_last, rollback_pattern) whose boundaries are hard to keep straight. Similarly get_ide_diagnostics vs scan_project_diagnostics and list_tokens vs get_all_token_groups overlap. Descriptions help but the set-level confusion is real.
Almost everything follows a snake_case verb_noun pattern (list_tokens, add_token, run_gradle_build, reject_file_changes). Minor inconsistency in verb choice for analogous operations (list vs get for listings, and various approve/reject/rollback verbs), but overall predictable.
36 tools is well above the comfortable range and the server bundles several distinct concerns (token design, file approval, gradle, sync, diagnostics, config) into one surface. While each concern has real functionality, the volume and the granular approval variants feel excessive rather than tightly scoped.
Coverage of the design-token lifecycle is strong: analysis, detection, edit, impact, approve/reject, and rollback are all present, plus gradle verification, sync, and config mapping. The main gap is no dedicated token deletion tool (orphans must be removed manually), and no explicit string-registry creation beyond set_text, but agents can work around these.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceLocal-first code intelligence and safety layer for AI coding agents. MCP server exposes dependency graph, impact analysis, and AST-compressed repo context, backed by typed local memory, patch-scope safety gates, and git-independent transaction rollback.1MIT

Vibgrate AI Contextofficial
AlicenseNot gradedqualityBmaintenanceLocal-first MCP server that gives AI assistants codebase intelligence—code graph, drift analysis, vulnerability attribution, and version-correct library docs—all from the user's machine.1,475 npm6Apache 2.0- FlicenseNot gradedqualityAmaintenanceMCP server that provides AI coding agents real Android development tools—Gradle, adb, logcat, lint, crash triage—through a local, permissioned interface. Enables agents to inspect projects, run safe Gradle tasks, capture logs/screenshots, and triage crashes.1-
- FlicenseNot gradedqualityBmaintenanceA local-first MCP server that gives AI coding agents durable project memory, dependency graphs, and impact analysis to answer team knowledge and cross-file change questions before editing.31 npm1-


