Supero

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

我该使用它吗

质量与安全性

A
描述质量
98%
模式完整度
89%
命名质量
90%
投毒风险
80%
权限匹配度
100%
协议合规性
100%

发现(4)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded string在 build_list_data_sources 中
  • LOWTool 'project_link_schemas' description lacks action verb在 project_link_schemas 中
  • LOWTool 'connector_discover' description lacks action verb在 connector_discover 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~10,815token 数(工具定义)
~1020 B典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 8.45%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

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

远程端点

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

它能做什么

工具清单

工具(64)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢crud_search(object_type, filters, limit, offset, detail, ...)

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).

输入模式

{
  "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 as key-value pairs (e.g. {\"status\": \"active\"})"
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default: 100)"
    },
    "offset": {
      "type": "integer",
      "description": "Skip N results for pagination"
    },
    "detail": {
      "type": "boolean",
      "description": "Include full object data (default: true)"
    },
    "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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!

输入模式

{
  "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)

Save/upload schemas to the domain. Schemas are validated before saving. Returns list of successfully saved schemas with their UUIDs. IMPORTANT: Pass FLAT schema objects directly — do NOT wrap in schema_content. The tool handles schema_type detection and wrapping automatically. Required fields: name, parent_type, prefix, plural_name, attributes, description. Supported attribute types: 'string' for text, 'float' for decimal numbers (NOT 'number'), 'integer' for whole numbers, 'boolean' for true/false. Optionally pass project_uuid to auto-link saved schemas to a project. Example: { "schemas": [{ "name": "product", "description": "Product catalog entry", "parent_type": "tenant", "prefix": "prd", "plural_name": "products", "attributes": [ {"name": "title", "type": "string", "required": true}, {"name": "price", "type": "float"}, {"name": "stock", "type": "integer"} ] }] }

输入模式

{
  "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": "Optional project UUID to auto-link saved schemas to."
    }
  },
  "required": [
    "schemas"
  ]
}
🔴schema_delete(schema_uuid, force_delete)

Delete a schema from the domain. Use with caution.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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)."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🔴sdk_generate(languages, force_rebuild, include_docs)

Generate client SDKs for the domain's schemas.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

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

Check if the current user has a specific permission.

输入模式

{
  "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.

输入模式

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

Trigger a manual connector sync execution.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

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

Enable a connector for scheduling.

输入模式

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

Disable a connector.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

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

Test an existing connector's connectivity.

输入模式

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

List available connector plugins.

输入模式

{
  "type": "object",
  "properties": {}
}
🟢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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

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

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

输入模式

{
  "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Project UUID (from build_list_projects)."
    }
  },
  "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.

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Project name/slug."
    },
    "display_name": {
      "type": "string"
    },
    "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).

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "mode": {
      "type": "string",
      "enum": [
        "dev",
        "live"
      ]
    }
  },
  "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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"
      ]
    }
  },
  "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.

输入模式

{
  "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": [
    "files"
  ]
}
🟡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 unless force=true. Provide files as {relative_path: content}.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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 even if validation has errors (default false)."
    }
  },
  "required": [
    "project_uuid",
    "files"
  ]
}
🟢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.

输入模式

{
  "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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; a launch still pending after ~5 minutes should be treated as failed.

输入模式

{
  "type": "object",
  "properties": {
    "poll_url": {
      "type": "string"
    },
    "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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)

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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "version_uuid": {
      "type": "string",
      "description": "Default: latest published version."
    },
    "file_id": {
      "type": "string",
      "description": "Default: the resolved version's web artifact file_id."
    }
  },
  "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    }
  },
  "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.

输入模式

{
  "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)

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.

输入模式

{
  "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."
    }
  }
}
🔴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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string"
    },
    "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_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.

输入模式

{
  "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": [
    "files"
  ]
}
🟢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.

输入模式

{
  "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_e2e_test(project_uuid, version_uuid, suites, live_email)

Run the FULL behavioural test suite against a PUBLISHED bundle in the project's OWN already-deployed app (no throwaway project is created) — auth/RBAC/multi-tenant, CRUD round-trips, workflows + event emission, services, aggregates, real-browser UI. WRITE-SAFE: on a DEV project the write suites create + delete only their OWN test records (your real data stays read-only); a LIVE project is auto-restricted to read-only suites so production data is never mutated. This is the deep complement to build_smoke_test ('loads + reads one row'); it proves the app actually WORKS. COSTS A FULL RUN (~2-4 min of real compute) — a PRE-DELIVERY gate, NOT a per-edit check; run it after build_validate + build_doctor pass, on a deployed + seeded project. ASYNC: returns a run_id; poll build_e2e_test_status. Findings are layer-attributed so you know which are yours to fix (app/config) vs. report (platform/sdk). Requires platform enablement.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "The project the published bundle belongs to."
    },
    "version_uuid": {
      "type": "string",
      "description": "Published version to test. Default: latest."
    },
    "suites": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "auth",
          "crud",
          "services",
          "aggregates",
          "workflows",
          "ui",
          "all"
        ]
      },
      "description": "Subset to run (default ['all']). Skipping a core suite caps the verdict."
    },
    "live_email": {
      "type": "boolean",
      "description": "Actually send a test email (default false → audit-only)."
    }
  },
  "required": [
    "project_uuid"
  ]
}
🟢build_e2e_test_status(run_id)

Poll an e2e run started by build_e2e_test. While running, returns status only. When complete, returns a compact report: verdict (honest — never 'healthy' if a core suite couldn't run), per-suite pass/fail/warn/skip, findings with layer + fix hint, what was/wasn't covered, and next_steps that say which findings to fix vs. report. On failure it carries a cause.

输入模式

{
  "type": "object",
  "properties": {
    "run_id": {
      "type": "string",
      "description": "The run_id from build_e2e_test."
    }
  },
  "required": [
    "run_id"
  ]
}
🟢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').

输入模式

{
  "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 — run build_discover_source then build_bind_data_source. 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.

输入模式

{
  "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"
    },
    "port": {
      "type": "integer"
    },
    "database": {
      "type": "string"
    },
    "username": {
      "type": "string"
    },
    "password": {
      "type": "string",
      "description": "DB password — sent to the platform, never echoed."
    },
    "ssl_mode": {
      "type": "string"
    },
    "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, ...}."
    },
    "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)."
    }
  },
  "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).

输入模式

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string"
    },
    "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.

输入模式

{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string"
    },
    "bindings": {
      "type": "array",
      "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"
            ]
          },
          "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).

输入模式

{
  "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.

输入模式

{
  "type": "object",
  "properties": {
    "project_uuid": {
      "type": "string",
      "description": "Defaults to the key's project."
    }
  }
}

社区

评价此服务器

证据

最近观测

已验证未记录版本64 个工具
已验证未记录版本64 个工具