Skip to main content
Glama

Server Details

Design a React Native app in a browser and emit it as a real Expo project you own, iOS and Android.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 27 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but get_app_setup and get_component overlap in providing app-root provider information, and add_screen and emit_app both generate files from App Builder designs, which could cause slight hesitation.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (e.g., add_screen, get_component, propose_app), with no mixing of conventions.

Tool Count5/5

11 tools are well-scoped for a complex app-building workflow that covers design, emission, component discovery, installation, updates, and verification; each tool earns its place.

Completeness4/5

The surface covers the core lifecycle from design to verification, but lacks explicit removal/uninstall operations and a dedicated tool to list current project components or files, leaving minor gaps.

Available Tools

11 tools
add_screenAdd a screen to an appB
Read-onlyIdempotent
Inspect

Needs a subscription. Adds one screen designed in the App Builder to a project. With the project's .opointo/files.json it returns the screen file, the route that mounts it and the one line to register it, and never rewrites existing files. Without it, a self-contained screen file for any Expo app.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNonest it in this tab's stack; omit to place it where the design does
appIdYesthe share code from "Send app to agent"
screenNothe new screen's name in that design
manifestNothe parsed .opointo/files.json
componentNameNoonly to add a second copy of a screen; omit for the export's name

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says the tool 'Adds one screen designed in the App Builder to a project' and 'never rewrites existing files,' which implies a write operation creating or modifying files. This contradicts the readOnlyHint=true annotation, which declares the tool does not modify its environment. Even though it later says it 'returns the screen file,' the initial framing is inconsistent with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise and front-loads the subscription requirement and core action. It could be structured more clearly (e.g., separating prerequisites from behavior), but it avoids waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, nested object, no output schema) and the rich annotations, the description covers the subscription requirement, return values, two operational modes, and file-safety behavior. It is nearly complete, though it fails to resolve the read-only tension cleanly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the effect of the manifest parameter: with it, the tool returns the screen file, route, and registration line; without it, a self-contained screen file. This clarifies the two invocation modes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Adds one screen designed in the App Builder to a project.' It does not differentiate from sibling tools like propose_screen or emit_app, and the verb 'Adds' creates some ambiguity, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage via the subscription prerequisite and the two modes based on whether .opointo/files.json is supplied, but it does not name alternatives (e.g., propose_screen) or explicitly say when not to use this tool. Guidance is present but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_snippetCheck code for blank-render bugsA
Read-onlyIdempotent
Inspect

Scans TSX that uses these components for the mistakes that render nothing with no error: animated opacity on glass, the flex: 1 collapse, a clipped lens, a conditionally mounted surface. A read-only text scan, not a guarantee; verify_app checks a whole emitted project.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesthe TSX to check

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world. The description adds genuine value beyond them by clarifying it is a 'read-only text scan, not a guarantee' and therefore best-effort rather than exhaustive — a limitation an agent would otherwise not know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the bug classes and closed with the scope caveat and sibling routing. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly conveys expected findings (blank renders with no error) and sets expectations that results are heuristic, not guaranteed. Nothing needed 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and there is only one parameter ('code', 'the TSX to check'), so the schema already carries the semantics. The description adds nothing about the input format or size limits, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Scans') and resource ('TSX that uses these components') and enumerates the exact bug classes it detects. It is clearly distinguishable from verify_app, which it explicitly names as the project-wide alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames this as a narrow per-snippet check and routes whole-project validation to verify_app. It stops short of stating explicit exclusions or prerequisites (e.g. what happens if the snippet lacks these components), so it is strong but not fully prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emit_appBuild an app from a designA
Read-onlyIdempotent
Inspect

