MCP bridge server for @twomilia/react-native — connect AI editors to your React Native app
Mixed quality across 11 tools. Naming is generally verb-forward and clear (escalate_to_human, start_ai_call, report_issue, guide_user). Descriptions are present and contextual, ranging 80 - 350 chars, well above the 20-char floor. However, critical gaps emerge: (1) start_ai_call's targetType enum is EMPTY, no valid values defined, making the tool unusable; (2) several tools lack documented output schemas (escalate_to_human, report_issue, dismiss_keyboard, long_press, select_picker, render_block, restore_zone); (3) parameter descriptions are inconsistent, some detailed (guide_user's action enum with glyphs), others minimal (set_date's index lacks range/bounds); (4) no error handling guidance visible in any tool; (5) no idempotency or retry semantics documented. Tools like guide_user and render_block show good composition (single responsibility, clear intent), but the support tools (escalate_to_human, report_issue) lack output schema documentation, forcing LLMs to guess what fields are returned.
Dismiss the on-screen keyboard. Use after typing into a text input when the keyboard is blocking other elements.
Hand off the conversation to a human support agent. Use this when: (1) the user explicitly asks for a human, (2) you have investigated with the available app data/tools and still cannot resolve the issue, or (3) direct customer follow-up or human judgment is required. Do not use this just because the user mentions billing, payment, charges, refunds, or order problems; investigate first.
Show a blue ring + tooltip overlay on a specific element so the user can see what you are looking at or about to do. CALL THIS EAGERLY whenever you read data from the screen — every order detail, total, fee, status, or field you inspect should be highlighted with action="read" or action="verify" BEFORE you mention it in your reply. Use action="tap" when guiding the user to tap. Use action="type" when typing. Auto-dismisses after ~5s.
Deprecated compatibility alias for render_block(). Inject a pre-built React card template into a specific AIZone.
Long-press an interactive element by its index. Use for actions that require a longer touch, such as showing context menus, reordering items, or triggering secondary actions.
start_ai_call targetType enum is empty, no valid values defined. Tool is non-functional; LLM cannot select a valid targetType.
Output schemas missing for 7 of 11 tools (escalate_to_human, start_ai_call, report_issue, dismiss_keyboard, long_press, restore_zone, inject_card). LLMs cannot plan downstream calls or extract returned data.
No error handling guidance in any tool. Descriptions do not explain what happens on failure, whether errors are retryable, or what the LLM should do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Render a registered UI block into a specific AIZone as a temporary contextual intervention. Use this only when a local in-screen block helps the user decide, fix, or proceed faster than chat.
Create an AI-verified reported issue when the complaint is supported by app evidence you can already see or infer from the current UI flow. Use this for verified late orders, overcharges, broken subscription states, missing loyalty points, gift failures, notification mismatches, or account friction. Do not use it for anger alone. If you cannot investigate or resolve with available tools, need direct customer follow-up, or a human was explicitly requested, use escalate_to_human instead.
Restore a specific Zone to its default state, reversing any previous simplify_zone, render_block, or inject_card operations.
Select a value from a picker/dropdown by its index. Provide the exact value string to select.
Set the value of a date/time picker. Provide the date in ISO 8601 format (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss).
Start an outbound AI phone call from the company-owned Twomilia phone number to a trusted contact configured in the dashboard. Use this only after investigating the issue and deciding a real human/vendor/partner phone call is needed, such as a stuck order, delivery coordination, appointment confirmation, booking partner follow-up, billing/fraud escalation, or external vendor status check. Never provide or infer a phone number; pass only targetType and targetId so Twomilia can look up the trusted contact. This tool requires explicit user approval before dialing.
Parameter bounds and constraints underdocumented. set_date's index parameter lacks min/max; guide_user's index has no range; no validation rules stated for string parameters like reason, message, zoneId.
Idempotency and retry semantics not documented. Tools like render_block and inject_card modify UI state, unclear if repeated calls are safe or if they accumulate side effects.