Supero

Build multi-tenant apps over MCP. Schemas, CRUD, deploys — access control enforced server-side.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
90%
Naming quality
90%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded stringin build_list_data_sources
  • LOWTool 'project_link_schemas' description lacks action verbin project_link_schemas
  • LOWTool 'connector_discover' description lacks action verbin connector_discover

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~13,028Tokens (tool definitions)
~1.2 KBTypical response size
Significant attention impact (10.18% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "supero": {
      "url": "https://api.supero.dev/mcp/v1/messages"
    }
  }
}

Remote endpoints

https://api.supero.dev/mcp/v1/messagesstreamable-http

What it can do

Tool inventory

Tools (65)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢build_get_skills(doc, offset, max_bytes)

Fetch a Supero build reference. doc='skills' (default, the spec you MUST follow) | 'components' (the real pre-built SDK component/global catalog — read so you don't reinvent UI) | 'rubric' (the rich-app quality checklist — what 'stunning' means) | 'landing' (compact landing-page derivation + quality bar — MANDATORY read for public-facing apps) | 'integrations' (the EXACT services.* wrapper→service_id→args map for email/sms/stripe/ai/etc.) | 'web' / 'transactional' / 'workflows' / 'mobile' / 'services' (deep companion docs) | 'e2e_testing'. Returns the doc + a content version + the SDK floor to pin. Read 'skills' FIRST, then 'components' + a matching build_get_examples before you author UI. Docs are PAGED (~32KB/section): when the header says more:true, fetch the next section with offset=<next_offset> — never re-fetch from 0.

Input Schema

{
  "type": "object",
  "properties": {
    "doc": {
      "type": "string",
      "enum": [
        "skills",
        "components",
        "rubric",
        "landing",
        "integrations",
        "web",
        "transactional",
        "workflows",
        "mobile",
        "services",
        "e2e_testing",
        "connectors"
      ],
      "description": "Which doc (default 'skills')."
    },
    "offset": {
      "type": "integer",
      "description": "Byte offset to start from (for paging large docs; default 0)."
    },
    "max_bytes": {
      "type": "integer",
      "description": "Max bytes to return per section (default ~32000)."
    }
  }
}
🟢build_get_examples(archetype, file, offset, max_bytes)

Fetch a COMPLETE, production-quality reference app (schemas.py + config.py + setup.py + ui/app.js) to copy patterns from — the single biggest lever for app quality. archetype='index' (default) lists the available archetypes with per-file byte sizes; pick the one closest to your app ('commerce-marketplace' | 'service-booking' | 'ops-dashboard' | 'multitenant-portal' | 'saas-billing') and fetch it BEFORE authoring your UI. These are real 'stunning' apps; mirror how they compose the SDK components, art-direct the landing page, and structure schemas. Optional file= to fetch just one file ('schemas.py' | 'config.py' | 'setup.py' | 'ui/app.js'). Responses are PAGED (~32KB/section): when the header says more:true, fetch the next section with offset=<next_offset> — never re-fetch from 0.

Input Schema

{
  "type": "object",
  "properties": {
    "archetype": {
      "type": "string",
      "enum": [
        "index",
        "commerce-marketplace",
        "service-booking",
        "ops-dashboard",
        "multitenant-portal",
        "saas-billing"
      ],
      "description": "Which reference app (default 'index' to list them)."
    },
    "file": {
      "type": "string",
      "enum": [
        "schemas.py",
        "config.py",
        "setup.py",
        "ui/app.js"
      ],
      "description": "Optional: return only this one file instead of the whole bundle."
    },
    "offset": {
      "type": "integer",
      "description": "Byte offset to start from (for paging; default 0)."
    },
    "max_bytes": {
      "type": "integer",
      "description": "Max bytes to return per section (default ~32000)."
    }
  }
}
🟢build_plan(description, entities, is_multi_tenant, public_facing)

PLAN FIRST — turn a one-line app idea into an explicit BUILD CHECKLIST before you author anything, so a thin prompt doesn't silently skip what expert builders add (this is exactly why first-draft apps miss detail pages, tenant pickers, seed data). Deterministic, no LLM: it detects the app's VERTICAL and returns the authentic page structure + terminology for that domain, which entities need a full DETAIL PAGE, the multi-tenant login pattern (picker + tenant=''), seed guidance, and which build_get_examples to copy. Call it right after build_get_skills and BEFORE authoring.

Input Schema

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "description": "The app idea in a sentence or two (e.g. 'portal for Karnataka polytechnic colleges with admin + student portals')."
    },
    "entities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: the main entity/noun names (e.g. ['college','course','student']). Sharpens the per-entity detail-page + seed guidance."
    },
    "is_multi_tenant": {
      "type": "boolean",
      "description": "Optional: true if each customer/org (college/clinic/branch) is a separate tenant. Inferred from the description if omitted."
    },
    "public_facing": {
      "type": "boolean",
      "description": "Optional: true if end-users/the public browse it (vs an internal-only tool). Inferred if omitted."
    }
  },
  "required": [
    "description"
  ]
}
🟢build_get_service_contract(service_id, parts)

Fetch the AUTHORITATIVE contract for a transactional/stateful platform service (cart, order, payment, booking, appointment, membership, approval, document_signature, recurring_plan, inventory, task, ticket, loyalty_points, rental, comment, attachment, feedback, notification, product, service, customer, workflows). Returns the service's state machine (initial_state + transitions), its operations (op ids + input fields + resulting state), the base schemas + mandatory fields you must supply, AND the platform's DEFAULT UI SCHEMAS for that service — the bulletproof reference for building a correct, sophisticated transactional UI. ALWAYS call this for any service your app `extends` BEFORE authoring its UI — do not guess op names, states, or mandatory fields from prose. service_id='index' (default) lists all services.

Input Schema

{
  "type": "object",
  "properties": {
    "service_id": {
      "type": "string",
      "description": "The service id (e.g. 'cart', 'booking', 'payment'); 'index' (default) lists all."
    },
    "parts": {
      "type": "string",
      "enum": [
        "both",
        "contract",
        "ui_schemas"
      ],
      "description": "What to return (default 'both'): 'contract' = state machine/ops/schemas; 'ui_schemas' = default UI only."
    }
  }
}
🟢build_whoami