Needs a subscription. Turns an App Builder design into a working Expo app: navigation, providers, tab bar, screens and the components they use. Returns a recipe for the current project: every file with its target path, one install line and ordered steps with a check each. Pass step for one step in full, which does not count against the daily allowance.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNofor step write or review; each page names the next
stepNoa step id from the recipe, or "review" for the screen list
appIdYesthe share code from the App Builder's "Send app to agent", e.g. "34ca4babb2"
overrideNoemit even with screens flagged not ready; ask the customer first

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered; the description adds real value beyond them by disclosing the subscription requirement, the daily allowance and the fact that per-step calls are exempt. It does not describe write behavior or error conditions, keeping 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the gating prerequisite and then the operation and return contract. Every sentence carries weight; only minor compression is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly summarizes the return shape (files with target paths, an install line, ordered steps with checks). Combined with the subscription and quota notes, an agent has enough to call it correctly, though error/edge behavior for invalid appId is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema lacks: `step` yields one step in full and is exempt from the daily allowance, and it cross-references the recipe as the source of valid step ids. That is genuine meaning beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-and-resource relationship: it transforms an App Builder design into a working Expo app, then enumerates the concrete artifacts (navigation, providers, tab bar, screens, components). The return contract ('a recipe: every file with its target path, one install line and ordered steps') further distinguishes it from siblings like propose_app and verify_app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear prerequisite ('Needs a subscription') and instructs the agent on the `step` mode including its quota behavior ('does not count against the daily allowance'). It does not explicitly route between alternatives such as propose_app or verify_app, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_componentFind a componentA
Read-onlyIdempotent
Inspect

Finds the component for a UI need described in plain words, ranked, and says when this catalog ships nothing on purpose because the phone's own control is the right choice. Omit need to list every component with its purpose and whether it renders the real system control.

ParametersJSON Schema
NameRequiredDescriptionDefault
needNoe.g. "a progress bar for an upload"
categoryNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value the annotations cannot: results are ranked, and the catalog may intentionally return nothing when the platform's native control is preferable — a non-obvious negative-result contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences with no filler, leading with what the tool does and the ranking behavior before the omit-need shortcut. Slightly dense phrasing ('ships nothing on purpose') but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully sketches what comes back (ranked components, purpose text, whether a real system control renders). The only notable gap is the unexplained `category` enum, which the schema also fails to document.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, and the description only compensates for `need` (omit it to list all). The `category` enum (controls/chrome/surfaces) is left entirely undefined in both schema and description, so the agent must guess what those buckets mean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Finds the component') scoped to a plain-language UI need, and adds the distinctive behavior of ranked results plus deliberate-absence signaling. It implicitly separates itself from the id-lookup sibling (get_component) but never names it, so differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one concrete usage rule: omitting `need` lists every component with purpose and system-control status. Beyond that it offers no when-to-use versus alternatives guidance or prerequisites for the ranked search path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_app_setupGet the app setupB
Read-onlyIdempotent
Inspect

How an app is set up so these components work and follow its theme, one topic at a time: the app-root providers in the order that works, the theme hooks and token scales, or the rules that hold across the whole catalog. An app built by emit_app already has all three wired.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes
platformNorules only

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is fully covered and the description need not repeat it. It adds only that results are scoped per topic and are conceptual guidance rather than live state. No error, pagination, or freshness behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence opens with the fragment 'How an app is set up so these components work and follow its theme, one topic at a time:', which is not a clause and delays the actionable content. The enumerated topics arrive only after a heavy preamble, so the definition is not front-loaded and reads awkwardly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return content, and it does so for all three topics. The emit_app note gives useful context about when the setup is already wired. Only the platform-scoping behavior for 'rules' is undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, so the description must compensate — and it does for the required 'topic' parameter by explaining what each of the three enum values yields (providers/theme/rules). The optional 'platform' parameter's 'rules only' constraint is left entirely to the schema, which is the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (app setup guidance) and enumerates the three concrete outputs — app-root providers in working order, theme hooks and token scales, or catalog-wide rules — so an agent knows what each topic returns. The verb is buried ('How an app is set up...'), but the content is specific enough to separate it from siblings like get_component or find_component. It stops short of explicitly contrasting with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'one topic at a time' and the enum values tell the agent how to call it, and 'An app built by emit_app already has all three wired' hints that the tool may be redundant after emit_app. There is no explicit when-to-use/when-not rule or named alternative for looking up component details, so guidance stays inferential.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_componentGet a componentA
Read-onlyIdempotent
Inspect

Everything needed to write a correct call site for one component: props with types, defaults and allowed values, what draws on iOS and on Android, the providers it needs at the app root, its dependencies, and the runtime rules that stop it rendering blank.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYese.g. "button"
platformNoonly the rules that hold there

