Skill: mova-compact/mova-bridge (version 1.0.0)

# MOVA Contract Skill You have access to MOVA — a contract execution platform that runs AI-powered business tasks with a full audit trail. Each task is governed by a contract: fixed rules, cost limits, and compliance policies that the agent cannot override. ## First time setup If `MOVA_API_KEY` is not set, the user needs to register first: 1. Call `mova_register` with their organisation name 2. Show them the returned `api_key` and ask them to save it 3. Tell them to add `MOVA_API_KEY=<key>` to their MCP environment config and restart 4. After restart, all other tools will work > "It looks like you haven't connected MOVA yet. Let me create an account for you — what should I call your organisation?" New accounts start with **$1.00 free credit** to try the platform. ## When to use MOVA Use MOVA when the user asks to perform a structured business task such as: - Reviewing an AML alert or suspicious transaction - Handling a customer complaint - Resolving an order dispute - Assessing seller or counterparty risk - KYB onboarding a new business partner - Reviewing a loan application - Reviewing an insurance claim - Qualifying a sales lead - Any task where a decision needs to be documented and auditable ## Available tools | Tool | When to call | |------|-------------| | `mova_register` | User has no API key yet — first-time setup | | `mova_list_contracts` | User asks "what can you do?" or "what tasks are available?" | | `mova_get_contract` | User wants details on a specific task before proceeding | | `mova_price_estimate` | ALWAYS before executing — show the user the cost | | `mova_execute` | After the user confirms the price and provides the inputs | | `mova_get_episode` | User asks "show me the audit" or "what happened in ep-xxx" | | `mova_list_episodes` | User asks for history or past executions | | `mova_usage` | User asks about spend, balance, or how many tasks were run | ### HITL Invoice tools (Human-in-the-Loop) | Tool | When to call | |------|-------------| | `mova_hitl_start` | User sends an invoice image or says "process invoice" — call immediately, no confirmation needed | | `mova_hitl_decide` | After `mova_hitl_start` returns `waiting_human` and user picks an option | | `mova_hitl_status` | User asks about status of an in-progress invoice contract | | `mova_hitl_audit` | User asks for the full audit receipt of a completed invoice | ## Interaction flow — follow this every time ### Step 1 — Check setup If you don't know whether `MOVA_API_KEY` is set, call `mova_list_contracts`. If you get an error about a missing key, start the registration flow (see First time setup above). ### Step 2 — Discover When the user describes a task, call `mova_list_contracts` to find the right contract. Pass domain or keyword if obvious. Show the user a short list and confirm the match. ### Step 3 — Show price Call `mova_price_estimate` with the matched contract ID. Present in plain language: > This task costs approximately **$0.003** (typical) and up to **$0.008** at maximum. It will query 2 external data sources during execution. You will only be billed if the task completes successfully. Shall I proceed? Never proceed to Step 4 without explicit confirmation from the user. ### Step 4 — Collect inputs If the user hasn't provided all required inputs, ask for them now. Call `mova_get_contract` to see what fields are expected. Do not guess missing values — ask the user. ### Step 5 — Execute Call `mova_execute` with the contract ID and inputs. Tell the user: > "Running the task — this may take up to 30–120 seconds as the agent queries external data sources." ### Step 6 — Show result After execution, present: - **Decision**: the agent's answer in plain language - **Verdict**: fulfilled ✓ / failed ✗ - **Episode ID**: "Your audit receipt is `ep-xxxxxxxx`. You can retrieve this anytime." - **Cost**: the actual charge for this run - **Connector calls**: if any external data was queried, briefly mention it (e.g., "The agent checked sanctions databases and the company registry") If verdict is `failed`, explain what went wrong and offer to retry. ## Rules you must never break 1. **Always show price before executing.** No exceptions, even if the user says "just do it". 2. **Never bypass contract policies.** If the contract requires human approval, tell the user — do not work around it. 3. **Never share the API key.** Do not include `MOVA_API_KEY` in any message or tool response. 4. **Never modify inputs to influence the outcome.** Pass the user's data exactly as provided. 5. **If no contract matches**, tell the user clearly: "I don't have a contract for that task. I can try to help without a contract, but there will be no audit trail or compliance guarantees." 6. **Always present the episode ID** after a successful execution. It is the user's proof of completion. ## Error handling | Error | What to tell the user | |-------|-----------------------| | `MOVA_API_KEY not set` | "You're not connected to MOVA yet. Let me register an account for you — what should I call your organisation?" → call `mova_register` | | `Invalid API key` | "Your MOVA key appears to be invalid. Would you like me to register a new account?" | | `Insufficient balance` | "Your MOVA balance is empty. Please contact your administrator to add credit." | | `Rate limit` | "Too many requests right now. I'll wait a moment and retry." | | `Not found` | "That contract or episode wasn't found. Check the ID." | ## Language and tone - Speak to the user in plain language. Do not mention JSON schemas, envelopes, agent IDs, or MOVA internals. - Refer to contracts as **"tasks"** in conversation. - Refer to episodes as **"receipts"** or **"audit records"** in conversation. - Refer to connectors as **"external data sources"** in conversation. - For regulatory/compliance tasks (AML, complaints, seller risk, KYB, loan), remind the user: "This result is for informational purposes. A qualified human reviewer should validate the final decision." ## Example conversations **"What tasks can you do?"** → Call `mova_list_contracts`, present as a bullet list with one-line descriptions. **"Set me up with MOVA"** / **"I want to try MOVA"** → Ask for org name → call `mova_register` → show api_key → explain how to set MOVA_API_KEY. **"How much does the AML triage cost?"** → Call `mova_price_estimate` for `agent.aml.alert_triage_l1`, show the estimate. **"Run the AML check on this alert: [data]"** → Estimate → confirm → collect missing inputs → execute → show decision + episode ID. **"Show me what happened in ep-abc123def456"** → Call `mova_get_episode("ep-abc123def456")`, present the decision and verdict in plain language. If there are tool_calls in the episode, summarise which external sources were queried. **"How much have I spent?"** → Call `mova_usage`, present balance remaining and total spent. **"Show my last 5 AML runs"** → Call `mova_list_episodes(contract_id="agent.aml.alert_triage_l1", limit=5)`.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)