Resolve your API key's scope: role (domain_admin/project_admin), domain, whether you can create projects, and your plan. Call this to decide the flow.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢build_list_projects(limit)

List projects you can build into (uuid, name, schema_namespace, live_url).

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Max results (default 50)."
    }
  }
}
🟢build_get_project(project_uuid)

Get one project's details: schema_namespace (use this EXACT value as the `namespace` literal on every schema dict), last published version, AND the captured `project_intent` — the brief (project_description/summary), the discovered data model (entities/central_entity/relationships/status_workflows), and the landing intent (public_landing_view). BUILD TO THIS — it's the authoritative app spec the user already gave; don't re-ask or ignore it.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟡build_create_project(name, display_name, schema_namespace, description, requirements)

Create a NEW project (domain-admin keys only; plan-gated). Mints the project's schema_namespace + an API key (returned ONCE). Use for a fresh app.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Project name/slug."
    },
    "display_name": {
      "type": "string",
      "description": "Optional human-readable name shown in the dashboard."
    },
    "schema_namespace": {
      "type": "string",
      "description": "Optional; server normalizes/derives if omitted."
    },
    "description": {
      "type": "string",
      "description": "Optional: what the app is for — persisted on the project so future sessions build to it."
    },
    "requirements": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: the confirmed requirements/plan bullets — persisted on the project record (future sessions read them via build_get_project)."
    }
  },
  "required": [
    "name"
  ]
}
🔴build_update_project(project_uuid, patch)

Update a project's metadata (display_name, description, show_public, live_url).

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "patch": {
      "type": "object",
      "description": "Fields to update."
    }
  },
  "required": [
    "project_uuid",
    "patch"
  ]
}
🔴build_set_project_mode(project_uuid, mode)

Set a project's build mode. 'dev' (default) allows COMPLETE REPLACE (wipe data, keep credentials); 'live' protects it. Switch to dev before replacing, to live when it's in production.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "dev",
        "live"
      ],
      "description": "'dev' permits build_replace_project (which still needs a domain-admin key and confirm_project_name); 'live' makes it refuse, protecting production data."
    }
  },
  "required": [
    "project_uuid",
    "mode"
  ]
}
🔴build_replace_project(project_uuid, confirm_project_name, files, files_b64gz, files_ref, ...)

DESTRUCTIVE (DOMAIN-admin keys only): completely replace a DEV-mode project's app — wipes its data (retains credentials, API keys, namespace, tenant). Refused if mode='live'. Requires confirm_project_name to match. If you pass files, they are VALIDATED before any wipe (a bad bundle is a no-op) and published after; otherwise wipe-only, then call build_publish.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "confirm_project_name": {
      "type": "string",
      "description": "Must equal the project's name — a safety confirmation."
    },
    "files": {
      "type": "object",
      "description": "Optional new bundle {path: content} to publish after the wipe."
    },
    "files_b64gz": {
      "type": "string",
      "description": "Alt to files: base64(gzip(JSON {path:content})). Use if a CDN/WAF blocks raw code in the body."
    },
    "files_ref": {
      "type": "string",
      "description": "For a LARGE bundle that exceeds the model output-token cap: a file_id from build_stage_bundle (upload the gzip(json {path:content}) blob out-of-band, then pass its file_id here). Preferred over files/files_b64gz when the bundle will not fit inline."
    },
    "app_type": {
      "type": "string",
      "enum": [
        "web",
        "all"
      ],
      "description": "Default 'web'."
    },
    "force": {
      "type": "boolean",
      "description": "Wipe and publish despite SOFT validation errors (default false). Never overrides a wrong/absent schema namespace, a JavaScript syntax error or schemas the platform refuses: those are refused before anything is wiped."
    }
  },
  "required": [
    "project_uuid",
    "confirm_project_name"
  ]
}
🟢build_validate(project_uuid, files, files_b64gz, files_ref)

Validate a locally-authored bundle against the live platform BEFORE publishing. AST-only (your code is never executed). Checks manifest, syntax, import-safety, config exports, schema validity, and namespace==project schema_namespace.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Target project (for namespace/schema checks)."
    },
    "files": {
      "type": "object",
      "description": "Map of {relative_path: file_content} for the bundle."
    },
    "files_b64gz": {
      "type": "string",
      "description": "Alt to files: base64(gzip(JSON {path:content})). Use if a CDN/WAF blocks raw code in the body."
    },
    "files_ref": {
      "type": "string",
      "description": "For a LARGE bundle that exceeds the model output-token cap: a file_id from build_stage_bundle (upload the gzip(json {path:content}) blob out-of-band, then pass its file_id here). Preferred over files/files_b64gz when the bundle will not fit inline."
    }
  },
  "required": []
}
🟡build_publish(project_uuid, files, files_b64gz, files_ref, app_type, ...)

Package + upload your authored bundle and record a version under the project. Returns version_uuid + file_id + download_url. Runs build_validate first; force=true overrides soft errors only. Provide files as {relative_path: content}.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "files": {
      "type": "object",
      "description": "Map of {relative_path: file_content}."
    },
    "files_b64gz": {
      "type": "string",
      "description": "Alt to files: base64(gzip(JSON {path:content})). Use if a CDN/WAF blocks raw code in the body."
    },
    "files_ref": {
      "type": "string",
      "description": "For a LARGE bundle that exceeds the model output-token cap: a file_id from build_stage_bundle (upload the gzip(json {path:content}) blob out-of-band, then pass its file_id here). Preferred over files/files_b64gz when the bundle will not fit inline."
    },
    "app_type": {
      "type": "string",
      "enum": [
        "web",
        "all"
      ],
      "description": "Default 'web'."
    },
    "validate": {
      "type": "boolean",
      "description": "Validate before publish (default true)."
    },
    "force": {
      "type": "boolean",
      "description": "Publish despite SOFT validation errors (default false). Validation still runs; a wrong/absent schema namespace, a JavaScript syntax error or schemas the platform refuses always block."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟢build_stage_bundle

PUB-1a: get the out-of-band UPLOAD endpoint for a LARGE app bundle that won't fit inline (the model's max OUTPUT tokens cap `files`/`files_b64gz`, so big apps otherwise have to be truncated/minified). Upload a gzip(json {path:content}) blob to the returned URL with your OWN key, then pass the returned file_id as `files_ref` to build_validate / build_publish / build_doctor. Bundle size then no longer depends on any token cap.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢build_get_bundle(project_uuid, version_uuid, file)

