Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.seldonframe/seldonframe-mcp

NPM · @SELDONFRAME/MCP · SCANNED AUG 3

Open-source GoHighLevel alternative for agencies. White-label CRM, booking, intake, chatbot via MCP.

Available components

+16 this week 59 Trust /100

Deprecated

This server is marked deprecated in the MCP registry.

Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security86
  • No malware found by supply-chain analysis.Pass
  • Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (AGPL-3.0-or-later).Pass
  • Actively maintained (last published 26 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability29
  • AI-judged instruction clarity (poor).Fail
  • Context-footprint check failed: tool/resource definitions use about 29711 tokens (~196/item across 151 items; 151 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 98% of tool parameters carry a description.Partial
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · @seldonframe/mcp

# add to Claude Code
claude mcp add seldonframe-seldonframe-mcp -- npx -y @seldonframe/mcp
# add to Codex CLI
codex mcp add seldonframe-seldonframe-mcp -- npx -y @seldonframe/mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "seldonframe-seldonframe-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@seldonframe/mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add seldonframe-seldonframe-mcp --command npx --arg -y --arg @seldonframe/mcp
# ~/.hermes/config.yaml
mcp_servers:
  seldonframe-seldonframe-mcp:
    command: "npx"
    args: ["-y", "@seldonframe/mcp"]
// mcp.json
{
  "mcpServers": {
    "seldonframe-seldonframe-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@seldonframe/mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +41
    • Provenance: unverified → fail security
    • Known CVEs: unverified → partial security
    • Install scripts: unverified → pass security
    • Malware scan: unverified → pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Maintenance: unverified → pass functional
    • Schema quality: unverified → poor functional
    • Stability: unverified → 0.20 functional
    • Dependency health: unverified → partial functional
    • License: unverified → pass functional
    • MCP protocol: unverified → pass functional
    • Licence: AGPL-3.0-or-later functional
  • 1 Aug 26 +13
    • Tool coverage: unverified → 100 functional
  • 31 Jul 26 −20
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1
    • Malware scan: pass → unverified security
    • Tool coverage: unverified → 100 functional
  • 28 Jul 26 −19
    • Tool coverage: 100 → unverified functional
    • First check of Schema quality: unverified functional
  • 27 Jul 26 43

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Analysed npm/@seldonframe/[email protected]

Provenance none

Ecosystem: npm · Outcome: none

Dependencies 94 packages

94 packages in the resolved dependency tree · 94 deprecated · 29 stale.

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools — 151 exposed · ~25,838 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
get_booking ~112

Fetch one scheduled booking by id. Returns the full detail (contact, times, status, notes, meeting URL, cancellation timestamp, metadata). Appointment-type templates are NOT returned here — use list_appointment_types for those. 404s if the id is unknown OR belongs to a different workspace. Example: get_booking({ booking_id: 'bkg_...' }).

NameTypeReqDescription
booking_idstringyesRequired. UUID of the booking.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_booking_structure ~101

Read the workspace's booking event-type + fields (indexed list with type + label + required + 1-line preview). Standard fields (fullName at index 0, email at index 1) are flagged is_standard:true — they're server-owned and cannot be moved/deleted/renamed. Use BEFORE add_booking_field / move_booking_field / delete_booking_field / update_booking_field to find the right index.

NameTypeReqDescription
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

get_contact ~56

Fetch one contact by id. Example: get_contact({ contact_id: 'abc-...' }).

NameTypeReqDescription
contact_idstringyesUUID of the contact.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_deal ~56

Fetch one deal by id. Example: get_deal({ deal_id: '...' }).

NameTypeReqDescription
deal_idstringyesUUID of the deal.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_email ~63

Fetch a single email with its full provider-event history (sent / delivered / opened / clicked / bounced).

NameTypeReqDescription
email_idstringyesEmail ID returned from send_email or list_emails.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_form ~79

Fetch one form by id or slug. Example: get_form({ form: 'contact' }) or get_form({ form: 'uuid…' }).

NameTypeReqDescription
formstringyesForm id (uuid) or slug (e.g., 'contact', 'intake').
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_intake_structure ~83

Read the workspace's intake form: title, description, and the indexed list of fields with type + label + required + 1-line preview. Use this BEFORE add_intake_field / move_intake_field / delete_intake_field / update_intake_field to find the right index. Cheap one-DB-read.

NameTypeReqDescription
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

get_invoice ~57

Fetch an invoice + its line items + hosted invoice URL (for payment).

NameTypeReqDescription
invoice_idstringyesInvoice ID returned from create_invoice or list_invoices.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_landing_page ~56

Fetch a single landing page with its full Puck payload + metadata.

NameTypeReqDescription
page_idstringyesLanding page ID from list_landing_pages.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_landing_structure ~207

Read the workspace's landing-page section list with INDEX as the addressing primitive. Returns each section's index (0..N-1, top-to-bottom on the rendered page), type ('hero', 'services-grid', 'about', 'faq', 'mid-cta', 'trust-strip', 'footer', etc.), and a 1-line preview ('Vancouver's Trusted HVAC Family — Same-Day Service' for hero, '3 services (grid-3)' vs 'stats — 4 numbers' for services-grid duplicates). Use this BEFORE move_section / delete_section so you know which index to target. The preview disambiguates duplicate types (e.g. when a workspace has TWO services-grid sections — one with services, one with stats). v1.11+ replaces the v1.10 workflow where the agent had to fetch landing_pages.blueprintJson manually and parse it client-side. Cheap server-side (one DB read).

NameTypeReqDescription
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

get_landing_template ~68

Fetch a single landing-page template including its Puck payload. Pair with create_landing_page to seed a new page from the template.

NameTypeReqDescription
template_idstringyesTemplate ID from list_landing_templates.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_payment ~51

Fetch a single payment record with status + refund/dispute state.

NameTypeReqDescription
payment_idstringyesPayment ID from list_payments.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_portal_structure ~80

Read the workspace's portal template — indexed list of composite-tree sections with previews. Use BEFORE add_portal_section / update_portal_section / move_portal_section / delete_portal_section to find the right index. Empty templates are valid (the portal just shows built-in tabs without a Custom tab).

NameTypeReqDescription
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

get_sms ~64

Fetch a single SMS with its full provider-event history (queued / sent / delivered / failed / undelivered).

NameTypeReqDescription
sms_idstringyesSMS ID returned from send_sms or list_sms.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

get_workspace_snapshot ~113

Return a structured read-only snapshot of workspace state: workspace metadata, Soul (if submitted), theme, enabled blocks with configs, entity counts (contacts/bookings/intake forms/submissions), recent Seldon It events, and public URLs. YOU reason over this snapshot to decide what to do next, then call the appropriate typed tools (update_landing_content, configure_booking, customize_intake_form, update_theme, install_*). Zero server-side LLM cost.

NameTypeReqDescription
workspace_idstringOptional workspace override.

No output schema declared.

No examples provided.

get_workspace_state ~294

USE FIRST for any workspace task — replaces 4-6 separate discovery calls with one. Returns: workspace identity (name, slug, industry, timezone, dashboard URL); integrations status (anthropic / openai / twilio / resend / kit / mailchimp configured? — booleans only, no keys leaked); agents WITH inline health stats (status, version, eval pass rate, validator pass rate 24h, conversations 24h, eval gate met?, last eval run); high-level counts (contacts, bookings, deals, agents); and a next_steps array tailored to the workspace's current state (e.g. 'configure Anthropic key', 'no agents yet — call build_website_chatbot', 'agents need eval run before live'). USE WHEN USER SAYS: 'what's in this workspace', 'how is my chatbot doing', 'build me a chatbot for [biz]' (call FIRST so you know if an agent already exists + if LLM is configured), 'is my agent live yet', 'workspace status'. AVOIDS asking the user obvious questions like 'how should I configure the Anthropic key?' — the response.integrations.anthropic.configured tells you. Avoids creating a duplicate agent — response.agents tells you what already exists. Avoids a separate get_agent_metrics call — stats come inline.

NameTypeReqDescription
workspace_idstringyesWorkspace id (bearer workspace).

No output schema declared.

No examples provided.

import_claude_design_handoff ~284

Validate a Claude Design handoff bundle (the artifact Claude Design produces when designs are ready for code), apply its embedded design tokens to the workspace theme, and return a structured manifest of the components with per-component next-step instructions for wiring them into pages. Does NOT auto-execute generated React on live pages — components route through human/eval review (the same gate that protects published agents) before customer-facing surfaces ship. USE-WHEN the operator says: 'import this Claude Design handoff', 'wire up these components', 'I just exported a design from Claude Design', or 'apply this design bundle to my workspace'. Example: import_claude_design_handoff({ bundle: { meta: { project_name: 'Acme HVAC' }, tokens: { colors: { primary: '#0e7490' } }, components: [{ name: 'TrustStrip', surface: 'landing', react_source: '<TSX content>' }] } })

NameTypeReqDescription
bundleobjectyesThe handoff bundle as a JSON object. Required fields: bundle.components (array of {name, react_source OR html_source}). Optional: bundle.meta, bundle.tokens (DESIGN.md-shape), bundle.assets. Server c…
workspace_idstringOptional workspace override.

No output schema declared.

No examples provided.

install_caldiy_booking ~55

Install the booking page (event types, availability, scheduled bookings). Example: install_caldiy_booking({})

NameTypeReqDescription
configobjectOptional booking-page configuration overrides.
workspace_idstringOptional workspace override.

No output schema declared.

No examples provided.

install_formbricks_intake ~61

Install an intake form (questions, conditional logic, automatic CRM sync). Example: install_formbricks_intake({})

NameTypeReqDescription
form_idstringOptional existing intake-form id to bind.
workspace_idstringOptional workspace override.

No output schema declared.

No examples provided.

link_workspace_owner ~107

Claim an anonymously-created workspace under your real account. After linking, the admin URLs (dashboard, contacts, deals) become usable once you sign in at app.seldonframe.com. Requires SELDONFRAME_API_KEY to be set in the MCP environment. The workspace bearer token continues to work — no rotation needed. Example: link_workspace_owner({}) to claim the active workspace.

NameTypeReqDescription
workspace_idstringOptional workspace id to claim. Defaults to the active workspace from this device.

No output schema declared.

No examples provided.

list_activities ~54

List activity log entries (tasks, notes, email sent, booking created, etc.) across the workspace. Example: list_activities({}).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_agents ~115

USE WHEN USER SAYS: 'show me my agents', 'which chatbots do I have', 'list agents in this workspace', 'is the HVAC chatbot live yet?'. Lists all agents in the workspace with status (draft/test/live/paused), version, daily token usage vs budget, and metadata. Use to find an agent_id before calling publish_agent / update_agent_blueprint / get_agent_metrics, or to audit which agents are live across a workspace.

NameTypeReqDescription
workspace_idstringyesWorkspace id (bearer workspace).

No output schema declared.

No examples provided.

list_appointment_types ~48

List all appointment types (bookable templates) in the workspace. Example: list_appointment_types({}).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_automations ~34

List automations configured in the active (or specified) workspace.

NameTypeReqDescription
workspace_idstringOptional workspace override.

No output schema declared.

No examples provided.

list_blocks ~75

List all v2 page-block primitives available in this SF backend. Returns each block's name, version, section type, one-line description, and the URL where its full SKILL.md (the generation prompt + prop schema) lives. Use this when you need to discover what blocks exist; for actual block content use get_block_skill.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_bookings ~199

List scheduled bookings (not appointment-type templates — see list_appointment_types for those). Supports filtering by contact, status, and date range. Default sort: most-recent-first; if `from` is set, switches to earliest-upcoming-first for reminder flows. Example: list_bookings({ from: '2026-04-22T00:00:00Z', limit: 20 })

NameTypeReqDescription
contact_idstringOptional. Filter to a specific contact's bookings.
fromstringOptional ISO timestamp. Only bookings starting at or after this moment.
limitnumberMax rows (default 50, max 200).
statusstringOptional. Filter by status (scheduled | completed | cancelled | no_show).
tostringOptional ISO timestamp. Only bookings starting at or before this moment.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_brain_dir ~123

List brain notes in the workspace's layer-1 brain. Returns metadata + a 120-char body preview per note (full body requires read_brain_path). Use to discover what the brain knows about this workspace before generating blocks. Pass `prefix` to filter by directory (e.g. 'voice/' returns voice-related notes only). Notes are returned sorted by confidence descending.

NameTypeReqDescription
prefixstringOptional path prefix to filter (e.g. 'voice/', 'customers/'). Omit for all notes.
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

list_brain_patterns ~197

List layer-2 cross-workspace patterns. These are anonymized insights the cron has promoted from workspaces that all observed the same thing (3+ workspaces, confidence >= 0.7). Use BEFORE generating blocks for a vertical-specific business — patterns/by-vertical/<vertical>.md gives you observations across every other workspace in that vertical. Compounding moat: each new workspace's interactions feed back into these patterns over time.

NameTypeReqDescription
block_typestringOptional block-type filter: 'hero' | 'services' | 'faq' | etc. Returns patterns/by-block-type/<type>/* notes only.
verticalstringOptional vertical filter: 'barbershop' | 'hvac' | 'legal' | 'restaurant' | etc. Returns patterns/by-vertical/<vertical>/* notes only.
workspace_idstringyesWorkspace id (used for auth; the patterns themselves are global).

No output schema declared.

No examples provided.

list_contacts ~46

List contacts in the active workspace. Returns every contact the caller can read. Example: list_contacts({}).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_deals ~40

List deals in the active workspace. Example: list_deals({}).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_emails ~64

List recent emails sent from the workspace, newest first. Useful for checking delivery status before following up.

NameTypeReqDescription
limitnumberMax rows to return (default 50, max 200).
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_forms ~38

List intake forms in the workspace. Example: list_forms({}).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_invoices ~61

List workspace invoices (draft + sent + paid + past_due + voided), newest first.

NameTypeReqDescription
limitnumberMax rows (default 50, max 200).
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_landing_pages ~59

List the workspace's landing pages (draft + published), newest-updated first.

NameTypeReqDescription
limitnumberMax rows (default 50, max 200).
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_landing_templates ~62

List the pre-built vertical landing-page templates. Each has a validated Puck payload ready to seed a new page via create_landing_page({puck_data: template.payload}).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_payments ~61

List recent payments (completed + failed + refunded + disputed) across the workspace, newest first.

NameTypeReqDescription
limitnumberMax rows (default 50, max 200).
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_secrets ~32

List secret metadata (names, timestamps) without exposing plaintext.

NameTypeReqDescription
workspace_idstringOptional workspace override.

No output schema declared.

No examples provided.

list_sms ~60

List recent SMS messages (inbound + outbound) for the workspace, newest first.

NameTypeReqDescription
limitnumberMax rows to return (default 50, max 200).
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_sms_suppressions ~53

List all suppressed phone numbers for the workspace — who is opted out and why (manual / stop_keyword / carrier_block / complaint).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_submissions ~78

List submissions for a form. Example: list_submissions({ form_id: 'uuid…' }).

NameTypeReqDescription
form_idstringyesUUID of the form. Slug lookup not supported on this endpoint — use get_form first if you only have the slug.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_subscriptions ~59

List workspace subscriptions (active + trialing + past_due + canceled), newest first.

NameTypeReqDescription
limitnumberMax rows (default 50, max 200).
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_suppressions ~50

List all suppressed email addresses for the workspace — who is opted out and why (manual / unsubscribe / bounce / complaint).

NameTypeReqDescription
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

list_workspace_domains ~70

List all custom domains registered to the workspace. Returns hostname, status (pending / verified / failed), DNS verification record, and primary flag for each. Allowed on all tiers — free workspaces will see an empty list since custom domains require a paid tier.

NameTypeReqDescription
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

list_workspaces ~32

List all workspaces known to this device (plus any Pro workspaces if SELDONFRAME_API_KEY is set).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

move_booking_field ~113

Move ONE booking field (extra) to a new position. Splice semantics. Standards (fullName, email at indices 0/1) cannot be moved AND cannot be displaced — both from_index and to_index must be >= 2.

NameTypeReqDescription
from_indexintegeryes0-based source index. Must be >= 2 (standards locked).
to_indexintegeryes0-based target index in the result. Must be >= 2.
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

move_deal_stage ~115

Move a deal to a new stage. Same effect as dragging the card on the kanban. Example: move_deal_stage({ deal_id: '...', to_stage: 'Proposal' }).

NameTypeReqDescription
deal_idstringyesUUID of the deal.
probabilitynumberOptional. Stage probability (0-100) if the workspace's pipeline has one defined for this stage.
to_stagestringyesDestination stage name.
workspace_idstringOptional. Falls back to the active workspace.

No output schema declared.

No examples provided.

move_intake_field ~108

Move ONE intake field to a new position. Splice semantics — field at from_index is removed, then inserted at to_index in the result. Use when the operator says 'put email at the top' or 'move phone above address'. Run get_intake_structure first to find the indices.

NameTypeReqDescription
from_indexintegeryes0-based source index.
to_indexintegeryes0-based target index in the result.
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

move_portal_section ~76

Move ONE portal-template section atomically. Splice semantics: section at from_index removed, then inserted at to_index in the result.

NameTypeReqDescription
from_indexintegeryes0-based source index.
to_indexintegeryes0-based target index in the result.
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

move_section ~253

Move ONE landing-page section atomically. Identifies sections by INDEX (run get_landing_structure first to find which index to move). Splice semantics: the section at from_index is removed, then inserted at to_index in the resulting array — so to_index is the section's NEW position in the result. Examples: 'put hero below FAQ' → from_index=<hero index>, to_index=<faq's current index>. 'Move services to the top' → from_index=<services index>, to_index=0. Handles duplicate types correctly (the case reorder_landing_sections refused) — index identity is unambiguous even when two services-grid or two mid-cta sections exist. Use reorder_landing_sections instead when you want to express the entire new order at once AND types are unique. Use move_section for single-step moves OR when types repeat.

NameTypeReqDescription
from_indexintegeryes0-based index of the section to move (from the get_landing_structure response).
to_indexintegeryes0-based index where the section should END UP in the result. Splice semantics — equivalent to: remove from from_index, then insert at to_index.
workspace_idstringyesWorkspace id.

No output schema declared.

No examples provided.

persist_block ~355

Persist a v2 block instance. Call this after you've read the block's SKILL.md and generated props matching its schema. The server validates props (Zod schema + deterministic copy-quality validators), renders the block via the existing renderer, replaces the matching section in the workspace's landing page, and returns the public URL where the change is now visible. For initial generation, omit `customization`. For operator-driven edits ('make the hero warmer', 'add a card about kids cuts'), pass `customization: { prompt }` — the operator's prompt is appended to the row's customization history (forever-frozen rule), and the new props replace the previous render. Returns `validation_errors` on failure — if you see them, regenerate the props with the rules from SKILL.md applied more carefully and retry. Don't show validation errors to the operator; they're for you.

NameTypeReqDescription
block_namestringyesBlock name (must match a get_block_skill name): hero, services, or faq.
customizationobjectOptional operator-customization layer. When set, append-only override of the initial generation. Use this when the operator says 'change X about my hero' rather than 'rewrite my hero'.
generation_promptstringyesThe full prompt your LLM consumed to produce these props. Stored as the source of truth for re-renders. Include the workspace context (business name, services, etc.) — not just the SKILL.md body.
propsobjectyesBlock props matching the prop schema in the block's SKILL.md frontmatter. Validated server-side; mismatches return 422 with structured validation_errors.
workspace_idstringyesWorkspace id from create_workspace_v2.

No output schema declared.

No examples provided.