Production tools
The Extentos MCP server's production tools — getProductionChecklist (personalized ship-readiness checklist based on declared capabilities + handler names) and getCredentialGuide (step-by-step credential setup for Anthropic, OpenAI, Google Cloud, DeepL, Azure, AWS Bedrock, HuggingFace, or custom providers). Pre-ship gates.
Two tools the agent invokes at the end of the dev loop, before the developer cuts a release. Both are pure-read, no side effects.
getProductionChecklist
Personalized production-readiness checklist based on what the handler uses. The agent passes the manifest's capabilities array + handlerNames array; the response is a categorized list of "before you ship" items the agent walks through with the developer.
Parameters: capabilities: string[] (required; SDK feature names the handler uses), handlers: string[] (optional; the customer's handler class names — labels the API-keys step's affected handlers), services: string[] (optional; the BYOK provider names the app actually integrates, e.g. ["anthropic", "openai"] — this is what triggers the API Keys step, not handlers), platform: "android" | "ios", projectPath (optional).
Response: a personalized checklist spanning categories such as Meta Developer Account, DAT Registration, Credential Swap, API Keys (only when services are declared — a DAT-native or managed-gateway app declares none and skips it), Permissions Audit, Foreground Service / Background Modes (skipped if no continuous-capture capabilities), Transport Config, Real-Hardware Verification (when the app uses voice / video / audio capture), and Store Listing. Each step is personalized to the developer's actual app: a no-camera app skips camera entries, an app with speak but no transcription_incremental skips STT-related steps.
The Real-Hardware Verification step is the load-bearing one — Extentos validates simulator integration cleanly, but final-mile glass-fit (Bluetooth latency on the developer's specific glasses, real-world A2DP/HFP coexistence, camera/mic fidelity in actual wearing conditions) only verifies on hardware. The checklist surfaces it as required before cutting a release.
getCredentialGuide
Step-by-step credential setup for the BYOK AI providers the handler uses, plus Meta DAT registration. The agent passes the list of providers it's about to call from the handler; the response walks the developer through each.
Parameters: services: string[] (optional — omit or pass [] for the Meta-DAT-only guide; otherwise one or more of anthropic, openai, google_cloud_vision, google_translate, google_gemini, deepl, azure_cognitive, aws_bedrock, huggingface, custom), handlers: string[] (optional; handler class names — used to label which handler each provider is for), platform: "android" | "ios" (required).
Response: per-provider numbered steps (sign-up URL, account-creation cost if any, where to find the API key, what to paste where, how to test). Plus a Meta DAT registration walkthrough — required at first real-hardware test (one-time, free, ~15–30 min): create Meta Developer account, enable Wearables DAT, register package name + signing signature (Android) or bundle ID + Team ID (iOS), copy App ID + Client Token into the manifest (Android) / Info.plist MWDAT dict (iOS).
Android storage guidance: the response recommends a local.properties-first pattern reading the key at Gradle config time and injecting via resValue + R.string at runtime. CI/release builds fall back to environment variables baked into the same snippet via ?: System.getenv(...). This is deliberately NOT env-var-first: Gradle daemons cache the env at startup, so a rotated key in your current shell isn't visible until you ./gradlew --stop and restart the IDE — the failure mode the R2 dogfood F-R2-9 finding surfaced as "I couldn't read the cards." resValue is preferred over buildConfigField because BuildConfig String constants are compile-time-inlined by kotlinc, and stale keys silently survive rotations (the original BuildConfig API-key gotcha that landed in dogfood F22).
BYOK client return shape: the canonical Anthropic client emitted by getCodeExample('byok_anthropic') returns a sealed LlmResult type with Ok / KeyMissing / KeyRejected / Connectivity / Transient / ClientBug / Empty variants — NOT a bare String. Handler code pattern-matches each variant into a distinct user-facing line so the end user can tell "fix your API key" from "the AI couldn't see well enough" from "try again, network's flaky." Flattening these into one message (the dogfood F-R2-10 finding) makes the failure invisible to non-technical end users.
Related
- Validation tools — what to run before the production checklist
- Security — what Extentos collects vs what stays in the developer's app
- Tools overview — back to the full tool catalog
Related
Tools reference
The Extentos MCP server exposes a tight set of deterministic tools across deterministic categories — discovery + SDK reference, generation, guidance, validation, simulation, production, agent configuration, and search. Per-tool reference covering input parameters, response shapes, when to call each tool, and worked examples. Verified from the actual tool definitions and handler implementations in @extentos/mcp-server.
Validation tools
The Extentos MCP server's validation tools — inspectIntegration (read-only project snapshot) and validateIntegration (whole-project correctness gate before testing). The pre-test sanity checks the agent runs after structural changes.
Security and data handling
What Extentos collects (aggregate dev + runtime metadata) and never collects (transcripts, photo/video bytes, AI prompts, PII). Anonymous-first, GDPR-friendly.
Simulation tools
Extentos MCP simulation tools — provision and operate browser-mode simulator sessions, plus agent-driven testing tools that close the E2E loop with no human.
Search tools
The Extentos MCP server's searchDocs tool — the bundled conceptual docs corpus. Phase-4 topics (assistant_runtime, managed_gateway, conversation_memory, display, agent_e2e_testing) plus the stable set (getting_started, custom_handlers, voice_integration, library_api, toggles, simulator_browser_mode).