Fetch the CURRENT (or a given) PUBLISHED bundle: the file list + a signed download_url, or ONE file's content inline via file=. For ANY change request on an existing app, START from this bundle and modify it — re-authoring from scratch silently drops the hand-authored ui/app.js and every prior fix.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "version_uuid": {
      "type": "string",
      "description": "Default: latest published version."
    },
    "file": {
      "type": "string",
      "description": "Optional app-root-relative path (e.g. 'ui/app.js') to return that single file's content inline (~120KB cap, truncated with a note)."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🔴build_deploy(project_uuid, version_uuid, target, app_type)

Deploy a published version. target='cloud_ephemeral' (managed Cloud Run, ~30m throwaway preview; requires platform enablement; the default when cloud deploy is enabled) or 'local' (hand the user the bundle to run with the project's own key). For a PERMANENT public URL, use build_go_live instead.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "version_uuid": {
      "type": "string",
      "description": "Default: latest published version."
    },
    "target": {
      "type": "string",
      "enum": [
        "local",
        "cloud_ephemeral"
      ],
      "description": "Default 'cloud_ephemeral' when cloud deploy is enabled (else 'local')."
    },
    "app_type": {
      "type": "string",
      "enum": [
        "web",
        "all"
      ],
      "description": "Default 'web'."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟢build_deploy_status(poll_url, permanent)

Poll a cloud deploy started by build_deploy or build_go_live. Pass the poll_url it returned. Reports elapsed_s since launch. 'launching' for 5-6.5 minutes is normal (Cloud Run IAM propagation): keep polling every ~30s and probe the url once it appears. Only a persistent unreachable past ~10 minutes is a real failure (see the anti-loop rules).

Input Schema

{
  "type": "object",
  "properties": {
    "poll_url": {
      "type": "string",
      "description": "The poll_url returned by build_deploy or build_go_live."
    },
    "permanent": {
      "type": "boolean",
      "description": "Set true when polling a build_go_live (permanent) deploy so the expiry guidance is correct. Default: auto-detected."
    }
  },
  "required": [
    "poll_url"
  ]
}
🟢build_logs(project_uuid, lines, since)

Fetch recent Cloud Run logs for a project's deployed app — THE tool for diagnosing a failed/stalled cloud deploy or a crashing app (startup-probe timeouts, tracebacks, 'container failed to start on PORT'). Read-only; rate-limited per domain.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "lines": {
      "type": "integer",
      "description": "Max log lines to return (default 200)."
    },
    "since": {
      "type": "integer",
      "description": "How many minutes back to fetch (default 60)."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🔴build_go_live(project_uuid, version_uuid, file_id, acknowledge_findings)

PERMANENT deploy: promote a published version to a PERMANENT public URL at <service>.supero.live (managed Cloud Run) — unlike build_deploy(target='cloud_ephemeral'), which is a ~30-min throwaway. If version_uuid/file_id are omitted, the latest published version for the project is used. Returns public_url + poll_url; poll with build_deploy_status until live, then build_smoke_test the public_url. build_teardown removes it. Requires a domain- or project-admin API key + platform cloud-deploy enablement.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "version_uuid": {
      "type": "string",
      "description": "Default: latest published version."
    },
    "file_id": {
      "type": "string",
      "description": "Default: the resolved version's web artifact file_id."
    },
    "acknowledge_findings": {
      "type": "array",
      "description": "Explicitly accept outstanding build_audit CRITICAL findings so go-live may proceed when the audit gate is enforced: [{fingerprint, reason}] (reason >= 15 characters; recorded with the version in the response). BLOCKER findings cannot be acknowledged — fix them. Fix findings instead whenever possible.",
      "items": {
        "type": "object",
        "properties": {
          "fingerprint": {
            "type": "string",
            "description": "The finding's fingerprint from build_audit."
          },
          "reason": {
            "type": "string",
            "description": "Why it is acceptable to go live with it."
          }
        },
        "required": [
          "fingerprint",
          "reason"
        ]
      }
    }
  },
  "required": [
    "project_uuid"
  ]
}
🔴build_teardown(project_uuid)

Tear down a project's live deployment — BOTH the permanent (build_go_live) app and the ephemeral preview — DELETEing the managed Cloud Run services and freeing their URLs. Idempotent: a project with nothing deployed returns stopped=true. ONLY manages Supero-hosted apps — a project deployed to your own AWS/GCP is refused, not silently reported stopped. Check `stopped`: false means the teardown was INCOMPLETE and the app may still be serving (and billing) — re-run it, do not report success. Requires a domain- or project-admin API key.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟢build_list_capabilities(service_id, category)

List the platform's available services/integrations from the LIVE catalog (email, sms, slack, ai, stripe_checkout, google_oauth, push_notification, …) — so the intake's 'which connections/integrations?' question is accurate and you never guess a service id. Returns each service's exact catalog `service_id` (use it verbatim in config.py `services` — e.g. 'stripe_checkout', NOT 'stripe'), category, whether it needs a key, and YOUR connection's service permissions (can_import / can_configure). Descriptive — what EXISTS, never what to use. Pass service_id for one service's config fields.

Input Schema

{
  "type": "object",
  "properties": {
    "service_id": {
      "type": "string",
      "description": "Optional: one service's detail incl. config fields."
    },
    "category": {
      "type": "string",
      "description": "Optional filter ('integration' or 'service')."
    }
  }
}
🟢build_recommend_integrations(description, service_ids, region, project_uuid)