TDQS

A3.8/5.0
Behavior4/5

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 adds genuine behavioral context beyond that: it discloses the shape of the response, per-platform rendering differences, required root providers, and 'runtime rules that stop it rendering blank' — useful for an agent deciding whether the call is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense, front-loaded sentence that lists exactly what comes back with no filler. Slightly list-like and could be scannable as bullets, but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden of describing the return payload and does so thoroughly — props, defaults, allowed values, platform rendering, providers, dependencies and runtime rules. Nothing an agent needs 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds no information about slug or platform beyond the schema (the enum and 'only the rules that hold there' note live in the schema itself). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear resource and scope: it returns everything needed to write a call site for one component, enumerating props/types/defaults, platform rendering, providers, dependencies and runtime rules. An agent can distinguish it from find_component (discovery) and install_component (mutation/installation), though 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The framing 'everything needed to write a correct call site' implies pre-use before installing or emitting a component, but there is no explicit when-to-use, when-not-to-use, or named alternative such as find_component. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

install_componentInstall a componentA
Read-onlyIdempotent
Inspect

Needs a subscription, except for the free foundation components. Adds one component to an existing project: the files it and its dependencies need in install order with exact target paths, the single expo install line, the providers it needs and its runtime rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYese.g. "button" or "bottom-sheet"

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds the subscription gate and spells out the returned payload (install order, exact target paths, expo install line, provider/runtime requirements), going meaningfully beyond 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, with the eligibility condition front-loaded before the functional description, and no filler. The second sentence is a dense run-on list, but every item earns its place by telling the agent what the call returns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value, and it does so concretely (file list with target paths, install line, providers, runtime rules). Combined with the subscription caveat, an agent has what it needs to call and interpret the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single slug parameter is already documented with examples ("button", "bottom-sheet"). The description adds no additional slug semantics such as valid identifier forms or lookup behavior, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Adds one component to an existing project") and then enumerates exactly what the call yields (files in install order with target paths, the expo install line, providers, runtime rules), which separates it from siblings like get_component or find_component. It is clear but does not name an alternative to disambiguate from add_screen/update_components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause gives a real precondition ("Needs a subscription, except for the free foundation components"), which is useful gating context. However, there is no explicit when-to-use vs. when-not guidance and no reference to sibling tools such as find_component for discovery or update_components for edits, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_appPropose an app designAInspect

Your agent can design an app with you: send an app in opointo's design format (the AppSpec emit_app builds from) and get back a link that opens it in the App Builder as a new, unsaved design. The person sees every screen and the navigation, changes what they like, and hands it back for emit_app. Each problem comes back with its path and a fix. dryRun checks without making a link; format: true returns the format and every block.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoThe design: { name, tabs: [{ screenId, label }], screens: [{ id, name, composition: { screen: { content: { children: [node] }, chrome: { header?, headerItems?, floating: [] }, overlays: [] } } }], onboardingScreenIds: [], pushed: [{ screenId, fromScreenId, presentation }], theme? }. A node is { id, slug, props }: slug is "wireframe:<block>" such as "wireframe:list-row" (a list whose rows open one screen is one row block with repeats: "true" and its sample rows in rows: [{ title, ... }]) or a component from find_component, and a content node opens a screen with navigate: { to, presentation } beside its props. A top bar is header: { id, slug: "header", props: {} }, titled by the screen's name; a sheet has none. entryScreenId is only for a splash screen before the tabs. Tab icons, titles and composition metadata are set by the builder.
dryRunNocheck the design and report, without making a link
formatNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark it non-read-only, non-destructive and non-idempotent, and the description usefully adds that the result is an unsaved design (no persistence), that validation errors come back with a path and a fix, and that dryRun/format flags alter behavior. This is genuine behavioral context beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the link result, then the dryRun/format caveats. The narrative middle ('The person sees every screen ... hands it back') is somewhat verbose but conveys the intended human-in-the-loop workflow, so it earns most of its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-schema tool with no output schema, the description adequately explains what comes back (a link, or per-problem paths and fixes) and the flag-driven modes. A mention of the missing output shape or error/return specifics for the success path would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the 'format' parameter has no schema description, yet the description documents it ('returns the format and every block'), and dryRun is clarified as 'check ... without making a link'. The bulky app schema is mostly self-documenting, so description adds value where the schema is silent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('design an app', 'send an app ... get back a link') and names the counterpart tool emit_app, so an agent can tell it apart from the emit path. It does not differentiate from the sibling propose_screen, which shares the 'propose' naming, leaving some ambiguity between the app-level and screen-level variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is clear: send a design to preview it as an unsaved App Builder link, then hand it back to emit_app. It also explains the dryRun branch ('checks without making a link'). No explicit when-not-to-use or alternatives beyond emit_app are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_screenPropose a screen designAInspect

