{"catalog_version":"2026-05-12","protocol":"mcp:2024-11-05","endpoint":"https://simpler.asia/mcp","auth_methods":["bearer","cookie"],"bearer_issuance":{"cookie_authed":"https://simpler.asia/api/mcp-auth/token","agent_handshake":"https://simpler.asia/api/public/agent-handshake/init","handshake_note":"For 3rd-party agents without an existing user token: POST email to /api/public/agent-handshake/init, direct the user to the returned user_url to complete signup + approval, then poll /api/public/agent-handshake/{token}/status for the bearer JWT."},"tool_count":681,"surface_summary":{"hand_curated":47,"entity_actions_autogen":182,"image_tools":9,"hono_route_autogen":443},"tools":[{"name":"spreadsheet.create_with_content","description":"Create a new spreadsheet file with CSV content. Uploads the CSV to R2, writes a spreadsheet_file metadata row, and emits an entity event so any open Spreadsheets page re-renders live. Use this when the user asks you to \"build a budget sheet\", \"make a spreadsheet of X\", etc.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Spreadsheet display title."},"csv_content":{"type":"string","description":"Full CSV content as a string. First row is header."},"prompt":{"type":"string","description":"Optional: the user prompt that produced this sheet (for attribution)."}},"required":["title","csv_content"]}},{"name":"ai.state","description":"Get a snapshot of the caller's tenant state across all live service manifests. Returns compact DSL.","inputSchema":{"type":"object","properties":{}}},{"name":"ai.next","description":"Get ranked pending actions (overdue invoices, approvals, etc). Returns compact DSL.","inputSchema":{"type":"object","properties":{}}},{"name":"ai.books","description":"Get the 7-book snapshot (risk, reputation, loan, ops, cash flow, receivables, warnings). Returns compact DSL.","inputSchema":{"type":"object","properties":{}}},{"name":"ai.budget","description":"Get the caller's budget snapshot — current balance, monthly/weekly spend, daily-average burn, and runway projection (days_remaining at current rate). Use before committing paid actions to plan within budget. Returns compact DSL with USD amounts. Includes low_balance warning + suggested topup when runway <14 days.","inputSchema":{"type":"object","properties":{}}},{"name":"tool.stats","description":"Get aggregate usage signal for MCP tools — call counts + success rates over the last N days. Use to calibrate picker decisions (\"which tool do tenants like mine actually use\") or to spot tools whose error rate has spiked. Aggregate-only — no per-tenant data is exposed. Sparse / empty results pre-launch are expected; signal becomes meaningful once tenant volume justifies it.","inputSchema":{"type":"object","properties":{"tool_name":{"type":"string","description":"Optional — return stats for a single tool. Omit to get top-20 by call_count."},"days":{"type":"number","description":"Window in days. Default 7, min 1, max 90."}}}},{"name":"estimate_cost","description":"Estimate the USD cost of an action BEFORE committing. Reads from meta_actions cost_envelope + cost_per_call_usd. For envelope=variable actions, returns the structural cost signal (compute requires execution). Use to plan within budget and choose between alternative actions. Returns compact DSL: `entity.action: envelope=X est_usd=Y is_variable=Z notes=...`","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name (e.g. invoice, expense, image_generation)."},"action":{"type":"string","description":"Action name on that entity (e.g. create, update, send, run)."},"inputs":{"type":"object","description":"Optional action inputs. Reserved for future variable-cost computation; currently informational only."}},"required":["entity","action"]}},{"name":"my_history","description":"Get the history of mutations attributed to the caller within this tenant. Reads from entity_events filtered by tenant_id + actor_id. Optional filters: entity_type, operation, time range. Returns compact DSL — one line per event with timestamp, operation, entity, actor, and any agent-stated reason from payload. Use to recall what you did last session, audit your own actions, or find a past mutation to time-travel against.","inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"ISO 8601 timestamp or unix ms. Only events after this time. Default: no lower bound."},"until":{"type":"string","description":"ISO 8601 timestamp or unix ms. Only events before this time. Default: now."},"entity_type":{"type":"string","description":"Filter to one entity type (e.g. invoice, expense)."},"operation":{"type":"string","description":"Filter to one operation: create | update | delete | pii_read.","enum":["create","update","delete","pii_read"]},"limit":{"type":"number","description":"Max events returned. Default 50, cap 500."}}}},{"name":"agent.me","description":"Consolidated self-knowledge for the calling agent — one shot to learn who YOU are on this platform. Returns: agent_id (your stable jti), client_type (claude_code | claude_managed | openclaw | cursor | etc.), agent_model + agent_version (from clientInfo at initialize), capabilities, namespaces this token can reach, write policy (full | readonly), trust summary across action_categories, first_seen + last_seen timestamps, and total sessions observed. Use at session start instead of probing via 4 separate tools. Cookie-authed callers (browser Conversations) get a degraded response — no jti, no per-agent trust isolation.","inputSchema":{"type":"object","properties":{}}},{"name":"my_agent_history","description":"Get the history of mutations YOU (this agent identity) have made in this tenant — distinct from my_history which scopes by user_id and conflates sibling agents under the same principal. Reads entity_events filtered by tenant_id + agent_id (the bearer-token jti). Same filter shape as my_history (since/until/entity_type/operation). Use to recall what THIS agent did across sessions, audit your own per-agent footprint, or pick up where you left off without confusing yourself with what a sibling agent (Claude Code vs Cursor vs in-platform Conversations) did. Cookie-authed callers receive an empty result — there is no jti to filter on.","inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"ISO 8601 timestamp or unix ms. Default: no lower bound."},"until":{"type":"string","description":"ISO 8601 timestamp or unix ms. Default: now."},"entity_type":{"type":"string","description":"Filter to one entity type (e.g. invoice, expense)."},"operation":{"type":"string","description":"Filter to one operation.","enum":["create","update","delete","pii_read"]},"limit":{"type":"number","description":"Max events. Default 50, cap 500."}}}},{"name":"my_agent_relationships","description":"Aggregate of which entities YOU (this agent identity) tend to touch most in this tenant. Returns top entity types you've mutated, with operation breakdown (create/update/delete) and last-seen-at timestamp per type. Use to understand your own working pattern in this tenant — whether you're primarily an invoicing agent, a forecasting agent, a CRM agent, etc. — and to pick the right tools faster on subsequent sessions. Cookie-authed callers receive an empty result.","inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"ISO 8601 timestamp or unix ms. Default: 30 days ago."},"limit":{"type":"number","description":"Max entity types returned. Default 20, cap 50."}}}},{"name":"sibling_activity","description":"Get tenant activity NOT caused by the caller — actions by other agents, the in-platform AI assistant, system processes, or cron jobs. Reads entity_events filtered by tenant_id with actor_id != caller. Useful to know what the platform did automatically (cron jobs, post-hooks) or what other agents/users in the tenant have changed since you last looked. Optional actor_type filter (assistant | system | cron | human).","inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"ISO 8601 timestamp or unix ms. Default: 24h ago."},"until":{"type":"string","description":"ISO 8601 timestamp or unix ms. Default: now."},"actor_type":{"type":"string","description":"Filter to a specific actor class.","enum":["human","assistant","system","cron"]},"entity_type":{"type":"string","description":"Filter to one entity type."},"limit":{"type":"number","description":"Max events. Default 50, cap 500."}}}},{"name":"my_trust_state","description":"Get the caller's trust ladder state per action_category. Reads from the action-trust ledger. Trust is per-AGENT — each agent identity (Claude Code session, OpenClaw harness, in-platform browser session) earns its own trust score per category, so sibling agents can't poison each other. Trust evolves with consecutive approvals — 0-19 consecutive = standard (80/20 confirmation), 20+ = elevated (90/10 auto-execute unlocked). Use to know whether an action will auto-execute or need user confirmation BEFORE proposing it. Returns compact DSL: one line per (category, agent) pair with trust_level, consecutive_approved, totals, auto_execute_enabled. agent=principal means legacy/shared row; agent=<8char> means a specific agent identity.","inputSchema":{"type":"object","properties":{"action_category":{"type":"string","description":"Optional filter to one category (e.g. communicate, create, modify). Omit to return all tracked categories."},"scope":{"type":"string","enum":["mine","all"],"description":"mine (default for bearer-authed) = caller agent's row + legacy NULL fallback; all = every agent under this principal (introspection: which sibling agents have elevated trust)."}}}},{"name":"pattern_miner.suggestions","description":"List candidate compound actions detected from agent behavior. The platform watches entity_events for sequences of (entity, action) pairs that multiple agents repeatedly run in close succession, and surfaces them as candidates worth promoting to first-class meta_actions. This is the substrate-evolution loop: agent behavior teaches the catalog what new compound actions to build. Results are ranked by support × occurrences. Each candidate carries the sequence + how many distinct actors used it + how many times. Use pattern_miner.accept to convert a candidate into a real catalog action.","inputSchema":{"type":"object","properties":{"lookback_days":{"type":"number","description":"How far back to mine. Default 7."},"min_support":{"type":"number","description":"Minimum distinct actor_ids that ran the sequence. Default 3."},"min_occurrences":{"type":"number","description":"Minimum total runs. Default 5."},"min_ngram":{"type":"number","description":"Min sequence length. Default 2."},"max_ngram":{"type":"number","description":"Max sequence length. Default 4."},"scope":{"type":"string","enum":["mine_tenant","platform"],"description":"mine_tenant (default) restricts to caller's tenant; platform considers all tenants (super-admin only — non-admin callers receive -32030)."}}}},{"name":"my_capability_requests","description":"List capability requests YOU (bearer agent) filed previously, with current status + any admin triage notes. Closes the feedback loop on agent_capability.request: poll this after filing to see if admin triaged/accepted/rejected/shipped your gap. Status flow: open → triaged → accepted → shipped (or rejected). When status=shipped the new capability is likely surfaced in tools/list under a new name. Filter by status via query.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["open","triaged","accepted","rejected","shipped","any"],"description":"Status filter. Default any."},"limit":{"type":"number","description":"Max rows. Default 20, cap 100."}}}},{"name":"agent_capability.request","description":"Flag a platform capability gap. When you encounter a task you cannot accomplish via current tools, write a structured request here instead of failing silently. The platform reads these alongside successful sequences to surface capability clusters worth shipping. Closes the AI-substrate-AI growth loop — your \"I tried but couldn't\" becomes input to what gets built next. Pattern miner clusters similar intents from different agents; admin reviews + ships. Returns the request id you can reference later.","inputSchema":{"type":"object","properties":{"intent":{"type":"string","description":"What you were trying to accomplish, in plain English. Be specific about the user need (\"send a paid-invoice receipt with a PDF attachment\" not \"send email\"). Clusters depend on this — vague intents get noise neighbors."},"attempted_tools":{"type":"array","items":{"type":"string"},"description":"MCP tool names you tried before flagging this. Helps the platform decide: extend existing tool vs build new."},"why_insufficient":{"type":"string","description":"Why the attempted tools weren't enough. Missing parameters? Wrong granularity? Need a different sequence? Be concrete; max 2000 chars."},"proposed_shape":{"type":"object","description":"Optional: your suggestion of what the missing tool should look like. {name, description, args?} — pure suggestion, admin still designs the final shape."}},"required":["intent"]}},{"name":"pattern_miner.accept","description":"Accept a pattern_miner candidate and convert it into a first-class meta_actions row. Creates an action_type=custom row with custom_handler_ref pointing to src/handlers/compound.ts:runSequence and defaults.sequence set to the candidate's steps. After acceptance, the new compound action appears in tools/list and ai.entities. Requires elevated trust on action_category=create (creating new actions is a substrate change, not a routine call) — non-elevated callers receive -32030 with the current trust_level returned in error data.","inputSchema":{"type":"object","properties":{"sequence":{"type":"array","description":"The sequence array from pattern_miner.suggestions output. Each step: {entity, action, inputs?}."},"action_id":{"type":"string","description":"Stable id for the new meta_actions row (e.g. \"compound_close_books_2026_05\"). Must be unique within meta_actions."},"action_name":{"type":"string","description":"Short snake_case name for the new compound action (e.g. \"close_books\")."},"entity_name":{"type":"string","description":"Which entity to attach the new action to. Convention: \"platform\" for cross-entity compounds, or the dominant entity in the sequence."},"description":{"type":"string","description":"AI-readable description of what the compound does. Becomes the action's description field."}},"required":["sequence","action_id","action_name","entity_name","description"]}},{"name":"would_this_be_approved","description":"Counterfactual permission query — predict whether a tool call would proceed, be reviewed, or be blocked, WITHOUT actually running it. Two modes: (a) entity-mode pass {entity, action} — predicts auto_approved | needs_confirmation based on meta_actions.requires_approval + min_trust_level + requires_consent + caller trust state. (b) tool-mode pass {tool_name} — predicts gate verdict + trust gate + actor_type filter for ANY MCP tool (auto-gen Hono, hand-curated, image, entity-action — all uniformly). Both return compact DSL: `decision=X reason=... who_decides=Y`. Use to plan before calling, especially for L3 actions or potentially-gated tools.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity-mode: entity name (e.g. invoice, expense, image_generation). Pair with `action`."},"action":{"type":"string","description":"Entity-mode: action name (e.g. create, send, mark_paid)."},"tool_name":{"type":"string","description":"Tool-mode: any MCP tool name (e.g. post_expenses, outbound.send_invoice_reminder, agent_skill.invoke). Predicts gate + trust + actor visibility for the tool."}}}},{"name":"what_can_i_NOT_do","description":"Negative-space awareness — list actions that are STRUCTURALLY gated for the caller right now: actions requiring elevated trust (not yet earned), actions requiring consent (not yet granted), actions requiring approval that auto-execute is off for. Use BEFORE planning workflows so you don't propose actions the principal will block. Returns compact DSL: one line per gated action with the gate reason. Doesn't include cost gates (use ai.budget for that) or feature flags.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Optional filter to one action category (communicate | create | spawn | modify | delete)."}}}},{"name":"my_preferences","description":"Get the principal's standing preferences and instructions. Reads from the user-facts ledger where fact_type=preference and not invalidated. Use at session start to learn how this principal wants you to operate (e.g. communication style, business hours, never-do rules). Returns compact DSL: one line per preference with confidence (explicit | inferred) and source. Honor explicit preferences; weigh inferred ones contextually.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max preferences returned. Default 50, cap 200."}}}},{"name":"simulate","description":"Preview a multi-step action plan WITHOUT executing. For each step, runs executeAction with dryRun=true (validates inputs + builds would-be row), composes meta_actions cost + approval state, and aggregates. Use to check feasibility + total cost + permission gates before committing. Returns compact DSL with per-step status and aggregate. Steps don't actually mutate state.","inputSchema":{"type":"object","properties":{"plan":{"type":"array","description":"Ordered list of action invocations to simulate. Each: {entity, action, inputs?, match?}."}},"required":["plan"]}},{"name":"session.context","description":"Get the platform's view of THIS session — agent identity, scope, trust summary, preferences count, recent activity. Use when confused about what the platform knows about you, or to verify identity persistence across reconnects. Returns compact DSL with per-section summaries; for deep state on a section, call the dedicated tool (my_trust_state, my_preferences, my_history).","inputSchema":{"type":"object","properties":{}}},{"name":"presence.check","description":"Check whether the principal is likely active in the UI right now. Composes the max of recent session activity and recent browser-chat client activity. Threshold: <5 minutes since last activity = likely_active. Use to decide whether to defer to principal input vs proceed autonomously, or to time messages so they land when principal is watching. Returns compact DSL: is_likely_active + last_active_at + minutes_since.","inputSchema":{"type":"object","properties":{"threshold_minutes":{"type":"number","description":"Minutes since last activity below which principal is considered \"active\". Default 5."}}}},{"name":"entity_action","description":"Generic dispatcher for ANY entity.action defined in meta_actions. The metadata-first runtime executes whatever you specify — schema validation, idempotency, ACL, post-hooks all run as configured per action. Use this to call entities not covered by specific tools (e.g. agent_note.create, agent_note.inbox). Look up available pairs via ai.entities. Returns the canonical ActionResult shape.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name from meta_entities (e.g. agent_note, sticky_note, invoice)."},"action":{"type":"string","description":"Action name from meta_actions (e.g. create, update, mark_read, inbox)."},"inputs":{"type":"object","description":"Action inputs per meta_actions.allowed_inputs."},"match":{"type":"object","description":"WHERE columns for update/delete actions per meta_actions.match_by."},"idempotency_key":{"type":"string","description":"Stripe-style key. Same key + same body = cached response within 24h."},"reason":{"type":"string","description":"Stated intent for this mutation (≤1000 chars). Stored in entity_events.payload_json._reason for replay/audit."},"dry_run":{"type":"boolean","description":"When true, validate + preview without writing. Returns ActionResult with dryRun=true."}},"required":["entity","action"]}},{"name":"outbound.prepare_pii","description":"BEGIN a generic outbound flow (WhatsApp / email / SMS reminder, follow-up, notification). Resolves PII ref_ids on an entity row to plaintext for harness-side delivery. WORKFLOW: outbound.prepare_pii (this) → harness's own messaging tool sends the message → outbound.log_action acknowledges. Replaces \"invoice_send\" / \"contact_message\" — Simpler does NOT send messages itself, by design. For common intents prefer the named wrappers (outbound.send_invoice_reminder, outbound.send_quote_followup, outbound.send_payment_receipt). Pass dry_run: true to rehearse — validates inputs, returns the would-detokenize column list + handshake terms WITHOUT exposing plaintext or charging vault budget. Use rehearse to plan a multi-step outbound flow with confidence before the real call. Audit-logs access with channel + purpose; do not persist plaintext beyond the outbound call.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name from the runtime registry (e.g. invoice_client, agent_note, sticky_note). Use ai.entities to list valid names — note that legacy top-level entities (contact, expense) are mw:0 (not MCP-writable) and may also reject outbound.prepare_pii. Prefer mw:1 entities."},"entity_id":{"type":"string","description":"Primary key of the entity row."},"channel":{"type":"string","description":"Outbound channel: whatsapp | email | sms | voice | other. Recorded in audit log."},"purpose":{"type":"string","description":"Why you need plaintext — e.g. \"send invoice 47 reminder\", \"follow up on overdue payment\". Recorded in audit log."},"dry_run":{"type":"boolean","description":"When true, rehearse the call: validate inputs + return the would-detokenize shape WITHOUT exposing plaintext or charging vault budget. Default false."}},"required":["entity","entity_id","channel","purpose"]}},{"name":"outbound.send_invoice_reminder","description":"Send a reminder for an overdue (or upcoming) invoice. Pattern-matches the agent intent \"remind a client about an unpaid invoice\". WORKFLOW: this prepares PII plaintext + a suggested reminder template → harness sends via WhatsApp/email/SMS → outbound.log_action acknowledges. The entity must be the row holding the recipient's PII — typically `invoice_client` or `contact`; look up the client_id from the invoice first if you only have the invoice itself. Use this instead of trying invoice_update(status='reminded') — Simpler keeps invoice state and sending separate so you can drive any harness messaging tool. Audit-logs access with channel + purpose; do not persist plaintext beyond the call.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name holding the recipient PII — typically `invoice_client` or `contact`."},"entity_id":{"type":"string","description":"Primary key of the invoice_client / contact row."},"channel":{"type":"string","description":"Outbound channel: whatsapp | email | sms | voice | other."},"purpose":{"type":"string","description":"One-line reason — e.g. \"invoice 47, 14 days overdue, first reminder\". Recorded in audit log."}},"required":["entity","entity_id","channel","purpose"]}},{"name":"outbound.send_quote_followup","description":"Follow up on a quote that hasn't been accepted yet. Pattern-matches the agent intent \"check in with a client about a pending quote\". WORKFLOW: this prepares PII plaintext + a suggested follow-up template → harness sends via WhatsApp/email/SMS → outbound.log_action acknowledges. The entity must be the row holding the recipient's PII — typically `quote_client` or `contact`. Use this instead of inventing a quote_send / quote_remind tool — Simpler keeps quote state and sending separate so you can drive any harness messaging tool. Audit-logs access with channel + purpose; do not persist plaintext beyond the call.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name holding the recipient PII — typically `quote_client` or `contact`."},"entity_id":{"type":"string","description":"Primary key of the quote_client / contact row."},"channel":{"type":"string","description":"Outbound channel: whatsapp | email | sms | voice | other."},"purpose":{"type":"string","description":"One-line reason — e.g. \"quote QT-12 sent 5 days ago, gentle follow-up\". Recorded in audit log."}},"required":["entity","entity_id","channel","purpose"]}},{"name":"outbound.send_payment_receipt","description":"Send a thank-you / receipt confirmation after an invoice is marked paid. Pattern-matches the agent intent \"acknowledge a payment was received\". WORKFLOW: this prepares PII plaintext + a suggested receipt template → harness sends via WhatsApp/email/SMS → outbound.log_action acknowledges. The entity must be the row holding the recipient's PII — typically `invoice_client` or `contact`. Use this instead of inventing an invoice_send_receipt tool — Simpler keeps invoice state and sending separate so you can drive any harness messaging tool. Audit-logs access with channel + purpose; do not persist plaintext beyond the call.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name holding the recipient PII — typically `invoice_client` or `contact`."},"entity_id":{"type":"string","description":"Primary key of the invoice_client / contact row."},"channel":{"type":"string","description":"Outbound channel: whatsapp | email | sms | voice | other."},"purpose":{"type":"string","description":"One-line reason — e.g. \"invoice 47 paid in full, send receipt\". Recorded in audit log."}},"required":["entity","entity_id","channel","purpose"]}},{"name":"forecast.run","description":"Run the Forecast engine on monthly business data. Returns 5000 simulated tracks clustered into outcome bands (most_likely / upside / downside) with sector-prior-blended params + scenario narratives. Latency typically 5-30s; agent should warn principal before invoking. STREAMING SUPPORTED: send `Accept: text/event-stream` to receive `notifications/progress` per phase. Returns compact DSL summary with full result on the `_raw` field of streaming responses.","inputSchema":{"type":"object","properties":{"monthlyData":{"type":"array","description":"Array of MonthlyDataPoint objects: {month: \"YYYY-MM\", revenue, costs, ...optional fields}. Minimum 2 points; more points = better fit. Recent N months recommended."}},"required":["monthlyData"]}},{"name":"document.extract","description":"Fetch a document from a URL, classify its type (personal/medical/business/unknown), and return extracted text + classification confidence. Uses keyword + PII-pattern heuristics; documents containing actual PII data are NEVER classified as business regardless of other markers. Latency typically 1-5s depending on document size. STREAMING SUPPORTED: send `Accept: text/event-stream` for fetched/normalizing/classifying/completed phases. Returns compact JSON: {classification, text (capped 100K chars), document_type, word_count}.","inputSchema":{"type":"object","properties":{"document_url":{"type":"string","description":"Public HTTPS URL or pre-signed R2 URL. Document fetched server-side; max 30s timeout."}},"required":["document_url"]}},{"name":"video.export","description":"Track progress for an in-flight video export job. Caller must have already created the job via `POST /api/video-studio/projects/:id/export`; this tool then polls video_export_jobs every 3s, surfacing real-time render progress. Latency 30s-20min depending on length. STREAMING SUPPORTED: send `Accept: text/event-stream` to receive per-phase events (queued → processing → uploading → completed) with percent banding. Non-streaming returns the aggregated phase trace + final result as a single compact-DSL response.","inputSchema":{"type":"object","properties":{"project_id":{"type":"string","description":"Video project id whose most-recent queued/processing export job to track."}},"required":["project_id"]}},{"name":"agent_skill.invoke","description":"SAGA PRIMITIVE — execute a multi-step plan server-side. Two modes: (a) saved skill via skill_id (persists, supports variables); (b) AD-HOC via sequence param (inline plan, no persistence, capped at 20 steps). Single MCP call submits the plan; the platform walks the sequence with full control flow (if/else, for_each, ${var} substitution) and dispatches each step via the internal executor. Three big wins over turn-by-turn invocation: (1) ONE security-gate evaluation per saga, not per step — gate sees the saga as one intent, not N risky calls; (2) ZERO round-trip cost — no Anthropic inference between steps, server orchestrates; (3) idempotency-by-default applies per step (Phase 3 #10), so a re-invocation with the same skill_id + variables replays cached results. Resolves to (a) caller-authored skill in their tenant, OR (b) platform-shipped primitive (id prefix `sys_skill_*`, tenant_id=\"SYSTEM\"). Platform primitives shipped today: sys_skill_quote_send_to_client, sys_skill_invoice_remind_if_overdue, sys_skill_invoice_receipt_on_payment — invokable by any tenant. Step types: (1) action `{entity, action, inputs?, match?}`, (2) `{type:\"if\", condition:\"${path} OP value\", then:[...], else?:[...]}` with operators ==/!=/<><=>=/contains, (3) `{type:\"for_each\", source:\"${stepN.items}\", as:\"item\", do:[...]}` with `${item}` and `${item_index}` available in nested scope. Variable substitution: `${var}` (caller-supplied) and `${stepN.field.subfield}` (prior step results) in step inputs/match. Stops on first action failure. Bumps use_count + last_used_at on full success (caller-authored skills only — platform skills don't track per-tenant counters). Returns compact DSL: per-step ok/fail with cost + total runtime.","inputSchema":{"type":"object","properties":{"skill_id":{"type":"string","description":"Primary key of the agent_skill row to invoke. Use this for saved skills (persistent + reusable). Omit when passing sequence inline."},"sequence":{"type":"array","items":{"type":"object"},"description":"Ad-hoc plan — inline array of step objects (max 20). Each step is either an action {entity, action, inputs?, match?}, an if {type:\"if\", condition, then:[], else?:[]}, or a for_each {type:\"for_each\", source, as, do:[]}. Pass this OR skill_id, not both. Ad-hoc plans are one-off, not persisted — codify via agent_skill.create_from_history if you want to reuse."},"variables":{"type":"object","description":"Caller-supplied input variables, keyed by name. For saved skills: validated against declared variable_schema_json. For ad-hoc: pass through verbatim, accessible in steps via ${var}."},"dry_run":{"type":"boolean","description":"When true, simulate every step with dryRun=true (no DB writes). Default false."}}}},{"name":"agent_skill.create_from_history","description":"Codify the agent's last N writes as a reusable skill — substrate for self-extending agents. Reads recent entity_events filtered by THIS agent's jti, converts them to {entity, action, inputs, match} steps, strips internal fields (_reason, _trace_id, id, timestamps, auto-injected tenant_id/user_id), and persists as a new agent_skill row owned by the caller. The saved skill has literal values — to parameterise, fetch the row via entity_action(agent_skill, read), edit sequence_json to swap concrete values for ${var} placeholders, declare them in variable_schema_json, and call entity_action(agent_skill, update). Then invoke via agent_skill.invoke(skill_id). Cookie-authed callers (no jti) get -32030 — per-agent attribution requires a bearer token.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Skill name (snake_case alphanumeric). Scoped to your tenant + user_id; unique within that scope."},"description":{"type":"string","description":"When-to-use guidance the AI assistant + sibling agents see when listing skills. Max 500 chars."},"step_count":{"type":"number","description":"Number of recent writes to include. Default 5. Min 1, max 20."},"dry_run":{"type":"boolean","description":"When true, return the proposed sequence without inserting. Use to preview before saving."}},"required":["name","description"]}},{"name":"outbound.log_action","description":"COMPLETE the outbound flow started by outbound.prepare_pii. Acknowledge back to Simpler that your harness's WhatsApp/email/SMS tool delivered (or failed). Records a synthetic event so my_history / time_travel reflect the message was sent. WORKFLOW: outbound.prepare_pii → harness sends → outbound.log_action (this). Always pair these two — partial calls leave the audit log inconsistent. Pass dry_run: true to rehearse the audit shape without writing. Returns the event ID.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity the outbound action was about (e.g. invoice, contact)."},"entity_id":{"type":"string","description":"PK of the entity row."},"channel":{"type":"string","description":"Channel used: whatsapp | email | sms | voice | other."},"status":{"type":"string","description":"Outcome: sent | delivered | failed | bounced.","enum":["sent","delivered","failed","bounced"]},"transcript_ref":{"type":"string","description":"Optional pointer to transcript / message id in harness or external system. Recorded in payload for cross-system trace."},"error_reason":{"type":"string","description":"When status=failed/bounced, the reason. Stored for retry planning."},"reason":{"type":"string","description":"Agent's stated intent for this outbound. Stored as _reason on the event."},"dry_run":{"type":"boolean","description":"When true, rehearse: return the audit shape that would be written without actually emitting the entity_events row or closing a handshake. Default false."}},"required":["entity","entity_id","channel","status"]}},{"name":"ai.query","description":"Execute an ontology aggregation. Example: entity=invoice, aggregation=total_outstanding.","inputSchema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity name (e.g. invoice, contact, risk_book_score). See the `ontology` resource for the full list."},"aggregation":{"type":"string","description":"Aggregation name. See entity definition for available aggregations."}},"required":["entity","aggregation"]}},{"name":"simpler.directory","description":"TIER 1 of the 3-tier discovery pattern. List the ~22 umbrella services with one-line purpose, status (shipped/wip/deferred), and headline cost class. Use this FIRST when you need to find what part of Simpler handles a given user intent — instead of NLP-ing 110+ tool names in tools/list. Once a service looks right, call simpler.describe_service(name) to see its operations. Returns compact DSL keyed by service id.","inputSchema":{"type":"object","properties":{}}},{"name":"simpler.invoke","description":"TIER 3 of the 3-tier discovery pattern. Dispatch to a service operation by name. Resolves (service, operation) → the underlying MCP tool by checking: (1) named tools matching {entity}_{action} for entities owned by the service, (2) hand-curated cross-cutting tools whose namespace matches the service. Returns the same shape as calling the underlying tool directly. Use when you've drilled in via simpler.describe_service and want to invoke without manually mapping the operation name to a tool name.","inputSchema":{"type":"object","properties":{"service":{"type":"string","description":"Service id from simpler.directory (e.g. \"sales\", \"expenses\", \"forecast\")."},"operation":{"type":"string","description":"Operation name from simpler.describe_service output (e.g. \"createInvoice\", \"listExpenses\"). Will be resolved to the matching MCP tool."},"args":{"type":"object","description":"Arguments for the underlying tool — same shape as the tool would accept directly."}},"required":["service","operation"]}},{"name":"simpler.describe_service","description":"TIER 2 of the 3-tier discovery pattern. Drill into one service from simpler.directory — returns the full list of operations with descriptions + routes + cost + PII touch. Operations show as REST routes (`POST /api/invoice` etc.) — those are what humans hit via UI, and what the runtime executor dispatches to. For MCP-callable equivalents, check tools/list for tools sharing the same entity name. Use this to map a user intent to a specific concrete operation before calling.","inputSchema":{"type":"object","properties":{"service":{"type":"string","description":"Service id from simpler.directory (e.g. \"sales\", \"expenses\", \"forecast\")."}},"required":["service"]}},{"name":"ai.entities","description":"List all ontology entities with their aggregations and write operations. Returns compact DSL. Each entity carries mw:1|0 — 1 means MCP-writable (entity_action accepts create/update/delete), 0 means observable-only (use ai.query for aggregations; create/update via REST routes only). Decide your action plan based on mw before invoking writes.","inputSchema":{"type":"object","properties":{}}},{"name":"ai.manifests","description":"List all service manifests with their operations, costs, and dependencies. Returns compact DSL.","inputSchema":{"type":"object","properties":{}}},{"name":"ai.search","description":"Semantic similarity search across the caller's entities (contacts, invoices, quotes, stock items, workflows, sticky notes, brand assets). Use when the user describes something fuzzily (\"that customer who bought in March\", \"my sticky about the pricing call\"). Returns ranked matches with entity previews.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Free-text query. Natural language works best."},"entityType":{"type":"string","description":"Optional filter to one entity type (e.g. contact, invoice, sticky_note)."},"limit":{"type":"number","description":"Max results. Default 10, cap 50."}},"required":["q"]}},{"name":"time_travel.entity_state","description":"Reconstruct an entity's state at a specific point in time by replaying events from the audit log. Use for forensics (\"what did this invoice look like before the bug?\"), calibration (\"what would Forecast have predicted with last month's data?\"), or what-if analysis. State is replayed deterministically from entity_events; tenant-scoped.","inputSchema":{"type":"object","properties":{"entity_type":{"type":"string","description":"Entity type, e.g. invoice, contact, expense."},"entity_id":{"type":"string","description":"Primary key of the entity."},"at":{"type":"string","description":"ISO 8601 timestamp OR unix milliseconds. State is reconstructed at this moment."},"include_trace":{"type":"boolean","description":"If true, includes event-by-event replay trace (max 50 entries). Default false."}},"required":["entity_type","entity_id","at"]}},{"name":"time_travel.entity_history","description":"List all events touching an entity (most recent first). Useful for \"show me what changed on this row and when\" timelines. Tenant-scoped.","inputSchema":{"type":"object","properties":{"entity_type":{"type":"string","description":"Entity type."},"entity_id":{"type":"string","description":"Primary key of the entity."},"limit":{"type":"number","description":"Max events. Default 100, cap 500."}},"required":["entity_type","entity_id"]}},{"name":"workflow.snapshot","description":"Pause a long-running workflow and save state to a snapshot token. Returns an opaque snapshot_id another session (different model, different time) can use to resume. State is opaque JSON — the caller decides what to serialize. Snapshots auto-expire after TTL (default 7 days). Tenant-scoped.","inputSchema":{"type":"object","properties":{"workflow_id":{"type":"string","description":"The workflow being checkpointed."},"state":{"type":"object","description":"Opaque state blob. Common keys: nodeResults, current_step. Caller decides shape."},"step_index":{"type":"number","description":"0-based index of next-to-execute node."},"total_steps":{"type":"number","description":"Total nodes in workflow definition."},"reason":{"type":"string","description":"Why the snapshot was taken (manual pause / resource limit / handoff)."},"ttl_days":{"type":"number","description":"Days before snapshot auto-expires. Default 7."}},"required":["workflow_id","state"]}},{"name":"workflow.resume","description":"Resume a workflow from a snapshot token. Returns the saved state + metadata so the caller can rehydrate the runtime. Tenant-scoped — cross-tenant resume is impossible. Idempotent — calling twice returns the same state.","inputSchema":{"type":"object","properties":{"snapshot_id":{"type":"string","description":"Opaque token from workflow.snapshot."}},"required":["snapshot_id"]}},{"name":"workflow.list_snapshots","description":"List active (non-expired) workflow snapshots for the caller's tenant. Optionally filter by workflow_id. Useful for \"where did I leave off?\" UX.","inputSchema":{"type":"object","properties":{"workflow_id":{"type":"string","description":"Optional filter to one workflow."},"limit":{"type":"number","description":"Max results. Default 20, cap 100."}}}},{"name":"cohort.query","description":"Cross-tenant percentile band for a metric (\"what do similar businesses do?\"). Returns median + p10/p25/p75/p90 + n_tenants for the requested cohort × metric × period. K-anonymity floor: cohorts smaller than 10 tenants are suppressed; borderline cohorts have Laplace noise added (noise_added=1, noise_epsilon=ε). Read-only; never exposes individual tenant data.","inputSchema":{"type":"object","properties":{"cohort_dimension":{"type":"string","description":"'sector' | 'country' | 'sector_country'","enum":["sector","country","sector_country"]},"cohort_value":{"type":"string","description":"e.g. \"agency\", \"SG\", \"agency_SG\""},"metric_name":{"type":"string","description":"Metric to query (e.g. monthly_action_count). See /api/public/cohort/metrics for the list."},"period":{"type":"string","description":"'YYYY-MM' for monthly. Defaults to current month if omitted."}},"required":["cohort_dimension","cohort_value","metric_name"]}},{"name":"risk_book_score_current","description":"Current risk snapshot for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"risk_book_score_summary","description":"Concise risk summary: tier + default probability + concentration + ruin horizon Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"risk_book_score_list","description":"List risk-book score rows for the caller's tenant. Typically singleton; cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the risk_book_score."}},"required":[]}},{"name":"reputation_book_score_current","description":"Current reputation snapshot for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"reputation_book_score_summary","description":"Concise reputation summary: tier + trust score + fulfillment + disputes + trend Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"reputation_book_score_list","description":"List reputation-book score rows for the caller's tenant. Typically singleton; cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the reputation_book_score."}},"required":[]}},{"name":"loan_book_health_current","description":"Current financial health snapshot for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"loan_book_health_summary","description":"Concise health summary: composite score + tier + runway + margins Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"loan_book_health_list","description":"List loan-book health snapshots for the caller's tenant. Typically singleton; cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the loan_book_health."}},"required":[]}},{"name":"ops_book_current","description":"Current engagement profile for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"ops_book_summary","description":"Concise engagement summary: score + sessions + adoption + last-active Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"ops_book_list","description":"List ops-book profile rows for the caller's tenant. Typically singleton; cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the ops_book."}},"required":[]}},{"name":"platform_behavior_latest","description":"Most recent monthly behavior score Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"platform_behavior_trend","description":"Last 6 months of composite + component scores Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"platform_behavior_summary","description":"Current tier + reason + composite score Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"platform_behavior_list","description":"List platform-behavior summary rows for the caller's tenant. Typically singleton; cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the platform_behavior."}},"required":[]}},{"name":"cash_flow_latest","description":"Most recent cash-flow snapshot Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"cash_flow_trend","description":"Last 6 months of revenue, expenses, net cash flow Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"cash_flow_trend_period","description":"Cash-flow rows within a YYYY-MM range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"cash_flow_summary","description":"Current-month revenue + expenses + net + margin Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"cash_flow_list","description":"List cash-flow health snapshots for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the cash_flow."}},"required":[]}},{"name":"receivables_latest","description":"Most recent aging snapshot Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"receivables_trend","description":"Last 6 months of overdue receivables, DSO, and 90+ exposure Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"receivables_summary","description":"Current aging breakdown across all buckets + DSO Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"receivables_list","description":"List receivables-aging snapshots for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the receivables."}},"required":[]}},{"name":"revenue_latest","description":"Most recent velocity snapshot Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"revenue_trend","description":"Last 6 months of invoice velocity and conversion Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"revenue_summary","description":"Current velocity: counts + conversion + pipeline + trend Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"revenue_list","description":"List revenue snapshots for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the revenue."}},"required":[]}},{"name":"business_context_current","description":"Current discovery profile for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"business_context_summary","description":"Identity + pain points + confidence Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"business_context_list","description":"List business-context profile rows for the caller's tenant. Typically singleton; cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the business_context."}},"required":[]}},{"name":"business_context_search","description":"Semantic search over the caller's business-context profile rows. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the business_context."},"limit":{"type":"string","description":"The limit of the business_context."},"threshold":{"type":"string","description":"The threshold of the business_context."}},"required":["q"]}},{"name":"risk_warning_active","description":"All unresolved warnings, worst severity first Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"risk_warning_recent","description":"Most recent 10 warnings (active or resolved) Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"risk_warning_summary","description":"Count of active warnings grouped by severity Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"risk_warning_list","description":"List active risk warnings for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the risk_warning."}},"required":[]}},{"name":"risk_warning_search","description":"Semantic search over active risk warnings for the caller's tenant. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the risk_warning."},"limit":{"type":"string","description":"The limit of the risk_warning."},"threshold":{"type":"string","description":"The threshold of the risk_warning."}},"required":["q"]}},{"name":"business_relationship_top_by_value","description":"Top 10 counterparties by total value Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"business_relationship_summary","description":"Aggregate relationship stats: counts by state + totals Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"business_relationship_active","description":"Currently-active counterparties Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"business_relationship_list","description":"List relationship-book edges for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the business_relationship."}},"required":[]}},{"name":"demand_signal_open","description":"Top 10 open signals by confidence Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"demand_signal_recent","description":"Most recent 10 signals (acted or not) Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"demand_signal_summary","description":"Signal counts: total + open + acted Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"demand_signal_list","description":"List demand-signal rows for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the demand_signal."}},"required":[]}},{"name":"demand_signal_search","description":"Semantic search over demand-signal rows for the caller's tenant. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the demand_signal."},"limit":{"type":"string","description":"The limit of the demand_signal."},"threshold":{"type":"string","description":"The threshold of the demand_signal."}},"required":["q"]}},{"name":"forecast_current","description":"Most recent Oracle profile for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"forecast_summary","description":"Concise forecast summary: business + data months + baseline revenue Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"forecast_tracks","description":"All ensemble tracks (percentile bands) for this tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"forecast_narratives","description":"Human-readable narratives per forecast band Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"forecast_list","description":"List forecast (oracle) rows for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the forecast."}},"required":[]}},{"name":"forecast_search","description":"Semantic search over the caller's oracle forecast rows. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the forecast."},"limit":{"type":"string","description":"The limit of the forecast."},"threshold":{"type":"string","description":"The threshold of the forecast."}},"required":["q"]}},{"name":"sector_genome_current","description":"Most recent genome snapshot for the tenant Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"sector_genome_summary","description":"Concise genome summary: sector + solvency + predictability Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"sector_genome_history","description":"Last 6 genome snapshots for trend analysis Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"sector_genome_list","description":"List sector-genome snapshots for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the sector_genome."}},"required":[]}},{"name":"sector_genome_search","description":"Semantic search over sector-genome snapshots for the caller's tenant. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the sector_genome."},"limit":{"type":"string","description":"The limit of the sector_genome."},"threshold":{"type":"string","description":"The threshold of the sector_genome."}},"required":["q"]}},{"name":"message_log_recent","description":"Most recent 10 messages across all contacts Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"message_log_summary","description":"Message counts + avg response time by direction Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"message_log_count_period","description":"Message counts by direction + channel within a date range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_create","description":"Create a new invoice.","inputSchema":{"type":"object","properties":{"client_id":{"type":"string","description":"The client_id of the invoice."},"invoice_number":{"type":"string","description":"The invoice_number of the invoice."},"status":{"type":"string","description":"draft, sent, viewed, paid, overdue, cancelled"},"issue_date":{"type":"string","description":"The issue_date of the invoice."},"due_date":{"type":"string","description":"The due_date of the invoice."},"subtotal":{"type":"number","description":"The subtotal of the invoice."},"tax_amount":{"type":"number","description":"The tax_amount of the invoice."},"total":{"type":"number","description":"The total of the invoice."},"currency":{"type":"string","description":"ISO 4217 currency code (3 chars)."},"notes":{"type":"string","description":"Free-text notes."},"payment_terms":{"type":"string","description":"The payment_terms of the invoice."},"source_type":{"type":"string","description":"The source_type of the invoice."},"source_id":{"type":"string","description":"The source_id of the invoice."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["client_id","invoice_number"]}},{"name":"invoice_update","description":"Update fields on an existing invoice.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the invoice to update."},"status":{"type":"string","description":"draft, sent, viewed, paid, overdue, cancelled"},"paid_at":{"type":"string","description":"The paid_at of the invoice."},"notes":{"type":"string","description":"Free-text notes."},"due_date":{"type":"string","description":"The due_date of the invoice."},"sent_at":{"type":"string","description":"The sent_at of the invoice."},"viewed_at":{"type":"string","description":"The viewed_at of the invoice."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"invoice_delete","description":"Soft-delete (archive) a invoice. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the invoice to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"invoice_total_outstanding","description":"Total amount outstanding (sent + viewed + overdue), primary currency Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_total_overdue","description":"Total overdue invoices, primary currency Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_total_overdue_period","description":"Overdue invoices whose due date falls in a date range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_total_paid","description":"Total paid invoices, primary currency Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_total_paid_period","description":"Total paid in a date range, primary currency Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_count_by_status","description":"Invoice counts grouped by status Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_count_by_status_period","description":"Invoice counts by status in a date range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_outstanding_by_client","description":"Outstanding amounts grouped by client Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_outstanding_for_client","description":"Outstanding amount for a specific client, primary currency Free.","inputSchema":{"type":"object","properties":{"client_id":{"type":"string","description":"The client_id of the invoice."}},"required":[]}},{"name":"invoice_outstanding_for_client_period","description":"Outstanding for a client in a date range Free.","inputSchema":{"type":"object","properties":{"client_id":{"type":"string","description":"The client_id of the invoice."},"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_recent","description":"Most recent invoices Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_list_all","description":"All invoices (up to 25) Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_list_period","description":"Invoices in a date range (up to 25) Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_created_period","description":"Invoices created in a date range, primary currency Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"invoice_share","description":"Grant another user or tenant access to this invoice. Caller must currently be an owner. Use role=reader for view-only, writer for edit, owner for full control. Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the invoice."},"grantee":{"type":"string","description":"The grantee of the invoice."},"role":{"type":"string","description":"The role of the invoice."},"grantee_type":{"type":"string","description":"The grantee_type of the invoice."}},"required":["entity_id","grantee"]}},{"name":"invoice_get","description":"Read one invoice by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the invoice."}},"required":["id"]}},{"name":"invoice_list","description":"List recent invoices for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the invoice."}},"required":[]}},{"name":"invoice_search","description":"Semantic search over the caller's invoices. Useful for fuzzy invoice-number / status / notes lookups. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the invoice."},"limit":{"type":"string","description":"The limit of the invoice."},"threshold":{"type":"string","description":"The threshold of the invoice."}},"required":["q"]}},{"name":"invoice_create_then_update_3step","description":"Compound: create invoice, mark sent, update contact in one step. Mined from 12 tenants × 12 occurrences across 30 days. Free.","inputSchema":{"type":"object","properties":{"sequence":{"type":"string","description":"The sequence of the invoice."}},"required":[]}},{"name":"invoice_client_create","description":"Create a new invoice_client. PII fields (name, email, phone) are tokenized at the server boundary — pass plaintext.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Display name (tokenized server-side)."},"email":{"type":"string","description":"Email address (tokenized server-side)."},"company":{"type":"string","description":"Company name (tokenized server-side)."},"phone":{"type":"string","description":"Phone number (tokenized server-side)."},"address":{"type":"string","description":"The address of the invoice_client."},"tax_id":{"type":"string","description":"The tax_id of the invoice_client."},"default_payment_terms":{"type":"string","description":"The default_payment_terms of the invoice_client."},"notes":{"type":"string","description":"Free-text notes."},"contact_id":{"type":"string","description":"The contact_id of the invoice_client."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["name"]}},{"name":"invoice_client_update","description":"Update fields on an existing invoice_client. PII fields (name, email, phone) are tokenized at the server boundary — pass plaintext.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the invoice_client to update."},"name":{"type":"string","description":"Display name (tokenized server-side)."},"email":{"type":"string","description":"Email address (tokenized server-side)."},"company":{"type":"string","description":"Company name (tokenized server-side)."},"phone":{"type":"string","description":"Phone number (tokenized server-side)."},"address":{"type":"string","description":"The address of the invoice_client."},"tax_id":{"type":"string","description":"The tax_id of the invoice_client."},"default_payment_terms":{"type":"string","description":"The default_payment_terms of the invoice_client."},"notes":{"type":"string","description":"Free-text notes."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"invoice_client_delete","description":"Hard-delete a invoice_client. Irreversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the invoice_client to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"invoice_client_list_all","description":"All clients with invoice summaries Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"invoice_client_find_by_name","description":"Find client by name or company Free.","inputSchema":{"type":"object","properties":{"search_term":{"type":"string","description":"The search_term of the invoice_client."}},"required":[]}},{"name":"invoice_client_share","description":"Grant access to a client record (e.g., let your accountant view). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the invoice_client."},"grantee":{"type":"string","description":"The grantee of the invoice_client."},"role":{"type":"string","description":"The role of the invoice_client."},"grantee_type":{"type":"string","description":"The grantee_type of the invoice_client."}},"required":["entity_id","grantee"]}},{"name":"invoice_client_get","description":"Read one invoice client by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the invoice_client."}},"required":["id"]}},{"name":"invoice_client_list","description":"List recent invoice clients for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the invoice_client."}},"required":[]}},{"name":"invoice_client_search","description":"Semantic search over the caller's invoice clients. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the invoice_client."},"limit":{"type":"string","description":"The limit of the invoice_client."},"threshold":{"type":"string","description":"The threshold of the invoice_client."}},"required":["q"]}},{"name":"expense_create","description":"Create a new expense.","inputSchema":{"type":"object","properties":{"vendor":{"type":"string","description":"The vendor of the expense."},"amount":{"type":"number","description":"Amount in the currency unit."},"currency":{"type":"string","description":"ISO 4217 currency code (3 chars)."},"category":{"type":"string","description":"The category of the expense."},"expense_date":{"type":"string","description":"The expense_date of the expense."},"receipt_url":{"type":"string","description":"The receipt_url of the expense."},"notes":{"type":"string","description":"Free-text notes."},"status":{"type":"string","description":"Status value."},"subtotal":{"type":"string","description":"The subtotal of the expense."},"tax_amount":{"type":"string","description":"The tax_amount of the expense."},"tax_rate":{"type":"string","description":"The tax_rate of the expense."},"tax_type":{"type":"string","description":"The tax_type of the expense."},"ocr_data":{"type":"string","description":"The ocr_data of the expense."},"recurrence_id":{"type":"string","description":"The recurrence_id of the expense."},"tags":{"type":"string","description":"Comma-separated tags or JSON array."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["vendor","amount"]}},{"name":"expense_update","description":"Update fields on an existing expense.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the expense to update."},"status":{"type":"string","description":"Status value."},"notes":{"type":"string","description":"Free-text notes."},"category":{"type":"string","description":"The category of the expense."},"vendor":{"type":"string","description":"The vendor of the expense."},"amount":{"type":"number","description":"Amount in the currency unit."},"expense_date":{"type":"string","description":"The expense_date of the expense."},"currency":{"type":"string","description":"ISO 4217 currency code (3 chars)."},"tax_amount":{"type":"string","description":"The tax_amount of the expense."},"tax_rate":{"type":"string","description":"The tax_rate of the expense."},"tax_type":{"type":"string","description":"The tax_type of the expense."},"subtotal":{"type":"string","description":"The subtotal of the expense."},"tags":{"type":"string","description":"Comma-separated tags or JSON array."},"approval_status":{"type":"string","description":"The approval_status of the expense."},"submitted_by":{"type":"string","description":"The submitted_by of the expense."},"submitted_at":{"type":"string","description":"The submitted_at of the expense."},"approved_by":{"type":"string","description":"The approved_by of the expense."},"approved_at":{"type":"string","description":"The approved_at of the expense."},"rejected_by":{"type":"string","description":"The rejected_by of the expense."},"rejected_at":{"type":"string","description":"The rejected_at of the expense."},"rejection_reason":{"type":"string","description":"The rejection_reason of the expense."},"reimbursed_by":{"type":"string","description":"The reimbursed_by of the expense."},"reimbursed_at":{"type":"string","description":"The reimbursed_at of the expense."},"reimbursement_date":{"type":"string","description":"The reimbursement_date of the expense."},"reimbursement_reference":{"type":"string","description":"The reimbursement_reference of the expense."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"expense_delete","description":"Soft-delete (archive) a expense. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the expense to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"expense_total_spent","description":"Total spending all time, primary currency Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"expense_total_spent_period","description":"Total spending in a date range, primary currency Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"expense_by_category","description":"Spending grouped by category Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"expense_by_category_period","description":"Spending by category in a date range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"expense_by_vendor","description":"Top vendors by spending Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"expense_by_vendor_period","description":"Top vendors by spending in a date range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"expense_total_count","description":"Total number of expenses Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"expense_total_count_period","description":"Number of expenses in a date range Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"expense_recent","description":"Most recent expenses Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"expense_list_all","description":"All expenses (up to 25) Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"expense_list_period","description":"Expenses in a date range (up to 25) Free.","inputSchema":{"type":"object","properties":{"start_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."},"end_date":{"type":"string","description":"ISO 8601 date (YYYY-MM-DD)."}},"required":[]}},{"name":"expense_share","description":"Grant access to this expense (typically: share with bookkeeper). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the expense."},"grantee":{"type":"string","description":"The grantee of the expense."},"role":{"type":"string","description":"The role of the expense."},"grantee_type":{"type":"string","description":"The grantee_type of the expense."}},"required":["entity_id","grantee"]}},{"name":"expense_get","description":"Read one expense by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the expense."}},"required":["id"]}},{"name":"expense_list","description":"List recent expenses for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the expense."}},"required":[]}},{"name":"expense_search","description":"Semantic search over the caller's expenses. Useful for fuzzy vendor / category lookups. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the expense."},"limit":{"type":"string","description":"The limit of the expense."},"threshold":{"type":"string","description":"The threshold of the expense."}},"required":["q"]}},{"name":"contact_create","description":"Create a new contact. PII fields (name, phone_number, email, company) are tokenized at the server boundary — pass plaintext.","inputSchema":{"type":"object","properties":{"phone_number":{"type":"string","description":"Phone number (tokenized server-side)."},"email":{"type":"string","description":"Email address (tokenized server-side)."},"name":{"type":"string","description":"Display name (tokenized server-side)."},"company":{"type":"string","description":"Company name (tokenized server-side)."},"address":{"type":"string","description":"The address of the contact."},"status":{"type":"string","description":"lead, customer, inactive"},"tags":{"type":"string","description":"Comma-separated tags or JSON array."},"notes":{"type":"string","description":"Free-text notes."},"source":{"type":"string","description":"The source of the contact."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["phone_number"]}},{"name":"contact_update","description":"Update fields on an existing contact. PII fields (name, phone_number, email, company) are tokenized at the server boundary — pass plaintext.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the contact to update."},"email":{"type":"string","description":"Email address (tokenized server-side)."},"name":{"type":"string","description":"Display name (tokenized server-side)."},"company":{"type":"string","description":"Company name (tokenized server-side)."},"address":{"type":"string","description":"The address of the contact."},"status":{"type":"string","description":"lead, customer, inactive"},"tags":{"type":"string","description":"Comma-separated tags or JSON array."},"notes":{"type":"string","description":"Free-text notes."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"contact_delete","description":"Soft-delete (archive) a contact. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the contact to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"contact_count_by_status","description":"Contact counts by status (lead, customer, inactive) Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"contact_total_count","description":"Total number of contacts Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"contact_recent_activity","description":"Most recently active contacts Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"contact_share","description":"Grant access to this contact (e.g., share a lead with a sales colleague). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the contact."},"grantee":{"type":"string","description":"The grantee of the contact."},"role":{"type":"string","description":"The role of the contact."},"grantee_type":{"type":"string","description":"The grantee_type of the contact."}},"required":["entity_id","grantee"]}},{"name":"contact_get","description":"Read one contact by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the contact."}},"required":["id"]}},{"name":"contact_list","description":"List recent contacts for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the contact."}},"required":[]}},{"name":"contact_search","description":"Semantic search over the caller's contacts. Useful for \"that customer who bought in March\". Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the contact."},"limit":{"type":"string","description":"The limit of the contact."},"threshold":{"type":"string","description":"The threshold of the contact."}},"required":["q"]}},{"name":"workflow_create","description":"Create a new workflow.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Display name (tokenized server-side)."},"description":{"type":"string","description":"The description of the workflow."},"is_active":{"type":"boolean","description":"The is_active of the workflow."},"trigger_type":{"type":"string","description":"The trigger_type of the workflow."},"steps_json":{"type":"string","description":"The steps_json of the workflow."},"workflow_json":{"type":"string","description":"The workflow_json of the workflow."},"definition":{"type":"string","description":"The definition of the workflow."},"trigger_config":{"type":"string","description":"The trigger_config of the workflow."},"zone":{"type":"string","description":"The zone of the workflow."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["name"]}},{"name":"workflow_update","description":"Update fields on an existing workflow.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the workflow to update."},"name":{"type":"string","description":"Display name (tokenized server-side)."},"description":{"type":"string","description":"The description of the workflow."},"is_active":{"type":"boolean","description":"The is_active of the workflow."},"trigger_type":{"type":"string","description":"The trigger_type of the workflow."},"steps_json":{"type":"string","description":"The steps_json of the workflow."},"workflow_json":{"type":"string","description":"The workflow_json of the workflow."},"definition":{"type":"string","description":"The definition of the workflow."},"trigger_config":{"type":"string","description":"The trigger_config of the workflow."},"zone":{"type":"string","description":"The zone of the workflow."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"workflow_delete","description":"Soft-delete (archive) a workflow. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the workflow to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"workflow_summary","description":"Workflow summary stats Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"workflow_list_active","description":"All active workflows Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"workflow_share","description":"Grant access to this workflow definition (e.g., share an automation template with a teammate). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the workflow."},"grantee":{"type":"string","description":"The grantee of the workflow."},"role":{"type":"string","description":"The role of the workflow."},"grantee_type":{"type":"string","description":"The grantee_type of the workflow."}},"required":["entity_id","grantee"]}},{"name":"workflow_get","description":"Read one workflow by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the workflow."}},"required":["id"]}},{"name":"workflow_list","description":"List recent workflows for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the workflow."}},"required":[]}},{"name":"workflow_search","description":"Semantic search over the caller's workflow definitions. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the workflow."},"limit":{"type":"string","description":"The limit of the workflow."},"threshold":{"type":"string","description":"The threshold of the workflow."}},"required":["q"]}},{"name":"team_member_update","description":"Update fields on an existing team_member.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the team_member to update."},"role":{"type":"string","description":"The role of the team_member."},"permissions":{"type":"string","description":"The permissions of the team_member."},"is_active":{"type":"string","description":"The is_active of the team_member."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"team_member_delete","description":"Hard-delete a team_member. Irreversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the team_member to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"team_member_count","description":"Total team member count Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"team_member_share","description":"Grant access to a team-member profile (e.g., reveal contact details to a co-manager). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the team_member."},"grantee":{"type":"string","description":"The grantee of the team_member."},"role":{"type":"string","description":"The role of the team_member."},"grantee_type":{"type":"string","description":"The grantee_type of the team_member."}},"required":["entity_id","grantee"]}},{"name":"team_member_get","description":"Read one team member by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the team_member."}},"required":["id"]}},{"name":"team_member_list","description":"List team members for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the team_member."}},"required":[]}},{"name":"stock_item_create","description":"Create a new stock_item.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Display name (tokenized server-side)."},"quantity":{"type":"number","description":"The quantity of the stock_item."},"unit":{"type":"string","description":"The unit of the stock_item."},"low_stock_threshold":{"type":"number","description":"The low_stock_threshold of the stock_item."},"cost_per_unit":{"type":"string","description":"The cost_per_unit of the stock_item."},"sell_price":{"type":"number","description":"The sell_price of the stock_item."},"category":{"type":"string","description":"The category of the stock_item."},"photo_url":{"type":"string","description":"The photo_url of the stock_item."},"expiry_date":{"type":"string","description":"The expiry_date of the stock_item."},"notes":{"type":"string","description":"Free-text notes."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["name"]}},{"name":"stock_item_update","description":"Update fields on an existing stock_item.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the stock_item to update."},"name":{"type":"string","description":"Display name (tokenized server-side)."},"quantity":{"type":"number","description":"The quantity of the stock_item."},"unit":{"type":"string","description":"The unit of the stock_item."},"low_stock_threshold":{"type":"number","description":"The low_stock_threshold of the stock_item."},"cost_per_unit":{"type":"string","description":"The cost_per_unit of the stock_item."},"sell_price":{"type":"number","description":"The sell_price of the stock_item."},"category":{"type":"string","description":"The category of the stock_item."},"photo_url":{"type":"string","description":"The photo_url of the stock_item."},"expiry_date":{"type":"string","description":"The expiry_date of the stock_item."},"notes":{"type":"string","description":"Free-text notes."},"is_active":{"type":"string","description":"The is_active of the stock_item."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"stock_item_delete","description":"Soft-delete (archive) a stock_item. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the stock_item to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"stock_item_list_all","description":"All active stock items Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"stock_item_low_stock","description":"Items at or below low-stock threshold Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"stock_item_share","description":"Grant access to this stock item (e.g., let warehouse staff update quantity without full inventory access). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the stock_item."},"grantee":{"type":"string","description":"The grantee of the stock_item."},"role":{"type":"string","description":"The role of the stock_item."},"grantee_type":{"type":"string","description":"The grantee_type of the stock_item."}},"required":["entity_id","grantee"]}},{"name":"stock_item_get","description":"Read one stock item by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the stock_item."}},"required":["id"]}},{"name":"stock_item_list","description":"List recent stock items for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the stock_item."}},"required":[]}},{"name":"stock_item_search","description":"Semantic search over the caller's stock items (sku / name / description). Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the stock_item."},"limit":{"type":"string","description":"The limit of the stock_item."},"threshold":{"type":"string","description":"The threshold of the stock_item."}},"required":["q"]}},{"name":"quote_create","description":"Create a new quote.","inputSchema":{"type":"object","properties":{"client_id":{"type":"string","description":"The client_id of the quote."},"quote_number":{"type":"string","description":"The quote_number of the quote."},"status":{"type":"string","description":"Status value."},"issue_date":{"type":"string","description":"The issue_date of the quote."},"valid_until":{"type":"string","description":"The valid_until of the quote."},"subtotal":{"type":"string","description":"The subtotal of the quote."},"tax_amount":{"type":"string","description":"The tax_amount of the quote."},"total":{"type":"number","description":"The total of the quote."},"currency":{"type":"string","description":"ISO 4217 currency code (3 chars)."},"notes":{"type":"string","description":"Free-text notes."},"payment_terms":{"type":"string","description":"The payment_terms of the quote."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["client_id","quote_number"]}},{"name":"quote_update","description":"Update fields on an existing quote.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the quote to update."},"status":{"type":"string","description":"Status value."},"issue_date":{"type":"string","description":"The issue_date of the quote."},"valid_until":{"type":"string","description":"The valid_until of the quote."},"subtotal":{"type":"string","description":"The subtotal of the quote."},"tax_amount":{"type":"string","description":"The tax_amount of the quote."},"total":{"type":"number","description":"The total of the quote."},"currency":{"type":"string","description":"ISO 4217 currency code (3 chars)."},"notes":{"type":"string","description":"Free-text notes."},"payment_terms":{"type":"string","description":"The payment_terms of the quote."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"quote_delete","description":"Soft-delete (archive) a quote. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the quote to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"quote_list_all","description":"Recent quotes Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"quote_pending","description":"Sent quotes awaiting client response Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"quote_share","description":"Grant access to this quote (e.g., share with a colleague for review before sending). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the quote."},"grantee":{"type":"string","description":"The grantee of the quote."},"role":{"type":"string","description":"The role of the quote."},"grantee_type":{"type":"string","description":"The grantee_type of the quote."}},"required":["entity_id","grantee"]}},{"name":"quote_get","description":"Read one quote by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the quote."}},"required":["id"]}},{"name":"quote_list","description":"List recent quotes for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the quote."}},"required":[]}},{"name":"sticky_note_create","description":"Create a new sticky_note.","inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"The content of the sticky_note."},"color":{"type":"string","description":"The color of the sticky_note."},"position_x":{"type":"number","description":"The position_x of the sticky_note."},"position_y":{"type":"number","description":"The position_y of the sticky_note."},"width":{"type":"string","description":"The width of the sticky_note."},"height":{"type":"string","description":"The height of the sticky_note."},"z_index":{"type":"string","description":"The z_index of the sticky_note."},"triggers_at":{"type":"string","description":"The triggers_at of the sticky_note."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":[]}},{"name":"sticky_note_update","description":"Update fields on an existing sticky_note.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the sticky_note to update."},"content":{"type":"string","description":"The content of the sticky_note."},"color":{"type":"string","description":"The color of the sticky_note."},"position_x":{"type":"number","description":"The position_x of the sticky_note."},"position_y":{"type":"number","description":"The position_y of the sticky_note."},"width":{"type":"string","description":"The width of the sticky_note."},"height":{"type":"string","description":"The height of the sticky_note."},"z_index":{"type":"string","description":"The z_index of the sticky_note."},"triggers_at":{"type":"string","description":"The triggers_at of the sticky_note."},"triggered":{"type":"string","description":"The triggered of the sticky_note."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"sticky_note_delete","description":"Hard-delete a sticky_note. Irreversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the sticky_note to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"sticky_note_list_all","description":"All sticky notes on this user's Desk Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"sticky_note_share","description":"Grant access to this sticky note (e.g., share a research note with a colleague on the same Desk canvas). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the sticky_note."},"grantee":{"type":"string","description":"The grantee of the sticky_note."},"role":{"type":"string","description":"The role of the sticky_note."},"grantee_type":{"type":"string","description":"The grantee_type of the sticky_note."}},"required":["entity_id","grantee"]}},{"name":"sticky_note_get","description":"Read one sticky note by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the sticky_note."}},"required":["id"]}},{"name":"sticky_note_list","description":"List recent sticky notes for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the sticky_note."}},"required":[]}},{"name":"sticky_note_search","description":"Semantic search over the caller's sticky notes. Useful for \"my sticky about the pricing call\". Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the sticky_note."},"limit":{"type":"string","description":"The limit of the sticky_note."},"threshold":{"type":"string","description":"The threshold of the sticky_note."}},"required":["q"]}},{"name":"brand_asset_create","description":"Create a new brand_asset.","inputSchema":{"type":"object","properties":{"logo_url":{"type":"string","description":"The logo_url of the brand_asset."},"primary_color":{"type":"string","description":"The primary_color of the brand_asset."},"secondary_color":{"type":"string","description":"The secondary_color of the brand_asset."},"font_family":{"type":"string","description":"The font_family of the brand_asset."},"business_name":{"type":"string","description":"The business_name of the brand_asset."},"tagline":{"type":"string","description":"The tagline of the brand_asset."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":[]}},{"name":"brand_asset_update","description":"Update fields on an existing brand_asset.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the brand_asset to update."},"logo_url":{"type":"string","description":"The logo_url of the brand_asset."},"primary_color":{"type":"string","description":"The primary_color of the brand_asset."},"secondary_color":{"type":"string","description":"The secondary_color of the brand_asset."},"font_family":{"type":"string","description":"The font_family of the brand_asset."},"business_name":{"type":"string","description":"The business_name of the brand_asset."},"tagline":{"type":"string","description":"The tagline of the brand_asset."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"brand_asset_current","description":"Current brand asset for this user Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"brand_asset_share","description":"Grant access to a brand asset (e.g., share the logo + palette set with a freelance designer). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the brand_asset."},"grantee":{"type":"string","description":"The grantee of the brand_asset."},"role":{"type":"string","description":"The role of the brand_asset."},"grantee_type":{"type":"string","description":"The grantee_type of the brand_asset."}},"required":["entity_id","grantee"]}},{"name":"brand_asset_get","description":"Read one brand asset by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the brand_asset."}},"required":["id"]}},{"name":"brand_asset_list","description":"List recent brand assets for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the brand_asset."}},"required":[]}},{"name":"brand_asset_search","description":"Semantic search over the caller's brand assets. Vectorize-ranked when indexed; LIKE fallback otherwise. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the brand_asset."},"limit":{"type":"string","description":"The limit of the brand_asset."},"threshold":{"type":"string","description":"The threshold of the brand_asset."}},"required":["q"]}},{"name":"spreadsheet_file_create","description":"Create a new spreadsheet_file.","inputSchema":{"type":"object","properties":{"r2_key":{"type":"string","description":"The r2_key of the spreadsheet_file."},"title":{"type":"string","description":"The title of the spreadsheet_file."},"original_filename":{"type":"string","description":"The original_filename of the spreadsheet_file."},"file_size":{"type":"number","description":"The file_size of the spreadsheet_file."},"sheet_count":{"type":"string","description":"The sheet_count of the spreadsheet_file."},"row_count":{"type":"string","description":"The row_count of the spreadsheet_file."},"column_count":{"type":"string","description":"The column_count of the spreadsheet_file."},"sheet_names":{"type":"string","description":"The sheet_names of the spreadsheet_file."},"folder_id":{"type":"string","description":"The folder_id of the spreadsheet_file."},"tags":{"type":"string","description":"Comma-separated tags or JSON array."},"source":{"type":"string","description":"upload or ai-generated"},"ai_prompt":{"type":"string","description":"The ai_prompt of the spreadsheet_file."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["r2_key","title","original_filename"]}},{"name":"spreadsheet_file_update","description":"Update fields on an existing spreadsheet_file.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the spreadsheet_file to update."},"title":{"type":"string","description":"The title of the spreadsheet_file."},"folder_id":{"type":"string","description":"The folder_id of the spreadsheet_file."},"tags":{"type":"string","description":"Comma-separated tags or JSON array."},"sheet_names":{"type":"string","description":"The sheet_names of the spreadsheet_file."},"row_count":{"type":"string","description":"The row_count of the spreadsheet_file."},"column_count":{"type":"string","description":"The column_count of the spreadsheet_file."},"file_size":{"type":"number","description":"The file_size of the spreadsheet_file."},"sheet_count":{"type":"string","description":"The sheet_count of the spreadsheet_file."},"last_analyzed_at":{"type":"string","description":"The last_analyzed_at of the spreadsheet_file."},"analysis_summary":{"type":"string","description":"The analysis_summary of the spreadsheet_file."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"spreadsheet_file_delete","description":"Soft-delete (archive) a spreadsheet_file. Reversible.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the spreadsheet_file to delete."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"spreadsheet_file_list_all","description":"All spreadsheet files for this user Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"spreadsheet_file_share","description":"Grant access to this spreadsheet file. Reader role gives view-only; writer can edit cells; owner can re-share. Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the spreadsheet_file."},"grantee":{"type":"string","description":"The grantee of the spreadsheet_file."},"role":{"type":"string","description":"The role of the spreadsheet_file."},"grantee_type":{"type":"string","description":"The grantee_type of the spreadsheet_file."}},"required":["entity_id","grantee"]}},{"name":"spreadsheet_file_get","description":"Read one spreadsheet file by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the spreadsheet_file."}},"required":["id"]}},{"name":"spreadsheet_file_list","description":"List recent spreadsheet files for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the spreadsheet_file."}},"required":[]}},{"name":"spreadsheet_file_search","description":"Semantic search over the caller's spreadsheet files (title + filename). Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the spreadsheet_file."},"limit":{"type":"string","description":"The limit of the spreadsheet_file."},"threshold":{"type":"string","description":"The threshold of the spreadsheet_file."}},"required":["q"]}},{"name":"vote_proposal_create","description":"Create a new vote_proposal.","inputSchema":{"type":"object","properties":{"cycle_id":{"type":"string","description":"The cycle_id of the vote_proposal."},"title":{"type":"string","description":"The title of the vote_proposal."},"description":{"type":"string","description":"The description of the vote_proposal."},"effort_estimate":{"type":"string","description":"The effort_estimate of the vote_proposal."},"category":{"type":"string","description":"The category of the vote_proposal."},"source_request_ids":{"type":"string","description":"The source_request_ids of the vote_proposal."},"carry_over_from_cycle_id":{"type":"string","description":"The carry_over_from_cycle_id of the vote_proposal."},"carry_over_weight":{"type":"string","description":"The carry_over_weight of the vote_proposal."},"carry_over_count":{"type":"string","description":"The carry_over_count of the vote_proposal."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["cycle_id","title"]}},{"name":"vote_proposal_update","description":"Update fields on an existing vote_proposal.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the vote_proposal to update."},"status":{"type":"string","description":"Status value."},"_reason":{"type":"string","description":"Optional: why you are calling this action. Stored in the audit log."}},"required":["id"]}},{"name":"vote_proposal_current_cycle","description":"All proposals in the currently-open cycle Free.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"vote_proposal_share","description":"Grant access to this vote proposal (e.g., expose to a wider review pool before opening voting). Free.","inputSchema":{"type":"object","properties":{"entity_id":{"type":"string","description":"The entity_id of the vote_proposal."},"grantee":{"type":"string","description":"The grantee of the vote_proposal."},"role":{"type":"string","description":"The role of the vote_proposal."},"grantee_type":{"type":"string","description":"The grantee_type of the vote_proposal."}},"required":["entity_id","grantee"]}},{"name":"vote_proposal_get","description":"Read one vote proposal by id. Tenant-scoped; ACL checked. Free.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the vote_proposal."}},"required":["id"]}},{"name":"vote_proposal_list","description":"List recent vote proposals for the caller's tenant. Most-recent-first; default 25, cap 100. Free.","inputSchema":{"type":"object","properties":{"limit":{"type":"string","description":"The limit of the vote_proposal."}},"required":[]}},{"name":"vote_proposal_search","description":"Semantic search over vote proposals. Tenant-scoped. Free.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"The q of the vote_proposal."},"limit":{"type":"string","description":"The limit of the vote_proposal."},"threshold":{"type":"string","description":"The threshold of the vote_proposal."}},"required":["q"]}},{"name":"image.cut_background","description":"[paid: $0.05] Remove the background from a photo, leaving the subject on transparency. Returns a new image URL. Calls FAL BiRefNet under the hood.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Public HTTPS URL or data: URL of the source photo (max 10MB)."}},"required":["image_url"]}},{"name":"image.generate","description":"[paid: $0.05/image] Generate one or more images from a text prompt. Optional reference_image triggers img2img mode (single image, deterministic). STREAMING SUPPORTED: send `Accept: text/event-stream` for per-phase progress events.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Image description."},"width":{"type":"number","description":"Output width in px (256-2048, default 1024)."},"height":{"type":"number","description":"Output height in px (256-2048, default 1024)."},"count":{"type":"number","description":"Number of variations to return (1-3, default 1)."},"reference_image":{"type":"string","description":"Optional reference image URL/data-URL. When set, count is forced to 1."},"reference_strength":{"type":"number","description":"How strongly the reference influences the output (0.1-0.95, default 0.6). Lower = more like prompt, higher = more like reference."}},"required":["prompt"]}},{"name":"image.upscale","description":"[paid: $0.08] Upscale a photo 2× or 4× via FAL aura-sr super-resolution. Use to bring AI-generated or low-res images to print/display quality.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Public HTTPS URL or data: URL."},"scale":{"type":"number","description":"2 (default, faster) or 4 (slower, larger output)."}},"required":["image_url"]}},{"name":"image.inpaint","description":"[paid: $0.10] Run FLUX Fill on a masked region. With no prompt, removes the masked area and fills with surroundings. With a prompt, replaces the masked area with the prompt content.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"mask_url":{"type":"string","description":"Mask image URL or data-URL: white where to inpaint, black to keep."},"prompt":{"type":"string","description":"Optional prompt for generative fill. Omit for pure removal."}},"required":["image_url","mask_url"]}},{"name":"image.replace_sky","description":"[paid: $0.10] Replace the sky in a landscape or cityscape photo. Server builds a feathered top-45% mask and runs FLUX Fill with the supplied sky prompt.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"prompt":{"type":"string","description":"Description of the new sky (e.g. \"stormy sky with lightning\", \"pink sunset over the ocean\")."}},"required":["image_url"]}},{"name":"image.replace_background","description":"[paid: $0.10] Replace the background while preserving the centre subject. Server masks everything outside the centre subject ellipse and runs FLUX Fill.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"prompt":{"type":"string","description":"Description of the new background."}},"required":["image_url"]}},{"name":"image.harmonize","description":"[paid: $0.12] Relight a composite (subject pasted on background) so the subject matches the scene lighting. Pass either a composite_url with the subject ALREADY layered on the background, or pass image_url + subject_mask_url separately. Equivalent to Photoshop 2026 Harmonize.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string","description":"Composite image (subject already on background)."},"subject_mask_url":{"type":"string","description":"White-on-black mask of the subject region."}},"required":["image_url","subject_mask_url"]}},{"name":"image.style_transfer","description":"[paid: $0.05] Apply a style to an image while preserving the content. Useful prompts: \"watercolor painting\", \"cyberpunk neon, rain\", \"renaissance oil\". Uses FLUX img2img at strength 0.55.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"prompt":{"type":"string","description":"Style descriptor — describe the *look*, not the *content*."}},"required":["image_url","prompt"]}},{"name":"image.segment_at","description":"[paid: $0.02] Run SAM 2 to segment the object at the given (x, y) point. Returns a B&W mask URL. Use as the input to image.inpaint or to extract a subject layer.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"x":{"type":"number","description":"X coordinate in source-image pixels."},"y":{"type":"number","description":"Y coordinate in source-image pixels."}},"required":["image_url","x","y"]}},{"name":"get_news","description":"GET /api/news List news. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_news_slug","description":"GET /api/news/:slug Get one new by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: slug (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: slug."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_fx_rates","description":"GET /api/fx/rates Read rates for fx. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_voice_onboarding_assistant","description":"POST /api/voice/onboarding-assistant Create a onboarding-assistant within voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voice_preview","description":"POST /api/voice/preview Create a preview within voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voice_setup_payment","description":"POST /api/voice/setup-payment Create a setup-payment within voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_assignments_mine","description":"GET /api/assignments/mine Read mine for assignments. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_assignments_created","description":"GET /api/assignments/created Read created for assignments. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_assignments_stats","description":"GET /api/assignments/stats Read stats for assignments. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_assignments_id","description":"GET /api/assignments/:id Get one assignment by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_assignments","description":"POST /api/assignments Create a new assignment. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_assignments_id_status","description":"PATCH /api/assignments/:id/status Performs 'status' on a specific assignment (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_assignments_id_reassign","description":"POST /api/assignments/:id/reassign Performs 'reassign' on a specific assignment (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_assignments_id_undo","description":"POST /api/assignments/:id/undo Performs 'undo' on a specific assignment (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_assignments_id","description":"DELETE /api/assignments/:id Delete a assignment by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voice_transcribe","description":"POST /api/voice/transcribe Create a transcribe within voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voice_speak","description":"POST /api/voice/speak Create a speak within voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voice_converse","description":"POST /api/voice/converse Create a converse within voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_voice_voices","description":"GET /api/voice/voices Read voices for voice. Cost: paid (STT $0.01/min, TTS varies). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_sbin_consent","description":"GET /api/sbin/consent Read consent for sbin. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_sbin_consent","description":"POST /api/sbin/consent Create a consent within sbin. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_sbin_consent","description":"DELETE /api/sbin/consent Delete a consent within sbin. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_kyb_status","description":"GET /api/kyb/status Read status for kyb. Cost: free (admin review pipeline). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_kyb_submit","description":"POST /api/kyb/submit Create a submit within kyb. Cost: free (admin review pipeline). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_network_state","description":"GET /api/network/state Read state for network. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_network_matches","description":"GET /api/network/matches Read matches for network. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_network_threads_matchId","description":"GET /api/network/threads/:matchId Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_network_threads_matchId_messages","description":"GET /api/network/threads/:matchId/messages Read 'messages' of a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_network_threads_matchId_messages","description":"POST /api/network/threads/:matchId/messages Performs 'messages' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_network_threads_matchId_status","description":"POST /api/network/threads/:matchId/status Performs 'status' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_network_threads_matchId_mark_read","description":"POST /api/network/threads/:matchId/mark-read Performs 'mark-read' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_network_threads_matchId_archive","description":"POST /api/network/threads/:matchId/archive Performs 'archive' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_network_threads_matchId_unarchive","description":"POST /api/network/threads/:matchId/unarchive Performs 'unarchive' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_network_threads_matchId_upload","description":"POST /api/network/threads/:matchId/upload Performs 'upload' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_network_threads_matchId_presence_ws","description":"GET /api/network/threads/:matchId/presence-ws Read 'presence-ws' of a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_network_threads_matchId_attachment_key","description":"GET /api/network/threads/:matchId/attachment/:key{.+} Read 'attachment' of a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: matchId, key (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: matchId, key."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_network_signals","description":"GET /api/network/signals Read signals for network. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_network_signals","description":"POST /api/network/signals Create a signal within network. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_network_signals_id","description":"PATCH /api/network/signals/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_network_signals_id","description":"DELETE /api/network/signals/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_network_signals_id_respond","description":"POST /api/network/signals/:id/respond Performs 'respond' on a specific network (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_dashboard_stats","description":"GET /api/dashboard/stats Read stats for dashboard. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_dashboard_recent_executions","description":"GET /api/dashboard/recent-executions Read recent-executions for dashboard. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_billing_state","description":"GET /api/billing/state Read state for billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_billing_balance","description":"GET /api/billing/balance Read balance for billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_billing_reconcile","description":"POST /api/billing/reconcile Create a reconcile within billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_billing_customer","description":"POST /api/billing/customer Create a customer within billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_billing_summary","description":"GET /api/billing/summary Read summary for billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_billing_invoices","description":"GET /api/billing/invoices Read invoices for billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_billing_checkout","description":"POST /api/billing/checkout Create a checkout within billing. Cost: free (credit ledger reads/writes). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_user_context","description":"GET /api/user/context Read context for user. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_user_available_integrations","description":"GET /api/user/available-integrations Read available-integrations for user. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_state","description":"GET /api/analytics/state Read state for analytics. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_wrapped_monthly","description":"GET /api/analytics/wrapped/monthly Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_wrapped_yearly","description":"GET /api/analytics/wrapped/yearly Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_summary","description":"GET /api/analytics/summary Read summary for analytics. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_cash_flow","description":"GET /api/analytics/cash-flow Read cash-flow for analytics. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_receivables","description":"GET /api/analytics/receivables Read receivables for analytics. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_revenue_velocity","description":"GET /api/analytics/revenue-velocity Read revenue-velocity for analytics. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_analytics_financial_summary","description":"GET /api/analytics/financial-summary Read financial-summary for analytics. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_crm_contacts","description":"POST /api/crm/contacts Create a contact within crm. Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_crm_contacts","description":"GET /api/crm/contacts Read contacts for crm. Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_contacts_duplicates","description":"GET /api/crm/contacts/duplicates Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_contacts_export","description":"GET /api/crm/contacts/export Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_crm_contacts_import","description":"POST /api/crm/contacts/import Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_crm_contacts_bulk_update","description":"POST /api/crm/contacts/bulk-update Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_crm_contacts_id","description":"GET /api/crm/contacts/:id Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_contacts_id_timeline","description":"GET /api/crm/contacts/:id/timeline Read 'timeline' of a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"patch_crm_contacts_id","description":"PATCH /api/crm/contacts/:id Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_crm_contacts_id_notes","description":"POST /api/crm/contacts/:id/notes Performs 'notes' on a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_crm_contacts_id_notes","description":"GET /api/crm/contacts/:id/notes Read 'notes' of a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_state","description":"GET /api/crm/state Read state for crm. Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_stats","description":"GET /api/crm/stats Read stats for crm. Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_ai_priorities","description":"GET /api/crm/ai/priorities Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_crm_ai_analyze","description":"POST /api/crm/ai/analyze Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_crm_ai_insights","description":"GET /api/crm/ai/insights Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"delete_crm_contacts_id","description":"DELETE /api/crm/contacts/:id Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_crm_contacts_id_notes_noteId","description":"DELETE /api/crm/contacts/:id/notes/:noteId Performs 'notes' on a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, noteId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, noteId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_crm_tags","description":"GET /api/crm/tags Read tags for crm. Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_crm_tags","description":"POST /api/crm/tags Create a tag within crm. Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_crm_tags_id","description":"DELETE /api/crm/tags/:id Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_crm_contacts_id_tags_tagId","description":"POST /api/crm/contacts/:id/tags/:tagId Performs 'tags' on a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, tagId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, tagId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_crm_contacts_id_tags_tagId","description":"DELETE /api/crm/contacts/:id/tags/:tagId Performs 'tags' on a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, tagId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, tagId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_crm_contacts_id_activity","description":"POST /api/crm/contacts/:id/activity Performs 'activity' on a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_crm_contacts_id_activities","description":"GET /api/crm/contacts/:id/activities Read 'activities' of a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_crm_contacts_id_financial","description":"GET /api/crm/contacts/:id/financial Read 'financial' of a specific crm (looked up by id). Cost: free (data CRUD). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_notifications_admin","description":"GET /api/notifications/admin Read admin for notifications. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_notifications_admin_unread","description":"GET /api/notifications/admin/unread Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_notifications_admin_poll","description":"GET /api/notifications/admin/poll Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_notifications_admin_send","description":"POST /api/notifications/admin/send Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_notifications_admin_id_read","description":"POST /api/notifications/admin/:id/read Performs 'read' on a specific notification (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_notifications_admin_read_all","description":"POST /api/notifications/admin/read-all Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_notifications_user","description":"GET /api/notifications/user Read user for notifications. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_notifications_user_unread","description":"GET /api/notifications/user/unread Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_notifications_user_poll","description":"GET /api/notifications/user/poll Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_notifications_user_id_read","description":"POST /api/notifications/user/:id/read Performs 'read' on a specific notification (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_notifications_user_read_all","description":"POST /api/notifications/user/read-all Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_team_state","description":"GET /api/team/state Read state for team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_team_members","description":"GET /api/team/members Read members for team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_team_invite","description":"POST /api/team/invite Create a invite within team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_team_invitations","description":"GET /api/team/invitations Read invitations for team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_team_accept_invitation","description":"POST /api/team/accept-invitation Create a accept-invitation within team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_team_change_role","description":"POST /api/team/change-role Create a change-role within team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_team_member_userId","description":"DELETE /api/team/member/:userId Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: userId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: userId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_team_invitation_invitationId_resend","description":"POST /api/team/invitation/:invitationId/resend Performs 'resend' on a specific team (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: invitationId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: invitationId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_team_invitation_invitationId","description":"DELETE /api/team/invitation/:invitationId Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: invitationId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: invitationId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_team_audit_log","description":"GET /api/team/audit-log Read audit-log for team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_team_activity","description":"GET /api/team/activity Read activity for team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_team_workload","description":"GET /api/team/workload Read workload for team. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_settings_state","description":"GET /api/settings/state Read state for settings. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_settings_profile","description":"GET /api/settings/profile Read profile for settings. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"patch_settings_profile","description":"PATCH /api/settings/profile Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_settings_business","description":"PATCH /api/settings/business Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_settings_preferences","description":"PATCH /api/settings/preferences Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_settings_integrations","description":"GET /api/settings/integrations Read integrations for settings. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_settings_integrations_service","description":"PUT /api/settings/integrations/:service Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: service (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: service."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_settings_integrations_service_test","description":"POST /api/settings/integrations/:service/test Performs 'test' on a specific setting (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: service (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: service."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_settings_security","description":"GET /api/settings/security Read security for settings. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_support_tickets","description":"POST /api/support/tickets Create a ticket within support. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_support_tickets","description":"GET /api/support/tickets Read tickets for support. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_support_tickets_id","description":"GET /api/support/tickets/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"patch_support_tickets_id","description":"PATCH /api/support/tickets/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_support_tickets_id_responses","description":"POST /api/support/tickets/:id/responses Performs 'responses' on a specific support (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_support_stats","description":"GET /api/support/stats Read stats for support. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_edit_projects_asset_key","description":"GET /api/edit-projects/asset/:key{.+} Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: key (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: key."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_edit_projects","description":"GET /api/edit-projects List edit-projects. Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_edit_projects_recent","description":"GET /api/edit-projects/recent Read recent for edit-projects. Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_edit_projects_id","description":"GET /api/edit-projects/:id Get one edit-project by id. Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_edit_projects","description":"POST /api/edit-projects Create a new edit-project. Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_edit_projects_id_save","description":"POST /api/edit-projects/:id/save Performs 'save' on a specific edit-project (looked up by id). Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_edit_projects_id","description":"PATCH /api/edit-projects/:id Update a edit-project by id. Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_edit_projects_id","description":"DELETE /api/edit-projects/:id Delete a edit-project by id. Cost: free (project metadata only). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_typography_suggest","description":"POST /api/typography/suggest Create a suggest within typography. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_state","description":"GET /api/video/state Read state for video. Cost: paid (video generation; metadata CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_generate","description":"POST /api/video/generate Create a generate within video. Cost: paid (video generation; metadata CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_usage","description":"GET /api/video/usage Read usage for video. Cost: paid (video generation; metadata CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_video_history","description":"GET /api/video/history Read history for video. Cost: paid (video generation; metadata CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"delete_video_history_videoId","description":"DELETE /api/video/history/:videoId Cost: paid (video generation; metadata CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: videoId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: videoId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects","description":"GET /api/video-studio/projects Read projects for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects","description":"POST /api/video-studio/projects Create a project within video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_full","description":"POST /api/video-studio/projects/full Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects_id","description":"GET /api/video-studio/projects/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"patch_video_studio_projects_id","description":"PATCH /api/video-studio/projects/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_project_duplicate","description":"POST /api/video-studio/project/duplicate Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"put_video_studio_projects_id_sync","description":"PUT /api/video-studio/projects/:id/sync Performs 'sync' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects_id_history","description":"GET /api/video-studio/projects/:id/history Read 'history' of a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_id_change_aspect_ratio","description":"POST /api/video-studio/projects/:id/change-aspect-ratio Performs 'change-aspect-ratio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_projects_id","description":"DELETE /api/video-studio/projects/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects_id_scenes","description":"GET /api/video-studio/projects/:id/scenes Read 'scenes' of a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_id_scenes","description":"POST /api/video-studio/projects/:id/scenes Performs 'scenes' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_video_studio_projects_id_scenes_sceneId","description":"PATCH /api/video-studio/projects/:id/scenes/:sceneId Performs 'scenes' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, sceneId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, sceneId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_projects_id_scenes_sceneId","description":"DELETE /api/video-studio/projects/:id/scenes/:sceneId Performs 'scenes' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, sceneId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, sceneId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_scenes_upload","description":"POST /api/video-studio/projects/:id/scenes/upload Performs 'scenes' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_scenes_reorder","description":"POST /api/video-studio/projects/:id/scenes/reorder Performs 'scenes' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_scenes_sceneId_generate","description":"POST /api/video-studio/projects/:id/scenes/:sceneId/generate Performs 'scenes' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, sceneId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, sceneId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_create","description":"POST /api/video-studio/ai/create Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_continue","description":"POST /api/video-studio/ai/continue Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_editor","description":"POST /api/video-studio/ai/editor Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_orchestrate","description":"POST /api/video-studio/ai/orchestrate Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_scene","description":"POST /api/video-studio/generate/scene Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_image","description":"POST /api/video-studio/generate/image Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_validate","description":"POST /api/video-studio/generate/validate Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_music","description":"POST /api/video-studio/generate/music Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_regenerate_scene","description":"POST /api/video-studio/generate/regenerate-scene Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_broll_suggestions","description":"POST /api/video-studio/generate/broll-suggestions Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_generate_expand","description":"POST /api/video-studio/generate/expand Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_enhance_remove_background","description":"POST /api/video-studio/enhance/remove-background Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_enhance_color_grade","description":"POST /api/video-studio/enhance/color-grade Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_enhance_stabilize","description":"POST /api/video-studio/enhance/stabilize Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_enhance_speed","description":"POST /api/video-studio/enhance/speed Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_enhance_animate_camera","description":"POST /api/video-studio/enhance/animate-camera Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_vision_analyze","description":"POST /api/video-studio/vision/analyze Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_vision_find_moment","description":"POST /api/video-studio/vision/find-moment Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_vision_keyframes","description":"POST /api/video-studio/vision/keyframes Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects_id_audio","description":"GET /api/video-studio/projects/:id/audio Read 'audio' of a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_id_audio","description":"POST /api/video-studio/projects/:id/audio Performs 'audio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_audio_upload","description":"POST /api/video-studio/projects/:id/audio/upload Performs 'audio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_video_studio_projects_id_audio_clipId","description":"PATCH /api/video-studio/projects/:id/audio/:clipId Performs 'audio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, clipId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, clipId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_projects_id_audio_clipId","description":"DELETE /api/video-studio/projects/:id/audio/:clipId Performs 'audio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, clipId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, clipId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_audio_cleanup","description":"POST /api/video-studio/audio/cleanup Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_audio_ducking","description":"POST /api/video-studio/projects/:id/audio/ducking Performs 'audio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_audio_remove_silence","description":"POST /api/video-studio/projects/:id/audio/remove-silence Performs 'audio' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects_id_captions","description":"GET /api/video-studio/projects/:id/captions Read 'captions' of a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_id_captions","description":"POST /api/video-studio/projects/:id/captions Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_video_studio_projects_id_captions_captionId","description":"PATCH /api/video-studio/projects/:id/captions/:captionId Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, captionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, captionId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_projects_id_captions_captionId","description":"DELETE /api/video-studio/projects/:id/captions/:captionId Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, captionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, captionId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_captions_transcribe","description":"POST /api/video-studio/projects/:id/captions/transcribe Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_captions_remove_fillers","description":"POST /api/video-studio/projects/:id/captions/remove-fillers Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_captions_remove_silence","description":"POST /api/video-studio/projects/:id/captions/remove-silence Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_video_studio_projects_id_captions_style","description":"PATCH /api/video-studio/projects/:id/captions/style Performs 'captions' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_voiceover","description":"POST /api/video-studio/projects/:id/voiceover Performs 'voiceover' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_audio_enhance","description":"POST /api/video-studio/audio/enhance Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_audio_enhance_clipId_toggle","description":"POST /api/video-studio/audio/enhance/:clipId/toggle Performs 'toggle' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: clipId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: clipId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_music_library","description":"GET /api/video-studio/music-library Read music-library for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_video_studio_characters","description":"GET /api/video-studio/characters Read characters for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_characters","description":"POST /api/video-studio/characters Create a character within video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_video_studio_characters_id","description":"PATCH /api/video-studio/characters/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_characters_id","description":"DELETE /api/video-studio/characters/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_environments","description":"GET /api/video-studio/environments Read environments for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_environments","description":"POST /api/video-studio/environments Create a environment within video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_environments_id","description":"DELETE /api/video-studio/environments/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_projects_id_text_overlays","description":"GET /api/video-studio/projects/:id/text-overlays Read 'text-overlays' of a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_id_text_overlays","description":"POST /api/video-studio/projects/:id/text-overlays Performs 'text-overlays' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_video_studio_projects_id_text_overlays_overlayId","description":"PATCH /api/video-studio/projects/:id/text-overlays/:overlayId Performs 'text-overlays' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, overlayId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, overlayId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_video_studio_projects_id_text_overlays_overlayId","description":"DELETE /api/video-studio/projects/:id/text-overlays/:overlayId Performs 'text-overlays' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id, overlayId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id, overlayId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_stickers","description":"GET /api/video-studio/stickers Read stickers for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_video_studio_stickers_stickerId","description":"GET /api/video-studio/stickers/:stickerId Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: stickerId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: stickerId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_id_export","description":"POST /api/video-studio/projects/:id/export Performs 'export' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_exports_jobId","description":"GET /api/video-studio/exports/:jobId Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: jobId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: jobId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_video_studio_exports","description":"GET /api/video-studio/exports Read exports for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_export_callback","description":"POST /api/video-studio/export-callback Create a export-callback within video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_projects_id_export_estimate","description":"POST /api/video-studio/projects/:id/export/estimate Performs 'export' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_export_thumbnail","description":"POST /api/video-studio/export/thumbnail Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_templates","description":"GET /api/video-studio/templates Read templates for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_video_studio_templates_id","description":"GET /api/video-studio/templates/:id Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_projects_from_template_templateId","description":"POST /api/video-studio/projects/from-template/:templateId Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: templateId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: templateId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_estimate_cost","description":"POST /api/video-studio/estimate-cost Create a estimate-cost within video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_billing_balance","description":"GET /api/video-studio/billing/balance Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_billing_reserve","description":"POST /api/video-studio/billing/reserve Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_billing_capture","description":"POST /api/video-studio/billing/capture Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_billing_release","description":"POST /api/video-studio/billing/release Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_billing_estimate","description":"GET /api/video-studio/billing/estimate Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_video_studio_assets_upload","description":"POST /api/video-studio/assets/upload Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_assets_id_generate_proxy","description":"POST /api/video-studio/assets/:id/generate-proxy Performs 'generate-proxy' on a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_video_studio_assets_id_proxy_status","description":"GET /api/video-studio/assets/:id/proxy-status Read 'proxy-status' of a specific video-studio (looked up by id). Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_video_studio_assets","description":"GET /api/video-studio/assets Read assets for video-studio. Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"delete_video_studio_assets_assetId","description":"DELETE /api/video-studio/assets/:assetId Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: assetId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: assetId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_scene_detect","description":"POST /api/video-studio/ai/scene-detect Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_social_clips","description":"POST /api/video-studio/ai/social-clips Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_frame_interpolate","description":"POST /api/video-studio/ai/frame-interpolate Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_beat_sync","description":"POST /api/video-studio/ai/beat-sync Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_style_transfer","description":"POST /api/video-studio/ai/style-transfer Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_inpaint","description":"POST /api/video-studio/ai/inpaint Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_video_studio_ai_lip_sync","description":"POST /api/video-studio/ai/lip-sync Cost: paid (video generation $0.15-0.22/sec; project CRUD free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_brand_extract","description":"POST /api/brand/extract Create a extract within brand. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_brand_quick","description":"POST /api/brand/quick Create a quick within brand. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_brand_palette","description":"POST /api/brand/palette Create a palette within brand. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_brand_assets","description":"GET /api/brand/assets Read assets for brand. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_brand_assets","description":"PUT /api/brand/assets Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_brand_upload_logo","description":"POST /api/brand/upload-logo Create a upload-logo within brand. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_signature","description":"GET /api/signature List signature. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_signature","description":"POST /api/signature Create a new signature. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_signature","description":"DELETE /api/signature Delete a signature. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_signature_draw","description":"POST /api/signature/draw Create a draw within signature. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_upload","description":"POST /api/upload Create a new upload. Cost: free (storage write; size-capped). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_upload_key","description":"GET /api/upload/:key{.+} Get one upload by id. Cost: free (storage write; size-capped). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: key (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: key."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_state","description":"GET /api/documents/state Read state for documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_documents_documents_page","description":"POST /api/documents/documents/page Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_documents_translate_page","description":"POST /api/documents/translate-page Create a translate-page within documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_documents_documents_batch","description":"POST /api/documents/documents/batch Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_documents_translate_batch","description":"POST /api/documents/translate-batch Create a translate-batch within documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_documents_documents_pdf","description":"POST /api/documents/documents/pdf Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_documents_translate_pdf","description":"POST /api/documents/translate-pdf Create a translate-pdf within documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_documents_documents_status","description":"GET /api/documents/documents/status Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_translate_status","description":"GET /api/documents/translate-status Read translate-status for documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_status","description":"GET /api/documents/status Read status for documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_documents_service_status","description":"GET /api/documents/documents/service-status Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_translate_pdf_status","description":"GET /api/documents/translate-pdf-status Read translate-pdf-status for documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_documents_documents_process","description":"POST /api/documents/documents/process Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_documents_v2_process","description":"POST /api/documents/v2/process Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_documents_documents_download_excel_resultId","description":"GET /api/documents/documents/download/excel/:resultId Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: resultId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: resultId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_v2_download_excel_resultId","description":"GET /api/documents/v2/download/excel/:resultId Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: resultId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: resultId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_documents_recent","description":"GET /api/documents/recent Read recent for documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_documents_enrich","description":"POST /api/documents/enrich Create a enrich within documents. Cost: paid ($0.10/page for intelligence ops; metadata CRUD is free). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_spreadsheet_state","description":"GET /api/spreadsheet/state Read state for spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_spreadsheet_analyze","description":"POST /api/spreadsheet/analyze Create a analyze within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_chat","description":"POST /api/spreadsheet/chat Create a chat within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_extract_widget","description":"POST /api/spreadsheet/extract-widget Create a extract-widget within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_extract_green","description":"POST /api/spreadsheet/extract-green Create a extract-green within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_spreadsheet_status","description":"GET /api/spreadsheet/status Read status for spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_spreadsheet_files","description":"POST /api/spreadsheet/files Create a file within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_spreadsheet_files","description":"GET /api/spreadsheet/files Read files for spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_spreadsheet_files_id","description":"GET /api/spreadsheet/files/:id Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_spreadsheet_files_id_download","description":"GET /api/spreadsheet/files/:id/download Read 'download' of a specific spreadsheet (looked up by id). Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"patch_spreadsheet_files_id","description":"PATCH /api/spreadsheet/files/:id Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_spreadsheet_files_id","description":"DELETE /api/spreadsheet/files/:id Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_files_id_save","description":"POST /api/spreadsheet/files/:id/save Performs 'save' on a specific spreadsheet (looked up by id). Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_files_bulk","description":"POST /api/spreadsheet/files/bulk Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_files_id_analysis","description":"POST /api/spreadsheet/files/:id/analysis Performs 'analysis' on a specific spreadsheet (looked up by id). Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_spreadsheet_folders","description":"GET /api/spreadsheet/folders Read folders for spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_spreadsheet_folders","description":"POST /api/spreadsheet/folders Create a folder within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_spreadsheet_folders_id","description":"PATCH /api/spreadsheet/folders/:id Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_spreadsheet_folders_id","description":"DELETE /api/spreadsheet/folders/:id Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_spreadsheet_generate","description":"POST /api/spreadsheet/generate Create a generate within spreadsheet. Cost: mixed (CRUD free; AI analyze/chat/generate is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_interests","description":"GET /api/interests List interests. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_interests","description":"POST /api/interests Create a new interest. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_interests_id","description":"DELETE /api/interests/:id Delete a interest by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_interests_news","description":"GET /api/interests/news Read news for interests. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_interests_recap","description":"POST /api/interests/recap Create a recap within interests. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_sticky_notes","description":"GET /api/sticky-notes List sticky-notes. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_sticky_notes","description":"POST /api/sticky-notes Create a new sticky-note. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_sticky_notes_id","description":"PATCH /api/sticky-notes/:id Update a sticky-note by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_sticky_notes_id","description":"DELETE /api/sticky-notes/:id Delete a sticky-note by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_sticky_notes_id_bring_to_front","description":"POST /api/sticky-notes/:id/bring-to-front Performs 'bring-to-front' on a specific sticky-note (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_sticky_notes_due","description":"GET /api/sticky-notes/due Read due for sticky-notes. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_sticky_notes_id_dismiss","description":"POST /api/sticky-notes/:id/dismiss Performs 'dismiss' on a specific sticky-note (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_expenses","description":"GET /api/expenses List expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_expenses_snap","description":"POST /api/expenses/snap Create a snap within expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"image":{"type":"string","minLength":1},"category":{"type":"string","minLength":1,"maxLength":50},"notes":{"type":"string","maxLength":2000}},"required":["image"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_expenses_state","description":"GET /api/expenses/state Read state for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_expenses_dashboard_summary","description":"GET /api/expenses/dashboard-summary Read dashboard-summary for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_expenses_summary","description":"GET /api/expenses/summary Read summary for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_expenses_claims_pending","description":"GET /api/expenses/claims/pending Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_expenses_team","description":"GET /api/expenses/team Read team for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_expenses","description":"POST /api/expenses Create a new expense. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"vendor":{"type":"string","minLength":1,"maxLength":500},"category":{"type":"string","minLength":1,"maxLength":50,"default":"other"},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"tax_amount":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100},"tax_type":{"type":"string","enum":["GST","SST","VAT","PPN","none"]},"subtotal":{"type":"number","minimum":0},"notes":{"type":"string","maxLength":2000},"receipt_url":{"type":"string","maxLength":2000},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64},"maxItems":20},"force":{"type":"boolean"}},"required":["date","vendor","amount"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"post_expenses_id_submit","description":"POST /api/expenses/:id/submit Performs 'submit' on a specific expense (looked up by id). Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_expenses_id_approve","description":"POST /api/expenses/:id/approve Performs 'approve' on a specific expense (looked up by id). Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_expenses_id_reject","description":"POST /api/expenses/:id/reject Performs 'reject' on a specific expense (looked up by id). Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"reason":{"type":"string","maxLength":1000}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"post_expenses_id_reimburse","description":"POST /api/expenses/:id/reimburse Performs 'reimburse' on a specific expense (looked up by id). Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_expenses_recurring","description":"GET /api/expenses/recurring Read recurring for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_expenses_recurring","description":"POST /api/expenses/recurring Create a recurring within expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"vendor":{"type":"string","minLength":1,"maxLength":500},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"category":{"type":"string","minLength":1,"maxLength":50,"default":"other"},"notes":{"type":"string","maxLength":2000},"frequency":{"type":"string","enum":["daily","weekly","monthly","yearly"]},"day_of_month":{"type":"number","minimum":1,"maximum":31},"day_of_week":{"type":"number","minimum":0,"maximum":6}},"required":["vendor","amount","frequency"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_expenses_recurring_id","description":"DELETE /api/expenses/recurring/:id Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_expenses_categories","description":"GET /api/expenses/categories Read categories for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_expenses_categories","description":"POST /api/expenses/categories Create a categorie within expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9_-]+$"},"icon":{"type":"string","maxLength":10},"color":{"type":"string","maxLength":10}},"required":["name","slug"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_expenses_categories_id","description":"DELETE /api/expenses/categories/:id Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_expenses_bulk_approve","description":"POST /api/expenses/bulk-approve Create a bulk-approve within expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50},"reason":{"type":"string","maxLength":1000}},"required":["ids"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"post_expenses_bulk_reject","description":"POST /api/expenses/bulk-reject Create a bulk-reject within expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50},"reason":{"type":"string","maxLength":1000}},"required":["ids"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_expenses_insights","description":"GET /api/expenses/insights Read insights for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_expenses_budgets","description":"GET /api/expenses/budgets Read budgets for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_expenses_budgets","description":"POST /api/expenses/budgets Create a budget within expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"monthly_limit":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"alert_at_pct":{"type":"number","minimum":1,"maximum":100,"default":80}},"required":["monthly_limit"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_expenses_budgets_id","description":"DELETE /api/expenses/budgets/:id Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_expenses_report","description":"GET /api/expenses/report Read report for expenses. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_expenses_id","description":"GET /api/expenses/:id Get one expense by id. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"delete_expenses_id","description":"DELETE /api/expenses/:id Delete a expense by id. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_expenses_id","description":"PATCH /api/expenses/:id Update a expense by id. Cost: free (data CRUD; receipt OCR is $0.05/scan when used). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"vendor":{"type":"string","maxLength":500},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"category":{"type":"string","minLength":1,"maxLength":50},"expense_date":{"type":"string"},"notes":{"type":"string","maxLength":2000},"tax_amount":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100},"tax_type":{"type":"string","enum":["GST","SST","VAT","PPN","none"]},"subtotal":{"type":"number","minimum":0},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64},"maxItems":20}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_voting_state","description":"GET /api/voting/state Read state for voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_voting_request","description":"POST /api/voting/request Create a request within voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_voting_requests","description":"GET /api/voting/requests Read requests for voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_voting_cycle_active","description":"GET /api/voting/cycle/active Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_voting_proposals","description":"GET /api/voting/proposals Read proposals for voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_voting_vote","description":"POST /api/voting/vote Create a vote within voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_voting_vote_proposalId","description":"DELETE /api/voting/vote/:proposalId Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: proposalId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: proposalId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_voting_results","description":"GET /api/voting/results Read results for voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_voting_my_votes","description":"GET /api/voting/my-votes Read my-votes for voting. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_voting_admin_cycle","description":"POST /api/voting/admin/cycle Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_voting_admin_cycle_id_phase","description":"PATCH /api/voting/admin/cycle/:id/phase Performs 'phase' on a specific voting (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voting_admin_proposals","description":"POST /api/voting/admin/proposals Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_voting_admin_proposals_id","description":"PATCH /api/voting/admin/proposals/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voting_admin_snapshot","description":"POST /api/voting/admin/snapshot Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_voting_admin_results_publish","description":"POST /api/voting/admin/results/publish Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_voting_admin_requests","description":"GET /api/voting/admin/requests Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_invoice_settings","description":"GET /api/invoice/settings Read settings for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_invoice_settings","description":"PUT /api/invoice/settings Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"business_name":{"type":"string","maxLength":255,"pattern":"^[^\\r\\n\\t<>]*$"},"business_address":{"type":"string","maxLength":1000},"tax_id":{"type":"string","maxLength":100,"pattern":"^[^\\r\\n\\t<>]*$"},"logo_url":{"anyOf":[{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","const":""}]},{"type":"null"}]},"company_name":{"type":"string","maxLength":255,"pattern":"^[^\\r\\n\\t<>]*$"},"companyName":{"type":"string","maxLength":255,"pattern":"^[^\\r\\n\\t<>]*$"},"company_address":{"type":"string","maxLength":1000},"companyAddress":{"type":"string","maxLength":1000},"company_email":{"anyOf":[{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"string","const":""}]},{"type":"null"}]},"companyEmail":{"anyOf":[{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"string","const":""}]},{"type":"null"}]},"company_phone":{"type":"string","maxLength":50,"pattern":"^[^\\r\\n\\t<>]*$"},"companyPhone":{"type":"string","maxLength":50,"pattern":"^[^\\r\\n\\t<>]*$"},"company_logo_url":{"anyOf":[{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","const":""}]},{"type":"null"}]},"companyLogoUrl":{"anyOf":[{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","const":""}]},{"type":"null"}]},"bank_name":{"type":"string","maxLength":255},"bankName":{"type":"string","maxLength":255},"bank_account":{"type":"string","maxLength":100},"bankAccount":{"type":"string","maxLength":100},"bank_routing":{"type":"string","maxLength":100},"bankRouting":{"type":"string","maxLength":100},"payment_terms_days":{"type":"integer","minimum":0,"maximum":365},"paymentTermsDays":{"type":"integer","minimum":0,"maximum":365},"payment_instructions":{"type":"string","maxLength":2000},"default_payment_terms":{"type":"string","maxLength":255},"default_currency":{"type":"string","minLength":1,"maxLength":10},"invoice_prefix":{"type":"string","maxLength":20},"invoicePrefix":{"type":"string","maxLength":20},"invoice_notes":{"type":"string","maxLength":2000},"invoiceNotes":{"type":"string","maxLength":2000},"currency":{"type":"string","minLength":1,"maxLength":10},"tax_rate":{"type":"number","minimum":0,"maximum":100},"taxRate":{"type":"number","minimum":0,"maximum":100},"brand_colors":{"type":"string","maxLength":500},"brand_fonts":{"type":"string","maxLength":500},"template_config":{"type":"string","maxLength":2000}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"post_invoice_analyze_template","description":"POST /api/invoice/analyze-template Create a analyze-template within invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"image":{"type":"string","minLength":1}},"required":["image"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_invoice_clients","description":"GET /api/invoice/clients Read clients for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_invoice_clients","description":"POST /api/invoice/clients Create a client within invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"email":{"type":"string","format":"email","maxLength":254},"company":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":255}]},{"type":"null"}]},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":1000}]},{"type":"null"}]},"phone":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":50}]},{"type":"null"}]},"tax_id":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":100}]},{"type":"null"}]},"notes":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":5000}]},{"type":"null"}]}},"required":["name","email"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_invoice_clients_id","description":"GET /api/invoice/clients/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_invoice_clients_id","description":"PUT /api/invoice/clients/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"email":{"type":"string","format":"email","maxLength":254},"company":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":255}]},{"type":"null"}]},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":1000}]},{"type":"null"}]},"phone":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":50}]},{"type":"null"}]},"tax_id":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":100}]},{"type":"null"}]},"notes":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":5000}]},{"type":"null"}]}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_invoice_clients_id","description":"DELETE /api/invoice/clients/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_invoice","description":"GET /api/invoice List invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_invoice","description":"POST /api/invoice Create a new invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"client_id":{"type":"string","minLength":1},"issue_date":{"type":"string","maxLength":20},"due_date":{"type":"string","maxLength":20},"notes":{"type":"string","maxLength":5000},"payment_terms":{"type":"string","maxLength":2000},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":255},"description":{"type":"string","minLength":1,"maxLength":1000},"quantity":{"type":"number","exclusiveMinimum":0},"unit_price":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unit_price"],"additionalProperties":false},"minItems":1,"maxItems":100},"currency":{"type":"string","minLength":3,"maxLength":3,"pattern":"^[A-Z]{3}$"}},"required":["client_id","items"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_invoice_recurring","description":"GET /api/invoice/recurring Read recurring for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_invoice_recurring","description":"POST /api/invoice/recurring Create a recurring within invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"client_id":{"type":"string","minLength":1},"frequency":{"type":"string","enum":["weekly","monthly","yearly"]},"day_of_month":{"type":"integer","minimum":1,"maximum":28},"day_of_week":{"type":"integer","minimum":0,"maximum":6},"notes":{"type":"string","maxLength":5000},"payment_terms":{"type":"string","maxLength":2000},"currency":{"type":"string","maxLength":10},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":255},"description":{"type":"string","minLength":1,"maxLength":1000},"quantity":{"type":"number","exclusiveMinimum":0},"unit_price":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unit_price"],"additionalProperties":false},"minItems":1,"maxItems":100}},"required":["client_id","frequency","items"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"put_invoice_recurring_id","description":"PUT /api/invoice/recurring/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"client_id":{"type":"string","minLength":1},"frequency":{"type":"string","enum":["weekly","monthly","yearly"]},"day_of_month":{"anyOf":[{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":28}]},{"type":"null"}]},"day_of_week":{"anyOf":[{"anyOf":[{"not":{}},{"type":"integer","minimum":0,"maximum":6}]},{"type":"null"}]},"notes":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":5000}]},{"type":"null"}]},"payment_terms":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","maxLength":2000}]},{"type":"null"}]},"currency":{"type":"string","maxLength":10},"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":1000},"quantity":{"type":"number","exclusiveMinimum":0},"unit_price":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unit_price"],"additionalProperties":false},"minItems":1,"maxItems":100}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_invoice_recurring_id","description":"DELETE /api/invoice/recurring/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_invoice_quotes","description":"GET /api/invoice/quotes Read quotes for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_invoice_quotes","description":"POST /api/invoice/quotes Create a quote within invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","properties":{"client_id":{"type":"string","minLength":1},"issue_date":{"type":"string","maxLength":20},"valid_until":{"type":"string","maxLength":20},"notes":{"type":"string","maxLength":5000},"payment_terms":{"type":"string","maxLength":2000},"currency":{"type":"string","maxLength":10},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":255},"description":{"type":"string","minLength":1,"maxLength":1000},"quantity":{"type":"number","exclusiveMinimum":0},"unit_price":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unit_price"],"additionalProperties":false},"minItems":1,"maxItems":100}},"required":["client_id","items"],"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_invoice_quotes_id","description":"GET /api/invoice/quotes/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_invoice_quotes_id","description":"PUT /api/invoice/quotes/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"client_id":{"type":"string","minLength":1},"issue_date":{"type":"string","maxLength":20},"valid_until":{"type":"string","maxLength":20},"notes":{"type":"string","maxLength":5000},"payment_terms":{"type":"string","maxLength":2000},"status":{"type":"string","enum":["draft","sent","accepted","declined"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":255},"description":{"type":"string","minLength":1,"maxLength":1000},"quantity":{"type":"number","exclusiveMinimum":0},"unit_price":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unit_price"],"additionalProperties":false},"minItems":1,"maxItems":100}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_invoice_quotes_id","description":"DELETE /api/invoice/quotes/:id Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_invoice_quotes_id_pdf","description":"GET /api/invoice/quotes/:id/pdf Read 'pdf' of a specific invoice (looked up by id). Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_invoice_quotes_id_convert","description":"POST /api/invoice/quotes/:id/convert Performs 'convert' on a specific invoice (looked up by id). Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_invoice_pipeline","description":"GET /api/invoice/pipeline Read pipeline for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_invoice_stats","description":"GET /api/invoice/stats Read stats for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_invoice_state","description":"GET /api/invoice/state Read state for invoice. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_invoice_id","description":"GET /api/invoice/:id Get one invoice by id. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_invoice_id","description":"PUT /api/invoice/:id Update a invoice by id. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"client_id":{"type":"string","minLength":1},"issue_date":{"type":"string","maxLength":20},"due_date":{"type":"string","maxLength":20},"notes":{"type":"string","maxLength":5000},"payment_terms":{"type":"string","maxLength":2000},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":255},"description":{"type":"string","minLength":1,"maxLength":1000},"quantity":{"type":"number","exclusiveMinimum":0},"unit_price":{"type":"number","minimum":0},"tax_rate":{"type":"number","minimum":0,"maximum":100}},"required":["description","quantity","unit_price"],"additionalProperties":false},"minItems":1,"maxItems":100},"currency":{"type":"string","minLength":3,"maxLength":3,"pattern":"^[A-Z]{3}$"}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"delete_invoice_id","description":"DELETE /api/invoice/:id Delete a invoice by id. Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_invoice_id_send","description":"POST /api/invoice/:id/send Performs 'send' on a specific invoice (looked up by id). Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_invoice_id_remind","description":"POST /api/invoice/:id/remind Performs 'remind' on a specific invoice (looked up by id). Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_invoice_id_mark_paid","description":"POST /api/invoice/:id/mark-paid Performs 'mark-paid' on a specific invoice (looked up by id). Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","properties":{"paid_at":{"type":"string","maxLength":50},"payment_method":{"type":"string","maxLength":100},"payment_reference":{"type":"string","maxLength":255}},"additionalProperties":false,"description":"Request body. Schema extracted from Zod definition in the route module. Required fields strictly enforced server-side."}}}},{"name":"get_invoice_id_pdf","description":"GET /api/invoice/:id/pdf Read 'pdf' of a specific invoice (looked up by id). Cost: free (data CRUD; AI template analysis is paid per call). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_stock_state","description":"GET /api/stock/state Read state for stock. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_stock_items","description":"GET /api/stock/items Read items for stock. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_stock_items_id","description":"GET /api/stock/items/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_stock_items","description":"POST /api/stock/items Create a item within stock. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"patch_stock_items_id","description":"PATCH /api/stock/items/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_stock_items_id_adjust","description":"POST /api/stock/items/:id/adjust Performs 'adjust' on a specific stock (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_stock_items_id","description":"DELETE /api/stock/items/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_stock_categories","description":"GET /api/stock/categories Read categories for stock. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_intelligence_status","description":"GET /api/intelligence/status Read status for intelligence. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_intelligence_books","description":"GET /api/intelligence/books Read books for intelligence. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_intelligence_books_bookName","description":"GET /api/intelligence/books/:bookName Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: bookName (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: bookName."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_intelligence_query","description":"POST /api/intelligence/query Create a query within intelligence. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_intelligence_framework_name","description":"GET /api/intelligence/framework/:name Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: name (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: name."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_intelligence_templates","description":"GET /api/intelligence/templates Read templates for intelligence. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_myinvois_settings","description":"GET /api/myinvois/settings Read settings for myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_myinvois_settings","description":"PUT /api/myinvois/settings Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_myinvois_customers","description":"GET /api/myinvois/customers Read customers for myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_myinvois_customers","description":"POST /api/myinvois/customers Create a customer within myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_myinvois_customers_id","description":"GET /api/myinvois/customers/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_myinvois_customers_id","description":"PUT /api/myinvois/customers/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_myinvois_customers_id","description":"DELETE /api/myinvois/customers/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_myinvois_templates","description":"GET /api/myinvois/templates Read templates for myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_myinvois_templates","description":"POST /api/myinvois/templates Create a template within myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_myinvois_templates_id","description":"GET /api/myinvois/templates/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"put_myinvois_templates_id","description":"PUT /api/myinvois/templates/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_myinvois_templates_id","description":"DELETE /api/myinvois/templates/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_myinvois_generate","description":"POST /api/myinvois/generate Create a generate within myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_myinvois_invoices","description":"GET /api/myinvois/invoices Read invoices for myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_myinvois_invoices_id","description":"GET /api/myinvois/invoices/:id Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_myinvois_invoices_id_export_xml","description":"GET /api/myinvois/invoices/:id/export/xml Read 'export' of a specific myinvoi (looked up by id). Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_myinvois_invoices_id_lhdn_uuid","description":"POST /api/myinvois/invoices/:id/lhdn-uuid Performs 'lhdn-uuid' on a specific myinvoi (looked up by id). Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_myinvois_msic_codes","description":"GET /api/myinvois/msic-codes Read msic-codes for myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_myinvois_classification_codes","description":"GET /api/myinvois/classification-codes Read classification-codes for myinvois. Cost: free (data CRUD; LHDN submission is manual download). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_calendar_widget_events","description":"GET /api/calendar-widget/events Read events for calendar-widget. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_calendar_widget_day_date","description":"GET /api/calendar-widget/day/:date Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: date (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: date."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_checkpoints","description":"GET /api/checkpoints List checkpoints. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_checkpoints","description":"POST /api/checkpoints Create a new checkpoint. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_checkpoints_id","description":"GET /api/checkpoints/:id Get one checkpoint by id. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_checkpoints_id_restore","description":"POST /api/checkpoints/:id/restore Performs 'restore' on a specific checkpoint (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_workflows_import","description":"POST /api/workflows/import Create a import within workflows. Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_workflows_validate","description":"POST /api/workflows/validate Create a validate within workflows. Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_workflows_health","description":"GET /api/workflows/health Read health for workflows. Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_workflows_generate","description":"POST /api/workflows/generate Create a generate within workflows. Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_workflows_formats","description":"GET /api/workflows/formats Read formats for workflows. Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_workflows_execute_id","description":"POST /api/workflows/execute/:id Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_workflows_executions_executionId_status","description":"GET /api/workflows/executions/:executionId/status Read 'status' of a specific workflow (looked up by id). Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_workflows_executions_executionId_pause","description":"POST /api/workflows/executions/:executionId/pause Performs 'pause' on a specific workflow (looked up by id). Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_workflows_executions_executionId_resume","description":"POST /api/workflows/executions/:executionId/resume Performs 'resume' on a specific workflow (looked up by id). Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_workflows_executions_executionId_terminate","description":"POST /api/workflows/executions/:executionId/terminate Performs 'terminate' on a specific workflow (looked up by id). Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_workflows_executions_executionId_event","description":"POST /api/workflows/executions/:executionId/event Performs 'event' on a specific workflow (looked up by id). Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_workflows_analyze_video","description":"POST /api/workflows/analyze-video Create a analyze-video within workflows. Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_workflows_analyze_video_health","description":"GET /api/workflows/analyze-video/health Cost: mixed (workflow CRUD free; executions can cascade to paid services). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_workflow_runs_state","description":"GET /api/workflow-runs/state Read state for workflow-runs. Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_workflow_runs","description":"GET /api/workflow-runs List workflow-runs. Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_workflow_runs_inbox","description":"GET /api/workflow-runs/inbox Read inbox for workflow-runs. Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_workflow_runs_approve","description":"POST /api/workflow-runs/approve Create a approve within workflow-runs. Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_workflow_runs_executionId","description":"GET /api/workflow-runs/:executionId Get one workflow-run by id. Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_workflow_runs_executionId_stream","description":"GET /api/workflow-runs/:executionId/stream Read 'stream' of a specific workflow-run (looked up by id). Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_workflow_runs_executionId_events","description":"GET /api/workflow-runs/:executionId/events Read 'events' of a specific workflow-run (looked up by id). Cost: mixed (same as workflows). Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: executionId (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: executionId."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_features","description":"GET /api/features List features. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_features_health","description":"GET /api/features/health Read health for features. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_features_prelaunch","description":"GET /api/features/prelaunch Read prelaunch for features. Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_news_admin_posts","description":"GET /api/news/admin/posts Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_news_admin_posts_id","description":"GET /api/news/admin/posts/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_news_admin_posts","description":"POST /api/news/admin/posts Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"put_news_admin_posts_id","description":"PUT /api/news/admin/posts/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"delete_news_admin_posts_id","description":"DELETE /api/news/admin/posts/:id Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"post_news_admin_posts_id_translate","description":"POST /api/news/admin/posts/:id/translate Performs 'translate' on a specific new (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_news_admin_posts_id_translations","description":"GET /api/news/admin/posts/:id/translations Read 'translations' of a specific new (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"post_news_admin_posts_id_duplicate","description":"POST /api/news/admin/posts/:id/duplicate Performs 'duplicate' on a specific new (looked up by id). Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: id (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: id."},"body":{"type":"object","description":"Request body — forwarded as JSON. Shape matches the underlying REST endpoint; call empty first to discover via 400 if unknown."}}}},{"name":"get_news_admin_preview_slug","description":"GET /api/news/admin/preview/:slug Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. Path params required: slug (pass via path_params). When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (replaces :name segments). Required: slug."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}},{"name":"get_news_admin_authors","description":"GET /api/news/admin/authors Cost: free. Auto-generated MCP wrapper around a REST route. Args forward as JSON request body for POST/PUT/PATCH, query_params for GET/DELETE. Auth (your bearer token) propagates. When in doubt about the body shape: call with empty body once, read the 400 response for field names. The route is human-authored REST so the field list is whatever the UI form would send.","inputSchema":{"type":"object","properties":{"path_params":{"type":"object","description":"Path parameters (none required for this route)."},"query_params":{"type":"object","description":"Query string parameters as key-value pairs (e.g. {limit: 10, status: \"active\"}). Forwarded as URL search string."}}}}]}