RECOMMEND which concrete provider integrations this app needs, and WHY — the deterministic Step-2 intelligence the web wizard uses, now over MCP. Pass the app `description` + the platform `service_ids` it will use (e.g. ['cart','order']); returns GROUPED, TIERED suggestions (required/recommended/optional) with the default option flagged — e.g. cart/checkout → a payment gateway (REQUIRED; stripe_checkout default, paypal/razorpay offered), customer-facing apps → transactional email, appointments+reminders → sms. Options are drawn ONLY from the LIVE installed manifests, so it can't suggest a provider you don't have. PRESCRIPTIVE complement to build_list_capabilities (which is descriptive): call this so you don't OMIT a needed integration; use build_list_capabilities for a service's exact id + config fields.

Input Schema

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "description": "The app description / intent (drives email/sms/oauth/ai/payment triggers)."
    },
    "service_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Platform service ids the app will use (e.g. ['cart','order','appointment']). Drives most recommendations."
    },
    "region": {
      "type": "string",
      "description": "Optional project region (ISO alpha-2, e.g. 'IN'). Decides the default payment gateway."
    },
    "project_uuid": {
      "type": "string",
      "description": "Optional project UUID; its region is used when `region` is not given."
    }
  }
}
🔴build_configure_services(project_uuid, service_id, config)

Configure a service's keys for the project so an integration works at deploy (e.g. wire SendGrid for email, a Stripe TEST key for checkout). TEST/SANDBOX keys ONLY. Keys with a clear live marker (Stripe sk_live_… / Razorpay rzp_live_…) are auto-refused, but most providers give NO test-vs-live signal — so for EVERY provider send test/sandbox keys only and use the admin panel for production secrets (a deep link is returned). Never put a real secret through this tool/chat. Reacts to the live permission result; secret values are never echoed.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "service_id": {
      "type": "string",
      "description": "Catalog id (e.g. 'stripe_checkout', 'email')."
    },
    "config": {
      "type": "object",
      "description": "Test/sandbox config key→value (e.g. {\"sendgrid_api_key\":\"SG.test…\"}). Live-marked keys refused; send test keys only."
    }
  },
  "required": [
    "project_uuid",
    "service_id",
    "config"
  ]
}
🔴build_import_services(project_uuid, service_ids)

IMPORT platform services into a project (e.g. 'workflows', 'email', 'stripe_checkout', 'cart', 'order', 'payment') so the app can call them and its event-bound workflows can run. Uses the platform's service import with YOUR connection's credential. Reports each service's exact outcome: imported, already imported, or FAILED with the platform's reason (schema_drift, schemas_failed, error_code, HTTP status) — a failed import is never reported as success, and you must not ship an app whose required service failed to import. After importing, set keys with build_configure_services. MCP-IMPORT-SERVICES-V1.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects or build_create_project)."
    },
    "service_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Catalog service ids to import, e.g. ['workflows','email','stripe_checkout'] (exact ids from build_list_capabilities)."
    }
  },
  "required": [
    "project_uuid",
    "service_ids"
  ]
}
🟢build_doctor(project_uuid, files, files_b64gz, files_ref)

PREFLIGHT a bundle BEFORE publish/deploy — catches the silent deploy-killers build_validate does NOT: missing #supero-preloader removal (app stuck on a spinner forever), heavy startup seed (Cloud Run port-bind timeout → 'container failed to start'), reserved field names like status/state (silently dropped), namespace collisions (ambiguous reads), and services needing elevated import permission. Run it after build_validate and before build_publish.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Target project (enables namespace + collision checks)."
    },
    "files": {
      "type": "object",
      "description": "Map of {relative_path: file_content}."
    },
    "files_b64gz": {
      "type": "string",
      "description": "Alt to files: base64(gzip(JSON {path:content}))."
    },
    "files_ref": {
      "type": "string",
      "description": "For a LARGE bundle that exceeds the model output-token cap: a file_id from build_stage_bundle (upload the gzip(json {path:content}) blob out-of-band, then pass its file_id here). Preferred over files/files_b64gz when the bundle will not fit inline."
    }
  },
  "required": []
}
🟢build_audit(project_uuid, version_uuid, files, files_b64gz, files_ref, ...)

SECURITY + CORRECTNESS AUDIT of a bundle BEFORE go-live (static; your code is never executed). Finds what build_validate/build_doctor do not: MONEY-01 client-chosen checkout amounts, AUTHZ-01 end-users able to write server-owned fields (paid/issued/status/amount/payment refs) or create tickets/payments, FLOW-01 fulfilment done in the browser or on payment_status alone, INV-01 capacity/stock with no server-side enforcement, PUB-01 draft/hidden rows in PUBLIC_SCHEMAS, LAUNCH-01 terms/privacy/password-reset/meta gaps. Each finding has severity (blocker|critical|high|warning), file:line or policy, evidence, the exact fix pattern and a fingerprint. Fix every blocker and critical, then re-run until clean; build_go_live reports (or, when enforced, refuses on) outstanding blocker/critical findings. Pass files/files_ref, or only project_uuid to audit the latest published version.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project to audit; without files, its latest (or version_uuid) PUBLISHED bundle is audited."
    },
    "version_uuid": {
      "type": "string",
      "description": "Published version to audit (default: latest). Ignored when files are given."
    },
    "files": {
      "type": "object",
      "description": "Map of {relative_path: file_content} to audit before publishing."
    },
    "files_b64gz": {
      "type": "string",
      "description": "Alt to files: base64(gzip(JSON {path:content}))."
    },
    "files_ref": {
      "type": "string",
      "description": "For a LARGE bundle: a file_id from build_stage_bundle (gzip(json {path:content}) uploaded out-of-band)."
    },
    "min_severity": {
      "type": "string",
      "enum": [
        "blocker",
        "critical",
        "high",
        "warning"
      ],
      "description": "Lowest severity to list (default 'warning' = everything)."
    }
  },
  "required": []
}
🔴build_verify(project_uuid, target, dry_run, budget_s)