Your agent can design a single screen with you: send one screen in opointo's design format (the Composition add_screen builds from) and get back a link that opens it in the App Builder as a new, unsaved design the person can change. Each problem comes back with its path and a fix. dryRun checks without making a link; format: true returns the format. For a whole app with navigation, propose_app is the matching tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNocheck the screen and report, without making a link
formatNo
compositionNoOne screen: { name, screen: { content: { children: [node] }, chrome: { header?, headerItems?, floating: [] }, overlays: [] } }. A node is { id, slug, props }: slug is "wireframe:<block>" or a component from find_component.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing that the result is a new, unsaved design the person can edit, that validation problems come back with path and fix, and that dryRun reports without creating a link. Annotations only carry the generic non-destructive/not-idempotent profile, so this adds real behavioral value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and return value, then sibling routing. Slightly dense with parentheticals but every sentence carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description covers the return (an App Builder link) and error shape, plus both boolean flags and the composition source. The only thin spot is what the format mode actually emits, a minor gap for a 3-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond the 67%-covered schema: it explains dryRun ('checks without making a link') and format ('format: true returns the format'), while composition's structure is documented in the schema itself. It stops short of fully defining the format-mode output, but the two behavioral flags are well clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('design a single screen', 'send one screen ... get back a link') and explicitly contrasts itself with the sibling propose_app ('For a whole app with navigation, propose_app is the matching tool'), so an agent can separate them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to reach for this tool (single screen in the Composition format that add_screen builds from) and names the alternative for the whole-app case. It lacks explicit when-not-to-use conditions beyond that sibling pointer, but the routing guidance is solid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_componentsUpdate supplied componentsA
Read-onlyIdempotent
Inspect

Needs a subscription. Reads the project's .opointo/files.json and returns only the opointo-supplied files that changed since export, so it works months later with no share code. Never touches the customer's own screens, and flags the rare change that needs a code edit rather than a copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
currentNoonly when a split-unverified blocker asks: each named file's hash, from its command
manifestYesthe parsed .opointo/files.json (the object or its files array)
acceptSplitNoonly once the customer agreed: the paths split-customer-edited blockers name

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, and the description resolves the tension with the 'update' name by clarifying it only reads and returns changed files. It adds useful context beyond annotations: subscription requirement and the guarantee that it 'never touches the customer's own screens.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with essentially no filler, though the leading 'Needs a subscription' puts a precondition ahead of the primary purpose rather than front-loading what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full schema coverage and clear annotations, the description covers the key behavior including what it returns and what it avoids touching. Return-format detail is light, but annotations and schema carry the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents manifest, current, and acceptSplit in detail. The description adds only an oblique reference to changes needing a code edit and does not expand on any parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific action set — reads the project's .opointo/files.json and returns only opointo-supplied files that changed since export — which is far more concrete than the ambiguous name 'update_components'. However, it does not explicitly distinguish itself from siblings such as install_component or get_component, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A precondition is stated ('Needs a subscription') and the description implies the re-export/months-later scenario, but it never says when to choose this over install_component, get_component, or check_snippet. Usage is implied rather than contrasted with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_appVerify an emitted appA
Read-onlyIdempotent
Inspect