ACCEPTANCE TEST of your app's running PREVIEW (after build_deploy, before build_go_live). Where build_audit reads the code, build_verify USES the deployed preview like a buyer would, with throwaway test accounts (verify-<rand>@example.com, deleted afterwards): health (serves, app.js = the published version, boots, API reachable); accounts (sign-up, login right after sign-up, login, forgot-password reachable); the role permission matrix (per end-user role x schema: the declared policy holds, server-owned fields such as status/totals/payment state cannot be written by the user, fulfilment records cannot be minted, another user's records cannot be read); commerce (the server prices checkout even when the client price/amount is tampered; a success-URL visit without payment changes nothing; Stripe TEST mode only, otherwise refused); event-bound workflows reach COMPLETED with the verified recipient (no real email is ever sent); capacity is enforced; draft/hidden rows stay out of public reads; launch basics (terms/privacy, meta, viewport, gzip, headers). Returns a score and pass/fail/skip per check with evidence and the exact fix. Only the caller's own project PREVIEW, never the live app or other projects. ~1-3 min, rate-limited; dry_run=true lists the planned checks. Flow: build_audit -> build_publish -> build_deploy -> build_verify -> fix -> build_go_live (which reports the latest build_verify result).

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Your project (its running preview is tested)."
    },
    "target": {
      "type": "string",
      "enum": [
        "preview"
      ],
      "description": "Always 'preview' (default). The live app is never tested."
    },
    "dry_run": {
      "type": "boolean",
      "description": "true: list the planned checks for the published bundle without touching the preview."
    },
    "budget_s": {
      "type": "integer",
      "description": "Total time budget in seconds (30-180, default 180). Partial results are returned when it runs out."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟡build_smoke_test(project_uuid, url, poll_url, email, password, ...)

VERIFY a DEPLOYED app actually works (not just 'running'). HTTP-checks the live URL: root loads with a title, app.js is your bundle (not a stub) and dismisses the boot splash, config.js namespace matches the project; optionally logs in and reads an entity to confirm data + no namespace ambiguity. Pass url= (from build_deploy_status) or poll_url=. THE post-deploy gate — run it after every deploy.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "The deployed project (for namespace + live_url)."
    },
    "url": {
      "type": "string",
      "description": "The deployed app URL (from build_deploy_status)."
    },
    "poll_url": {
      "type": "string",
      "description": "Alt to url: the build_deploy poll_url; the URL is resolved from it."
    },
    "email": {
      "type": "string",
      "description": "Optional — a user to log in and verify data reads."
    },
    "password": {
      "type": "string",
      "description": "Optional — password for that user."
    },
    "tenant": {
      "type": "string",
      "description": "Optional tenant for the login. Default '' so the server resolves the user's OWN tenant (required for a multi-tenant app whose test user lives in a named tenant)."
    },
    "entity": {
      "type": "string",
      "description": "Optional bare schema slug (e.g. 'participant') to read for the authed data check."
    },
    "expected_app_js_sha1": {
      "type": "string",
      "description": "Optional — the first 12 lowercase hex chars of `sha1sum ui/app.js` (sha1 of your local bundle FILE). If given, smoke_test reports whether the DEPLOYED app.js matches, so you can confirm the deploy actually rolled (vs a stuck roll / stale cache serving the old bundle). Case-insensitive; a malformed value is reported as a warning, never a false mismatch."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟢build_list_data_sources

List the external DATA SOURCE types an app can connect to — its own Postgres/MySQL/MSSQL/Oracle/MongoDB, any REST API, or a Snowflake/BigQuery/Redshift/Databricks/ClickHouse/Fabric warehouse — plus the curated public-API catalog. Read this to offer a 'connect your own data' option. Flow: build_connect_data_source → build_discover_source → build_bind_data_source. See build_get_skills(doc='connectors').

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡build_connect_data_source(name, kind, db_type, host, port, ...)

Create a data connector to an EXTERNAL source the app owner controls (their own database, a REST API, or a warehouse). Returns a connector_id. Does NOT bind schemas yet. Flow: build_connect_data_source → build_discover_source (lists the tables/streams; needs this connector_id) → build_bind_data_source (bind streams to app schemas) → build_run_data_source (mode='sync' bindings only; live reads need no run). For a database you do NOT need to know the tables upfront: omit `table_names` and let discovery + bind pick them (the connector is a manual-trigger shell until bound, and a run before a sync bind is refused). Pass `table_names` only when you already know exactly which tables to sync. Credentials are sent to the platform and NEVER echoed back; prefer read-only DB creds / the Key Store for production. Requires a domain- or project-admin API key.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Connector name (unique within the project)."
    },
    "kind": {
      "type": "string",
      "enum": [
        "database",
        "api",
        "warehouse"
      ],
      "description": "Source kind."
    },
    "db_type": {
      "type": "string",
      "description": "database/warehouse: postgresql|mysql|mssql|oracle|mongodb|snowflake|bigquery|redshift|databricks|clickhouse|fabric."
    },
    "host": {
      "type": "string",
      "description": "Server hostname (database kinds, Fabric, ClickHouse, Snowflake, Databricks). BigQuery/Redshift take their connection settings in `config`."
    },
    "port": {
      "type": "integer",
      "description": "Server port; omit for the dialect default (5432 PostgreSQL, 3306 MySQL, 1433 MSSQL/Fabric, 1521 Oracle, 27017 MongoDB)."
    },
    "database": {
      "type": "string",
      "description": "database/warehouse: database name."
    },
    "username": {
      "type": "string",
      "description": "database/warehouse: login user (prefer a read-only one)."
    },
    "password": {
      "type": "string",
      "description": "DB password — sent to the platform, never echoed."
    },
    "ssl_mode": {
      "type": "string",
      "description": "database kind: TLS mode, one of disable|allow|prefer|require|verify-ca|verify-full (or the MySQL spellings disabled|preferred|required|verify_ca|verify_identity); other values are rejected. Default 'require'. Used by PostgreSQL/MySQL/MSSQL/Fabric/MongoDB; Oracle and the HTTP warehouses (Snowflake/Databricks/ClickHouse/BigQuery/Redshift) ignore it."
    },
    "base_url": {
      "type": "string",
      "description": "api kind: API base URL."
    },
    "endpoint": {
      "type": "string",
      "description": "api kind: endpoint path."
    },
    "auth": {
      "type": "object",
      "description": "api kind: {type: none|api_key|bearer|basic|oauth2, ...}."
    },
    "table_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "database/warehouse, OPTIONAL: the source tables to sync, e.g. [\"customers\", \"orders\"]. Omit when you don't know them yet — run build_discover_source next and bind the streams it returns."
    },
    "config": {
      "type": "object",
      "description": "Extra source config (e.g. warehouse account)."
    },
    "schema_namespace": {
      "type": "string",
      "description": "Namespace for schemas from this source."
    },
    "test_first": {
      "type": "boolean",
      "description": "Probe connectivity before creating (default true)."
    },
    "project_uuid": {
      "type": "string",
      "description": "Project the connector belongs to (from build_list_projects); your key must be allowed to build into it. API-key callers pass it to scope the connector to that project."
    }
  },
  "required": [
    "name",
    "kind"
  ]
}
⚪build_discover_source(connector_id, execution_id, timeout)

Discover a connector's schema: trigger discovery, wait, and return the source streams (names, columns, primary keys), AI-inferred Supero schemas, field mappings, and a suggested namespace. Run AFTER build_connect_data_source and BEFORE build_bind_data_source (a live bind's `source` MUST equal a discovered stream name).

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "The connector to discover (from build_connect_data_source)."
    },
    "execution_id": {
      "type": "string",
      "description": "RESUME polling an in-flight discovery (from a previous timeout error) instead of starting a new job."
    },
    "timeout": {
      "type": "integer",
      "description": "Max seconds to wait IN THIS CALL (default 60, cap 90 — an MCP call must finish under the ~100s edge limit). On timeout, resume with the returned execution_id; the job keeps running server-side."
    }
  },
  "required": [
    "connector_id"
  ]
}
🔴build_bind_data_source(connector_id, bindings)

Bind source streams to the app's schemas. mode='live_read' (default: read-only BYODB / warehouse), 'live_readwrite' (BYODB read+write — DOMAIN-ADMIN only), or 'sync' (copy into SuperoDB). For live modes, discovery must have run and each binding's `source` must match a discovered stream; the bind VERIFIES the live mapping materialized. Bound live schemas are read/written via ORDINARY app CRUD — nothing goes in the bundle.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "The connector to bind (from build_connect_data_source)."
    },
    "bindings": {
      "type": "array",
      "description": "One entry per app schema to back with a source stream.",
      "items": {
        "type": "object",
        "properties": {
          "schema": {
            "type": "string",
            "description": "App schema name to back."
          },
          "source": {
            "type": "string",
            "description": "Source stream/table (must match a discovered stream for live modes)."
          },
          "mode": {
            "type": "string",
            "enum": [
              "live_read",
              "live_readwrite",
              "sync"
            ],
            "description": "live_read (default, read-only), live_readwrite (domain-admin key only), or sync (copy into SuperoDB)."
          },
          "stream_class": {
            "type": "string",
            "enum": [
              "entity",
              "event"
            ],
            "description": "'entity' = mutable business records (current-state rows, e.g. customers/products); 'event' = append-only time-series/log rows (e.g. clicks, sensor readings). OMIT it to let the platform classify safely from the stream's shape — only set it to override."
          },
          "tenant_binding": {
            "type": "object",
            "description": "How live rows map to Supero tenants. OMIT for the default {mode:'fixed', tenant:'default-tenant'} (all rows visible to the default tenant/admin — required, else live reads 403 tenant_binding_missing). For per-tenant isolation pass {mode:'column', tenant_field:'<col>', tenant_value_map:{<supero_tenant>:<source_value>}}."
          }
        },
        "required": [
          "schema",
          "source"
        ]
      }
    }
  },
  "required": [
    "connector_id",
    "bindings"
  ]
}
🔴build_run_data_source(connector_id)

Trigger a SYNC RUN on a data connector and return the run id. MCP-created connectors are trigger:manual, so a mode='sync' binding copies NO rows until a run executes — call this after build_bind_data_source (and again whenever the source data changes). Live-read/warehouse bindings don't need runs (they read the source directly).

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "The connector to run (from build_connect_data_source)."
    }
  },
  "required": [
    "connector_id"
  ]
}
🟢build_list_bound_schemas(project_uuid)

Classify this project's schemas: which are connector-backed vs app-authored, and each one's access mode (sync | live-ro | live-rw | warehouse). Use it so you DON'T render create/edit UI for read-only live sources (live-ro/warehouse) or regenerate/overwrite connector-discovered schemas.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Defaults to the key's project."
    }
  }
}
🟢crud_search(object_type, filters, filter, sort, limit, ...)

Search/list objects of any type in the current domain. Use schema_list first to discover available object types. System types: project, tenant, user_account, api_key, connector, audit_log, schema_registry, client_sdk, connector_execution, connector_plugin. Domain types vary per domain (e.g. customer, invoice, appointment, vehicle).

Input Schema

{
  "type": "object",
  "properties": {
    "object_type": {
      "type": "string",
      "description": "The object type to search (e.g. 'customer', 'project', 'tenant', 'connector')"
    },
    "filters": {
      "type": "object",
      "description": "Filter criteria keyed by field. A plain value is equality (e.g. {\"status\": \"active\"}); an object of operators compares (e.g. {\"amount\": {\"gte\": 10, \"lt\": 100}}). Operators: eq, ne, gt, gte, lt, lte, in, not_in, between, contains, starts_with, ends_with, regex, exists."
    },
    "filter": {
      "type": "object",
      "description": "Optional boolean filter tree for and/or/not logic, e.g. {\"op\": \"or\", \"conditions\": [{\"status\": \"open\"}, {\"amount\": {\"gt\": 500}}]}. Use `filters` for simple AND-ed conditions."
    },
    "sort": {
      "description": "Optional sort: a field name ('amount', or '-amount' for descending), {\"field\": \"amount\", \"order\": \"desc\"}, or a list of those.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object"
        },
        {
          "type": "array",
          "items": {
            "type": "object"
          }
        }
      ]
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default: 100, max 1000)"
    },
    "offset": {
      "type": "integer",
      "description": "Skip N results for pagination"
    },
    "tenant": {
      "type": "string",
      "description": "Optional tenant name to scope the search to (multi-tenant apps: verify a specific named tenant's data). Omit for single-tenant apps — the session/API-key tenant is used."
    }
  },
  "required": [
    "object_type"
  ]
}
🟢crud_get(object_type, uuid)

Get a specific object by UUID from the current domain.

Input Schema

{
  "type": "object",
  "properties": {
    "object_type": {
      "type": "string",
      "description": "The object type (e.g. 'customer', 'project', 'tenant')"
    },
    "uuid": {
      "type": "string",
      "description": "Object UUID"
    }
  },
  "required": [
    "object_type",
    "uuid"
  ]
}
🟡crud_create(object_type, name, parent_type, parent_fq_name, data, ...)

Create a new object in the current domain. Use schema_list to see available types and their fields.

Input Schema

{
  "type": "object",
  "properties": {
    "object_type": {
      "type": "string",
      "description": "The object type to create (e.g. 'customer', 'appointment', 'project')"
    },
    "name": {
      "type": "string",
      "description": "Object name (required for most types)"
    },
    "parent_type": {
      "type": "string",
      "description": "Parent type if applicable (e.g. 'project' for tenant, 'domain' for project)"
    },
    "parent_fq_name": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Parent FQ name path (e.g. ['cine-corp', 'car-service'])"
    },
    "data": {
      "type": "object",
      "description": "Object fields as key-value pairs"
    },
    "tenant": {
      "type": "string",
      "description": "Optional tenant name to create the object under (multi-tenant apps: seed a specific named tenant's data). Omit for single-tenant apps — the session/API-key tenant is used."
    }
  },
  "required": [
    "object_type",
    "name"
  ]
}
🔴crud_update(object_type, uuid, data, tenant)

Update an existing object in the current domain.

Input Schema

{
  "type": "object",
  "properties": {
    "object_type": {
      "type": "string",
      "description": "The object type"
    },
    "uuid": {
      "type": "string",
      "description": "Object UUID to update"
    },
    "data": {
      "type": "object",
      "description": "Fields to update"
    },
    "tenant": {
      "type": "string",
      "description": "Optional tenant name context for this update (multi-tenant apps). Omit for single-tenant apps — the session/API-key tenant is used. Updates address the record by UUID."
    }
  },
  "required": [
    "object_type",
    "uuid",
    "data"
  ]
}
🔴crud_delete(object_type, uuid, tenant)

Delete an object from the current domain.

Input Schema

{
  "type": "object",
  "properties": {
    "object_type": {
      "type": "string",
      "description": "The object type"
    },
    "uuid": {
      "type": "string",
      "description": "Object UUID to delete"
    },
    "tenant": {
      "type": "string",
      "description": "Optional tenant name context for this delete (multi-tenant apps). Omit for single-tenant apps — the session/API-key tenant is used. Deletes address the record by UUID."
    }
  },
  "required": [
    "object_type",
    "uuid"
  ]
}
🟢schema_list

List all existing schemas in the current domain.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢schema_get(schema_uuid, include_content)

Get full details of a specific schema by UUID. Returns the complete schema definition including all attributes and metadata.

Input Schema

{
  "type": "object",
  "properties": {
    "schema_uuid": {
      "type": "string",
      "description": "UUID of the schema to retrieve."
    },
    "include_content": {
      "type": "boolean",
      "description": "Include full schema content (default: true)."
    }
  },
  "required": [
    "schema_uuid"
  ]
}
🟢schema_validate(schemas)

Validate schemas before saving. Checks for conflicts with existing schemas, circular dependencies, reserved names, and parent_type correctness. Always validate before saving!

Input Schema

{
  "type": "object",
  "properties": {
    "schemas": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Array of schema definitions to validate."
    }
  },
  "required": [
    "schemas"
  ]
}
🔴schema_save(schemas, skip_existing, project_uuid, force_upload)

Save/upload schemas into a project. Schemas are validated before saving and linked to the project. Returns the saved schemas with their UUIDs; skipped schemas carry the platform's reason. IMPORTANT: Pass FLAT schema objects directly — do NOT wrap in schema_content. The tool handles schema_type detection and wrapping automatically. Required fields: name, namespace, parent_type, attributes. Set namespace to your app's namespace (e.g. 'shop'); the schema is stored as namespace:name. Mark required attributes with "mandatory": true. Supported attribute types: 'string' for text, 'float' for decimal numbers (NOT 'number'), 'integer' for whole numbers, 'boolean' for true/false. project_uuid defaults to your key's project; a project-scoped key can only save into its own project. A schema skipped for compatibility warnings is applied with force_upload=true. Example: { "schemas": [{ "name": "product", "namespace": "shop", "description": "Product catalog entry", "parent_type": "tenant", "attributes": [ {"name": "title", "type": "string", "mandatory": true}, {"name": "price", "type": "float"}, {"name": "stock", "type": "integer"} ] }] }

Input Schema

{
  "type": "object",
  "properties": {
    "schemas": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Array of schema definitions to save."
    },
    "skip_existing": {
      "type": "boolean",
      "description": "Skip schemas that already exist (default: true)."
    },
    "project_uuid": {
      "type": "string",
      "description": "Project to save into (defaults to your key's project; required for a domain-admin key)."
    },
    "force_upload": {
      "type": "boolean",
      "description": "Apply changes that only have compatibility WARNINGS (default: false). Breaking changes are still refused."
    }
  },
  "required": [
    "schemas"
  ]
}
🔴schema_delete(schema_uuid, force_delete)

Delete a schema from the domain. Use with caution.

Input Schema

{
  "type": "object",
  "properties": {
    "schema_uuid": {
      "type": "string",
      "description": "UUID of the schema to delete."
    },
    "force_delete": {
      "type": "boolean",
      "description": "Force delete even with dependencies (default: false)."
    }
  },
  "required": [
    "schema_uuid"
  ]
}
🟢schema_list_project(project_uuid, include_content)

List schemas linked to the current project.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project to list schemas for. Optional; defaults to the key's project when resolvable (pass the project_uuid from build_whoami/build_list_projects under an API key)."
    },
    "include_content": {
      "type": "boolean",
      "description": "Include full schema content (default: true)."
    }
  }
}
🔴schema_update(schema_uuid, schema_content, new_version, check_compatibility)

Update an existing schema definition.

Input Schema

{
  "type": "object",
  "properties": {
    "schema_uuid": {
      "type": "string",
      "description": "UUID of the schema to update."
    },
    "schema_content": {
      "type": "object",
      "description": "New schema content (full schema definition)."
    },
    "new_version": {
      "type": "string",
      "description": "Optional new version string."
    },
    "check_compatibility": {
      "type": "boolean",
      "description": "Check compatibility with existing data (default: true)."
    }
  },
  "required": [
    "schema_uuid",
    "schema_content"
  ]
}
⚪project_link_schemas(project_uuid, schema_uuids, schema_names)

Link schemas to a project. Accepts schema UUIDs or names.

Input Schema

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "UUID of the project to link schemas to."
    },
    "schema_uuids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of schema registry UUIDs to link."
    },
    "schema_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of schema names to link (resolved to UUIDs). Use 'namespace:name' when a name exists in several namespaces."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🔴sdk_generate(languages, force_rebuild, include_docs)

Generate client SDKs for the domain's schemas.

Input Schema

{
  "type": "object",
  "properties": {
    "languages": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "python",
          "javascript",
          "java",
          "go",
          "cpp"
        ]
      },
      "description": "Languages to generate (default: ['python', 'javascript'])."
    },
    "force_rebuild": {
      "type": "boolean",
      "description": "Force rebuild (default: false)."
    },
    "include_docs": {
      "type": "boolean",
      "description": "Include docs (default: true)."
    }
  }
}
🟢sdk_status(request_id)

Check SDK generation request status.

Input Schema

{
  "type": "object",
  "properties": {
    "request_id": {
      "type": "string",
      "description": "Request ID from sdk_generate."
    }
  },
  "required": [
    "request_id"
  ]
}
🟢sdk_list(language, limit)

List available SDKs for the current domain.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "type": "string",
      "description": "Filter by language."
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default: 50)."
    }
  }
}
🟢sdk_download(sdk_uuid, artifact)

Get download URL for an SDK.

Input Schema

{
  "type": "object",
  "properties": {
    "sdk_uuid": {
      "type": "string",
      "description": "UUID of the SDK."
    },
    "artifact": {
      "type": "string",
      "enum": [
        "wheel",
        "source",
        "docs"
      ],
      "description": "Artifact type (default: 'wheel')."
    }
  },
  "required": [
    "sdk_uuid"
  ]
}
🟢rbac_get_my_access

Get current user's role, permissions, and scope.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢rbac_check_permission(permission)

Check if the current user has a specific permission.

Input Schema

{
  "type": "object",
  "properties": {
    "permission": {
      "type": "string",
      "description": "Permission to check (e.g. 'schema:manage', 'data:write')."
    }
  },
  "required": [
    "permission"
  ]
}
🟢apikey_get_scope

Get the scope and permissions of the current API key.

Input Schema

{
  "type": "object",
  "properties": {}
}
🔴connector_run(connector_id, params)

Trigger a manual connector sync execution.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    },
    "params": {
      "type": "object",
      "description": "Optional execution parameters."
    }
  },
  "required": [
    "connector_id"
  ]
}
🔴connector_cancel(connector_id, execution_id)

Cancel a running connector execution.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    },
    "execution_id": {
      "type": "string",
      "description": "UUID of the execution to cancel."
    }
  },
  "required": [
    "connector_id",
    "execution_id"
  ]
}
🟢connector_status(connector_id)

Get connector status and recent executions.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    }
  },
  "required": [
    "connector_id"
  ]
}
⚪connector_enable(connector_id)

Enable a connector for scheduling.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    }
  },
  "required": [
    "connector_id"
  ]
}
⚪connector_disable(connector_id)

Disable a connector.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    }
  },
  "required": [
    "connector_id"
  ]
}
⚪connector_discover(connector_id, params)

Trigger schema/metadata discovery for a connector.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    },
    "params": {
      "type": "object",
      "description": "Optional discovery parameters."
    }
  },
  "required": [
    "connector_id"
  ]
}
🟢connector_discover_status(connector_id, execution_id)

Get discovery execution status.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    },
    "execution_id": {
      "type": "string",
      "description": "UUID of the discovery execution."
    }
  },
  "required": [
    "connector_id",
    "execution_id"
  ]
}
🟢connector_discover_results(connector_id, execution_id)

Get discovery results.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    },
    "execution_id": {
      "type": "string",
      "description": "UUID of the discovery execution."
    }
  },
  "required": [
    "connector_id",
    "execution_id"
  ]
}
⚪connector_test_config(config)

Test a connector configuration.

Input Schema

{
  "type": "object",
  "properties": {
    "config": {
      "type": "object",
      "description": "Connector config to test."
    }
  },
  "required": [
    "config"
  ]
}
🟢connector_test(connector_id)

Test an existing connector's connectivity.

Input Schema

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "description": "UUID of the connector."
    }
  },
  "required": [
    "connector_id"
  ]
}
🟢connector_plugins

List available connector plugins.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded65 tools
verifiedversion not recorded64 tools
verifiedversion not recorded64 tools
verifiedversion not recorded64 tools
verifiedversion not recorded64 tools
verifiedversion not recorded64 tools