Needs a subscription. Checks an emitted app before it is built: missing files, altered copy-verbatim files, absent packages, the config merge expo-router needs, and whether the installed Xcode can build the project. Takes the files written with byte sizes, package.json dependencies, project config and toolchain versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNothe share code given to emit_app; `appId` in .opointo/files.json
filesYeseach file written, the hidden .opointo/files.json included: { path, bytes }, path from the project root
configNo
toolchainNo
dependenciesNopackage.json dependencies' keys

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds value beyond them by disclosing the subscription requirement and the pre-build validation role, but says nothing about how findings are reported or whether it fails fast vs. collecting all issues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler; the subscription prerequisite and pre-build framing are front-loaded. The long comma-separated checklist is information-rich but slightly compressed, which is acceptable for the amount it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with nested objects and no output schema, the description covers inputs, precondition, and the nature of the checks performed, which implicitly describes what the caller learns back. It stops short of describing result shape or error behavior, a minor gap given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60% and the description only restates the input families (files with byte sizes, package.json dependencies, project config, toolchain versions) without adding format or semantic detail beyond what the schema documents. Under the high-coverage baseline rule this is a straight 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('Checks an emitted app before it is built') and enumerates the concrete failure classes it detects (missing files, altered copy-verbatim files, absent packages, expo-router config merge, Xcode buildability). This clearly separates it from siblings like emit_app, check_snippet and propose_app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the operative timing context — run before the app is built — and the gating prerequisite ('Needs a subscription'), which is exactly the kind of usage guidance an agent needs. It does not name alternatives or state when not to use it, so it stops short of a 5.

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.

  1. 4 tool updates
    • Changedadd_screen2 fields changed
      • changedInput schema / properties / componentName / description
        Previous value: -"e.g. \"InvoiceScreen\""New value: +"only to add a second copy of a screen; omit for the export's name"
      • changedInput schema / properties / tab / description
        Previous value: -"nest it in this tab's stack; omit for the root, which covers the tab bar"New value: +"nest it in this tab's stack; omit to place it where the design does"
    • Changedpropose_app3 fields changed
      • changedInput schema / properties / app / description
        Previous value: -"The design: { name, tabs: [{ screenId, label }], screens: [{ id, name, composition: { screen: { content: { children: [node] }, chrome: { header?, headerItems?, floating: [] }, overlays: [] } } }], onboardingScreenIds: [], pushed: [{ screenId, fromScreenId, presentation }], theme? }. A node is { id, slug, props }: slug is a component from list_components or \"wireframe:<block>\" such as \"wireframe:list-row\" (a list whose rows open one screen is one row with repeats: \"true\"), and a content node opens a screen with navigate: { to, presentation }. A top bar is header: { id, slug: \"header\", props: {} }, titled by the screen's name. entryScreenId is only for a splash screen before the tabs. Tab icons, titles and composition metadata are set by the builder."New value: +"The design: { name, tabs: [{ screenId, label }], screens: [{ id, name, composition: { screen: { content: { children: [node] }, chrome: { header?, headerItems?, floating: [] }, overlays: [] } } }], onboardingScreenIds: [], pushed: [{ screenId, fromScreenId, presentation }], theme? }. A node is { id, slug, props }: slug is \"wireframe:<block>\" such as \"wireframe:list-row\" (a list whose rows open one screen is one row block with repeats: \"true\" and its sample rows in rows: [{ title, ... }]) or a component from find_component, and a content node opens a screen with navigate: { to, presentation } beside its props. A top bar is header: { id, slug: \"header\", props: {} }, titled by the screen's name; a sheet has none. entryScreenId is only for a splash screen before the tabs. Tab icons, titles and composition metadata are set by the builder."
      • addedInput schema / properties / format
        Added value: +{
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "app"
        -]
    • Changedpropose_screen3 fields changed
      • changedInput schema / properties / composition / description
        Previous value: -"One screen: { name, screen: { content: { children: [node] }, chrome: { header?, headerItems?, floating: [] }, overlays: [] } }. A node is { id, slug, props }: slug is a component from list_components or \"wireframe:<block>\"."New value: +"One screen: { name, screen: { content: { children: [node] }, chrome: { header?, headerItems?, floating: [] }, overlays: [] } }. A node is { id, slug, props }: slug is \"wireframe:<block>\" or a component from find_component."
      • addedInput schema / properties / format
        Added value: +{
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "composition"
        -]
    • Changedverify_app3 fields changed
      • changedInput schema / properties / appId / description
        Previous value: -"the share code given to emit_app"New value: +"the share code given to emit_app; `appId` in .opointo/files.json"
      • changedInput schema / properties / files / description
        Previous value: -"each file written: { path, bytes }, path from the project root"New value: +"each file written, the hidden .opointo/files.json included: { path, bytes }, path from the project root"
      • changedInput schema / required
        Previous value: -[
        -  "appId",
        -  "files"
        -]New value: +[
        +  "files"
        +]
  2. 15 tool updates
    • Changedadd_screen7 fields changed
      • addedInput schema / properties / appId
        Added value: +{
        +  "description": "the share code from \"Send app to agent\"",
        +  "type": "string"
        +}
      • changedInput schema / properties / componentName / description
        Previous value: -"React component name, e.g. \"InvoiceDetail\". Defaults to GeneratedScreen."New value: +"e.g. \"InvoiceScreen\""
      • removedInput schema / properties / compositionId
        Removed value: -{
        -  "description": "share code for the new screen, from the App Builder",
        -  "type": "string"
        -}
      • changedInput schema / properties / manifest / description
        Previous value: -"the parsed .opointo/files.json from the project root"New value: +"the parsed .opointo/files.json"
      • addedInput schema / properties / screen
        Added value: +{
        +  "description": "the new screen's name in that design",
        +  "type": "string"
        +}
      • changedInput schema / properties / tab / description
        Previous value: -"nest it in this tab's stack so the tab bar stays visible. Omit to put it at the root, where it covers the tab bar (right for a modal)."New value: +"nest it in this tab's stack; omit for the root, which covers the tab bar"
      • changedInput schema / required
        Previous value: -[
        -  "compositionId",
        -  "manifest"
        -]New value: +[
        +  "appId"
        +]
    • Changedcheck_snippet1 field changed
      • changedInput schema / properties / code / description
        Previous value: -"the TSX snippet to check"New value: +"the TSX to check"
    • Changedemit_app4 fields changed
      • changedInput schema / properties / appId / description
        Previous value: -"the share code, e.g. \"34ca4babb2\""New value: +"the share code from the App Builder's \"Send app to agent\", e.g. \"34ca4babb2\""
      • changedInput schema / properties / override / description
        Previous value: -"emit even when screens are flagged as not ready. Ask the customer first; the flags exist for a reason."New value: +"emit even with screens flagged not ready; ask the customer first"
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "for step write or review; each page names the next",
        +  "type": "number"
        +}
      • addedInput schema / properties / step
        Added value: +{
        +  "description": "a step id from the recipe, or \"review\" for the screen list",
        +  "type": "string"
        +}
    • Removedemit_screen
    • Changedfind_component2 fields changed
      • addedInput schema / properties / category
        Added value: +{
        +  "enum": [
        +    "controls",
        +    "chrome",
        +    "surfaces"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "need"
        -]
    • Addedget_app_setup
    • Changedget_component1 field changed
      • addedInput schema / properties / platform
        Added value: +{
        +  "description": "only the rules that hold there",
        +  "enum": [
        +    "ios",
        +    "android"
        +  ],
        +  "type": "string"
        +}
    • Removedget_provider_tree
    • Removedget_rules
    • Removedget_step
    • Removedget_theme_tokens
    • Changedinstall_component1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"the component slug, e.g. \"button\" or \"bottom-sheet\""New value: +"e.g. \"button\" or \"bottom-sheet\""
    • Removedlist_components
    • Changedupdate_components3 fields changed
      • changedInput schema / properties / acceptSplit / description
        Previous value: -"only after the customer agreed to replace a file they edited: the paths named by `split-customer-edited` blockers"New value: +"only once the customer agreed: the paths split-customer-edited blockers name"
      • changedInput schema / properties / current / description
        Previous value: -"only when a `split-unverified` blocker asks for it: the hash of each named file on disk, from the command the blocker gives"New value: +"only when a split-unverified blocker asks: each named file's hash, from its command"
      • changedInput schema / properties / manifest / description
        Previous value: -"the parsed contents of .opointo/files.json from the project root (the whole object, or just its `files` array)"New value: +"the parsed .opointo/files.json (the object or its files array)"
    • Changedverify_app14 fields changed
      • changedInput schema / properties / appId / description
        Previous value: -"the share code you passed to emit_app"New value: +"the share code given to emit_app"
      • changedInput schema / properties / config / properties / moduleSuffixes / description
        Previous value: -"tsconfig compilerOptions.moduleSuffixes"New value: +"tsconfig compilerOptions"
      • changedInput schema / properties / config / properties / nativeModulesDir / description
        Previous value: -"package.json expo.autolinking.nativeModulesDir; omit if unset. Checked when the recipe ships a native module in src/modules. Unset, that module is never linked and the app crashes on Android at first render"New value: +"package.json expo.autolinking; omit if unset"
      • changedInput schema / properties / config / properties / plugins / description
        Previous value: -"app.json plugins"New value: +"app.json"
      • changedInput schema / properties / config / properties / scheme / description
        Previous value: -"app.json scheme"New value: +"app.json"
      • changedInput schema / properties / config / properties / userInterfaceStyle / description
        Previous value: -"app.json userInterfaceStyle"New value: +"app.json"
      • changedInput schema / properties / dependencies / description
        Previous value: -"the keys of package.json's dependencies"New value: +"package.json dependencies' keys"
      • changedInput schema / properties / files / description
        Previous value: -"what you actually wrote: { path, bytes } per file, path relative to the project root. `bytes` must be the file's size in BYTES on disk (what `wc -c` reports), not its character count — the two differ for any file containing a non-ASCII character."New value: +"each file written: { path, bytes }, path from the project root"
      • changedInput schema / properties / files / items / properties / bytes / description
        Previous value: -"size in bytes on disk, as `wc -c` reports"New value: +"size in bytes on disk as `wc -c` reports, not the character count"
      • changedInput schema / properties / files / items / properties / sha / description
        Previous value: -"optional; when present it is authoritative and the byte check is skipped for that file"New value: +"optional; when sent, the byte check is skipped"
      • changedInput schema / properties / toolchain / properties / enableSceneSupport / description
        Previous value: -"app.json → expo-build-properties → ios.enableSceneSupport"New value: +"app.json expo-build-properties ios.enableSceneSupport"
      • changedInput schema / properties / toolchain / properties / expoBuildProperties / description
        Previous value: -"the INSTALLED `expo-build-properties` version, e.g. \"57.0.21\"; omit if it is not installed"New value: +"the INSTALLED expo-build-properties version; omit if absent"
      • changedInput schema / properties / toolchain / properties / expoSdk / description
        Previous value: -"the INSTALLED `expo` package version, e.g. \"56.0.15\" (`npm ls expo`)"New value: +"the INSTALLED expo version, e.g. \"56.0.15\" (`npm ls expo`)"
      • changedInput schema / properties / toolchain / properties / xcode / description
        Previous value: -"the version from `xcodebuild -version`, e.g. \"26.2\". iOS only; omit on a machine without Xcode"New value: +"`xcodebuild -version`, e.g. \"26.2\"; omit without Xcode"
  3. 2 tool updates
    • Addedpropose_app
    • Addedpropose_screen
  4. 1 tool update
    • Changedget_step2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "which page of the file list (write) or the screen list (review); omit for the first. Each page names the next.",
        +  "type": "number"
        +}
      • changedInput schema / properties / stepId / description
        Previous value: -"the step id, e.g. \"configure\" or \"write\""New value: +"the step id, e.g. \"configure\" or \"write\", or \"review\" for the screen list"
  5. 1 tool update
    • Changedverify_app1 field changed
      • addedInput schema / properties / config / properties / nativeModulesDir
        Added value: +{
        +  "description": "package.json expo.autolinking.nativeModulesDir; omit if unset. Checked when the recipe ships a native module in src/modules. Unset, that module is never linked and the app crashes on Android at first render",
        +  "type": "string"
        +}
  6. 2 tool updates
    • Changedadd_screen1 field changed
      • changedInput schema / properties / manifest / description
        Previous value: -"the parsed .recipebooq/files.json from the project root"New value: +"the parsed .opointo/files.json from the project root"
    • Changedupdate_components1 field changed
      • changedInput schema / properties / manifest / description
        Previous value: -"the parsed contents of .recipebooq/files.json from the project root (the whole object, or just its `files` array)"New value: +"the parsed contents of .opointo/files.json from the project root (the whole object, or just its `files` array)"
  7. 3 tool updates
    • Changedget_rules1 field changed
      • addedInput schema / properties / platform
        Added value: +{
        +  "description": "optional — omit for the rules on both platforms",
        +  "enum": [
        +    "ios",
        +    "android"
        +  ],
        +  "type": "string"
        +}
    • Changedupdate_components2 fields changed
      • addedInput schema / properties / acceptSplit
        Added value: +{
        +  "description": "only after the customer agreed to replace a file they edited: the paths named by `split-customer-edited` blockers",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / current
        Added value: +{
        +  "description": "only when a `split-unverified` blocker asks for it: the hash of each named file on disk, from the command the blocker gives",
        +  "items": {
        +    "properties": {
        +      "missing": {
        +        "type": "boolean"
        +      },
        +      "path": {
        +        "type": "string"
        +      },
        +      "sha": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "path"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedverify_app2 fields changed
      • addedInput schema / properties / toolchain / properties / expoBuildProperties
        Added value: +{
        +  "description": "the INSTALLED `expo-build-properties` version, e.g. \"57.0.21\"; omit if it is not installed",
        +  "type": "string"
        +}
      • changedInput schema / properties / toolchain / properties / expoSdk / description
        Previous value: -"the `expo` version in package.json, e.g. \"56.0.15\""New value: +"the INSTALLED `expo` package version, e.g. \"56.0.15\" (`npm ls expo`)"
  8. 3 tool updates
    • Changedadd_screen1 field changed
      • changedInput schema / properties / compositionId / description
        Previous value: -"share code for the new screen, from the composer"New value: +"share code for the new screen, from the App Builder"
    • Changedinstall_component1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"the component slug, e.g. \"button\" or \"sheet\""New value: +"the component slug, e.g. \"button\" or \"bottom-sheet\""
    • Changedverify_app1 field changed
      • addedInput schema / properties / toolchain
        Added value: +{
        +  "properties": {
        +    "enableSceneSupport": {
        +      "description": "app.json → expo-build-properties → ios.enableSceneSupport",
        +      "type": "boolean"
        +    },
        +    "expoSdk": {
        +      "description": "the `expo` version in package.json, e.g. \"56.0.15\"",
        +      "type": "string"
        +    },
        +    "xcode": {
        +      "description": "the version from `xcodebuild -version`, e.g. \"26.2\". iOS only; omit on a machine without Xcode",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  9. 1 tool update
    • Changedverify_app3 fields changed
      • changedInput schema / properties / files / description
        Previous value: -"what you actually wrote: { path, bytes } per file, path relative to the project root. Add `sha` for an exact check on a specific file."New value: +"what you actually wrote: { path, bytes } per file, path relative to the project root. `bytes` must be the file's size in BYTES on disk (what `wc -c` reports), not its character count — the two differ for any file containing a non-ASCII character."
      • addedInput schema / properties / files / items / properties / bytes / description
        Added value: +"size in bytes on disk, as `wc -c` reports"
      • addedInput schema / properties / files / items / properties / sha / description
        Added value: +"optional; when present it is authoritative and the byte check is skipped for that file"
  10. 6 tool updates
    • Addedadd_screen
    • Addedemit_screen
    • Addedget_step
    • Addedinstall_component
    • Addedupdate_components
    • Addedverify_app
  11. 8 tool updates
    • First observedcheck_snippet
    • First observedemit_app
    • First observedfind_component
    • First observedget_component
    • First observedget_provider_tree
    • First observedget_rules
    • First observedget_theme_tokens
    • First observedlist_components

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Converts a Figma file into a React project using Ant Design, AG Grid, ApexCharts, and Tailwind CSS, with optional export of mobile screens as a React Native (Expo) app.
    7
    44 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Turns AI coding hosts into a guided mobile-UI design tool with design interviews, token contracts, linters, and local browser preview.
    8
    12 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources