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

ai.spideriq/publish

NPM · @SPIDERIQ/MCP-PUBLISH · SCANNED SEP 25

SpiderIQ Publish: content platform MCP (pages, posts, templates, components, domains, media)

0 this week 67 Trust /100
Trust breakdown (7 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 → Why this is hard to score →

Supply Chain Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects sharp 0.33.5, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 33 of 132 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
  • Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 20 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability61
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 36639 tokens (~234/item across 156 items; 156 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 Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage91
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 72% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 23 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "logout" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 156 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the ai.spideriq/publish MCP server?

ai.spideriq/publish runs locally as an npm package, launched with npx -y @spideriq/mcp-publish. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @spideriq/mcp-publish

# add to Claude Code
claude mcp add ai-spideriq-publish -- npx -y @spideriq/mcp-publish
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-spideriq-publish": {
      "command": "npx",
      "args": [
        "-y",
        "@spideriq/mcp-publish"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-spideriq-publish": {
      "command": "npx",
      "args": [
        "-y",
        "@spideriq/mcp-publish"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ai-spideriq-publish -- npx -y @spideriq/mcp-publish
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-spideriq-publish": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@spideriq/mcp-publish"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-spideriq-publish --command npx --arg -y --arg @spideriq/mcp-publish
# ~/.hermes/config.yaml
mcp_servers:
  ai-spideriq-publish:
    command: "npx"
    args: ["-y", "@spideriq/mcp-publish"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-spideriq-publish": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@spideriq/mcp-publish"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ai-spideriq-publish -t stdio -c npx -a -y @spideriq/mcp-publish
// mcp.json
{
  "mcpServers": {
    "ai-spideriq-publish": {
      "command": "npx",
      "args": [
        "-y",
        "@spideriq/mcp-publish"
      ]
    }
  }
}
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.

  • 25 Sept 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 23 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 22 Sept 26 +1
    • Stability: 0.97 → pass security
  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 15 Sept 26 +1
    • Stability: 0.97 → pass security
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

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 25 Sept 2026 · Analysed npm/@spideriq/mcp-publish@1.25.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 2 findings
ID CVE Severity Vector Fix available
GHSA-f88m-g3jw-g9cj high yes
GHSA-rgj7-g3m4-5g8c high yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 132 packages
Packages resolved 132
Stale 31
No linked repository 2
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 156 exposed · ~36,639 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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
content_get_page_template ~185

Fetch a single page template by slug. Public read — no auth required. Returns the full detail including the ONE source page that gets cloned on apply, its components, and any settings keys. Use this to preview a template before calling content_apply_page_template. (A page template is a content_site_templates row, so this resolves the same endpoint as content_get_site_template.)

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
slugstringyesPage template slug (e.g. "opt-in-minimal", "vsl-classic").
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_get_page_version ~145

Fetch a single page version snapshot in full (includes the historical `blocks` body). Use when you need to diff a candidate restore against the current page before calling content_restore_page_version.

NameTypeReqDescription
page_idstringyesPage ID (UUID).
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
version_numbernumberyes1-indexed version number from content_list_page_versions.
workspacestring––

No output schema declared.

No examples provided.

content_get_playbook ~271

Look up the canonical tool-sequence for a stated goal. No intent → returns the index of all available playbooks (task keys + when-to-use summaries). Intent = exact task key (e.g. "build_a_directory") → returns the full recipe. Intent = natural language (e.g. "build a directory") → fuzzy-matches against task keys + when-text, returns up to 3 best matches ranked by score. This is the fastest way for a fresh agent to find the right tool chain for a given goal without scanning the full /content/help (~50 KB). Each recipe names the exact tools to call, common variants, and anti-patterns.

NameTypeReqDescription
formatstring–yaml | json (default yaml — cheaper to parse for this shape)
intentstring–Goal in natural language (e.g. "publish a blog post", "build a scroll hero") OR exact task key. Omit to get the index.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_get_post ~102

Get a blog post by ID (includes body, tags, author, status).

NameTypeReqDescription
post_idstringyesPost ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_get_section_source ~322

Get the current Liquid source for a named section (header, footer, hero, etc.). Param-name compatibility (templates.ts duplicate merged here 2026-05-20): - Canonical: { section_slug } - Legacy: { section } When to use this instead of template_get: - You want to see "what Liquid is this client currently rendering for the header?" - You want to check whether an override exists for a section before writing one - You want to copy the current source as a starting point for modification Returns: - If client has an override: returns the override source with origin="client_override" - If client has no override: returns origin="theme_default" with instructions. The bundled theme default source itself lives in the public starter kit, not the API — see SpiderIQ/SpiderPublish repo.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
sectionstring–Legacy alias for section_slug (templates.ts duplicate compat). Pass either one.
section_slugstring–Canonical section identifier — common values: "header", "footer", "hero". Special: "blog-listing", "blog-post", "layout", "head". No .liquid suffix.
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_get_settings ~93

Get your brand's content settings (site name, SEO defaults, analytics, colors).

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_get_site_template ~162

Fetch a single site template by slug. Public read — no auth required. Returns the full template detail including the list of pages, components, nav locations, and settings keys that would be cloned on apply. Use this to preview the impact before calling content_apply_site_template.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
slugstringyesTemplate slug (e.g. "saas-landing", "restaurant-menu").
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_get_variables ~207

**START HERE for personalized landing pages.** Returns the full merge-tag vocabulary ({{firstname}}, {{company_name}}, {{city}}, {{industry}}, {{logo}}, {{email}}, ~40 tokens total) for dynamic-landing templates — Mailchimp-style flat tags every LLM already knows. Includes plain-English descriptions, realistic example values from the Mario's Pizzeria demo fixture, and selection rules (e.g. how `{{ email }}` picks the best verified address). Works without auth. Fetch once at session start — you'll know every variable you can drop into a Liquid template.

NameTypeReqDescription
formatstring–Response format (default: yaml — token-efficient)
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_import_markdown ~446

Import a doc OR page from a Markdown body — the universal Markdown→content bridge. target='doc' parses Markdown into a Tiptap doc body; target='page' parses prose runs into rich_text blocks. `:::component{slug=… version=… props={…}}` directives become embedded components (the MDX unlock). Create a NEW item (omit the id, pass slug + title) or REPLACE an existing one's body/blocks (pass doc_id for a doc / page_id for a page). The Phase 11+12 gate is opt-in via dry_run/confirm_token and applies on the REPLACE path (omit both ⇒ immediate). Round-trips with content_export_markdown. Markdown is capped at 256 KB.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
doc_idstring–Existing doc to replace (target='doc'); omit to create.
dry_runboolean–Preview the change without mutating and receive a confirm_token. When omitted, the change is applied immediately (legacy behaviour preserved).
markdownstringyesMarkdown source (≤256 KB). `:::component{...}` directives are preserved.
page_idstring–Existing page to replace blocks on (target='page'); omit to create.
parent_idstring–Parent doc/page id (nesting on create; doc re-path on update).
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
slugstring–Flat slug — required when creating, ignored when updating (slug is immutable).
targetstringyesWhat to create/update from the Markdown.
templatestring–Page template (target='page' create only; default 'default').
titlestring–Required when creating; updates the title when set on an existing item.
workspacestring––

No output schema declared.

No examples provided.

content_import_openapi ~376

Generate a full API-reference docs section from ANY OpenAPI 3.x or Swagger 2.0 spec (the flagship 'docs as a product' feature — Stripe/ReadMe/Mintlify-tier). Provide EXACTLY ONE of source_url (fetched server-side, SSRF-safe) or spec_content (pasted JSON/YAML). Creates one doc page per tag under the `section` slug (default 'api-reference'), each endpoint with method/path/params/schemas and auto multi-language code samples (curl/Python/JS/Go) in a `:::codegroup` block. Re-import is IDEMPOTENT — the importer owns the section subtree (upserts tag pages, archives removed ones). Use dry_run=true to preview the planned section + pages without writing. Docs are created as drafts unless publish=true.

NameTypeReqDescription
dry_runboolean–Preview the planned section + pages without writing anything.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
publishboolean–Publish the generated docs immediately (default false → created as drafts for review).
sectionstring–Slug of the docs section to generate under (default 'api-reference'). Importer-owned subtree.
source_urlstring–HTTPS/HTTP URL of the OpenAPI/Swagger spec (fetched SSRF-safely). Provide this OR spec_content.
spec_contentstring–Raw spec text (JSON or YAML) — alternative to source_url.
spec_formatstring–Spec body format (default 'auto').
workspacestring––

No output schema declared.

No examples provided.

content_list_authors ~84

List your brand's blog authors.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_list_categories ~86

List your brand's blog categories (supports hierarchy).

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_list_cdn_allowlist ~113

List available CDN libraries for component dependencies (Tier 3). Returns keys, names, URLs, categories. Use these keys in the dependencies array when creating/updating components.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_list_component_versions ~95

List all versions of a component by slug.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
slugstringyesComponent slug
workspacestring––

No output schema declared.

No examples provided.

content_list_components ~131

List UI components (reusable blocks with Shadow DOM isolation).

NameTypeReqDescription
categorystring–Filter by category
include_globalboolean–Include global (system) components
limitnumber–Max results
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
statusstring–Filter by status
workspacestring––

No output schema declared.

No examples provided.

content_list_docs ~164

List your brand's docs as a FLAT list (metadata only — no body). Complements content_docs_tree (which returns the hierarchy). Use this to discover a doc's UUID by title/status before fetching or mutating it via content_get_doc. Each item carries id, slug, full_path, title, status, parent_id, is_section, sort_order, seo_*, timestamps.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
statusstring–Filter by status.
workspacestring––

No output schema declared.

No examples provided.

content_list_domains ~87

List custom domains configured for your brand's content site.

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_list_marketplace_bg_videos ~237

Browse the curated background-video library — 12 short looping clips across 6 categories. Public read, no auth. When to use: - Picking a clip for a hero-video-bg or sys-bg-video block - Surfacing the catalog on a dashboard "browse bg videos" page Categories: nature | city | abstract | food | tech | people Each result carries: slug, name, description, r2_url, poster_url, duration_seconds, loop_seconds, category, tags, is_featured.

NameTypeReqDescription
categorystring–nature | city | abstract | food | tech | people
is_featuredboolean––
limitinteger––
offsetinteger––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
tagstring––
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_list_marketplace_components ~471

Browse the SpiderIQ section library — ready-to-insert sections grouped by category. Public read, no auth. When to use: - Filling out an existing page that needs a hero / pricing / FAQ block - Adding a sign-in / forgot-password / reset-password page (category=authentication) - Picking the right component shape before calling page_insert_section - Surfacing the gallery on a dashboard "browse sections" page Categories (use `category` filter): hero, features, pricing, social-proof, content, forms, team, footer, header, cta, faq, authentication The `authentication` category holds 3 designable sign-in bricks (spideriq/auth-login, spideriq/auth-forgot-password, spideriq/auth-reset-password), each rendering a <spideriq-auth> custom element (CLOSED shadow DOM). Their props REQUIRE `auth_target` ("dashboard" = sign into the SpiderIQ dashboard; "site_members" = the tenant's own members). These are a designable shell + integration contract — the real auth backends are wired by Login Initiatives B/C; until then submit degrades gracefully. See the content/help `build_a_login_page` task recipe for the full flow. Each result carries: - slug + name + version (use slug + version for page_insert_section) - props_schema + default_props (validate before insert) - preview_thumbnail_url (designer-curated card art, R2) - marketplace_category + marketplace_featured + marketplace_description

NameTypeReqDescription
categorystring–hero | features | pricing | social-proof | content | forms | team | footer | header | cta | faq | authentication
is_featuredboolean–Surface featured-only sections.
limitinteger–Default 100.
offsetinteger––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
tagstring–Filter to components whose tags array contains this tag.
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_list_page_templates ~390

List SpiderIQ-curated SINGLE-PAGE templates (the Page Template catalog). Public read — no auth required. When to use: - An agent or client needs a landing page, opt-in, thank-you, VSL, webinar, sales, coming-soon, 404, or pricing page and wants a proven starting point - ALWAYS prefer this over generating a page from scratch — clone-and-adapt is faster and more reliable than authoring Liquid blind ("adapt, don't generate") Each template carries: - slug (clone with content_apply_page_template) - name + description + industry + use_case + tags - preview_url (live preview) + preview_thumbnail_url (R2 screenshot) - source_page_slugs[] — exactly ONE page (that's what makes it a page template) - applied_count (popularity) This is the same catalog as content_list_site_templates, narrowed to is_single_page=true. Use content_list_site_templates for WHOLE-SITE starter kits (multi-page).

NameTypeReqDescription
industrystring–saas | agency | restaurant | ecommerce | portfolio | local-service | blog | event | landing
is_featuredboolean–Filter to is_featured templates only.
limitinteger–Default 50.
offsetinteger––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
tagstring–Filter to templates whose tags array contains this tag.
use_casestring–opt-in | thank-you | vsl | webinar | sales | pricing | coming-soon | 404
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_list_page_versions ~159

List version snapshots for a page (newest first). Each version is created on publish + on restore — use this as the canonical "history" before content_restore_page_version. Returns metadata only (block_count, blocks_size, change_summary, created_at, changed_by); the heavy `blocks` payload is fetched lazily via content_get_page_version.

NameTypeReqDescription
page_idstringyesPage ID (UUID).
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_list_pages ~105

List your brand's content pages (including drafts).

NameTypeReqDescription
limitnumber–Max results
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
statusstring–Filter by status
workspacestring––

No output schema declared.

No examples provided.

content_list_posts ~110

List your brand's blog posts.

NameTypeReqDescription
limitnumber––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
statusstring–Filter by status
tagstring–Filter by tag
workspacestring––

No output schema declared.

No examples provided.

content_list_site_templates ~341

List SpiderIQ-curated site templates. Public read — no auth required. When to use: - Client wants to see what starter sites are available before committing - Filtering for a specific industry (saas, agency, restaurant, ecommerce, portfolio, local-service, blog, event, landing) or use case (marketing, docs, blog, directory, personal) - Surfacing the featured set on a dashboard "browse templates" page Each template carries: - slug (apply with content_apply_site_template) - name + description + industry + use_case + tags - preview_url (live preview at preview-XXX.sites.spideriq.ai) - preview_thumbnail_url (R2-hosted hero screenshot) - source_page_slugs[] (which pages get cloned on apply) - applied_count (popularity)

NameTypeReqDescription
industrystring–saas | agency | restaurant | ecommerce | portfolio | local-service | blog | event | landing
is_featuredboolean–Filter to is_featured templates only.
limitinteger–Default 50.
offsetinteger––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
tagstring–Filter to templates whose tags array contains this tag.
use_casestring–marketing | docs | blog | directory | personal
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_list_tags ~87

List your brand's blog tags (includes post count).

NameTypeReqDescription
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_lock_page ~179

Lock a content page against further edits. Use when handing the page off for client review or scheduled launch. Idempotent — re-locking refreshes the reason. Other agents and dashboard users will receive 423 Locked on every mutation until you (or a super_admin) call content_unlock_page.

NameTypeReqDescription
page_idstringyesPage ID (UUID).
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
reasonstring–Why the page is being locked. Surfaced in 423 Locked responses so the next agent knows whether to back off or override.
workspacestring––

No output schema declared.

No examples provided.

content_override_section ~579

Override a site section (header, footer, hero, sidebar, etc.) — or the blog listing / single-post templates — for this client. Param-name compatibility (the older templates.ts duplicate of this tool was merged here 2026-05-20 — both naming conventions work): - Canonical: { section_slug, liquid_source } - Legacy: { section, liquid } Pass either pair. If both are supplied, the canonical names win. When to use this instead of template_upsert: - You want to customize the header, footer, blog listing, or another named section just for this client - You have Liquid source and know the section slug - You don't want to touch layouts or individual page templates Section slugs are the filename (without .liquid) under themes/default/sections/ — the common ones are "header", "footer", "hero". The tool writes to sections/{slug}.liquid in the client's template override KV. Special slugs that target top-level templates instead of sections/: "blog-listing" → templates/blog.liquid (the /blog index) "blog-post" → templates/blog-post.liquid (single /blog/{slug} pages) "layout" → layout/theme.liquid (the outer HTML shell) "head" → snippets/head.liquid (the <head> contents) There is no "dm-blog-listing" or other branded blog component — the blog UI is template-based, not block-based. Use this tool (or template_upsert) to restyle it; do NOT try to PATCH a content_components row for the blog. Use content_get_section_source(slug) first if you want to see the current override or know whether one exists.

NameTypeReqDescription
liquidstring–Legacy alias for liquid_source (templates.ts duplicate compat). Pass either one.
liquid_sourcestring–Canonical: full Liquid template source for the section. Will overwrite any existing override for this slug.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
sectionstring–Legacy alias for section_slug (templates.ts duplicate compat). Pass either one.
section_slugstring–Canonical section identifier — common values: "header", "footer", "hero". Special: "blog-listing", "blog-post", "layout", "head". No .liquid suffix.
themestring–Theme name (default: "default"). Usually leave as default.
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

content_publish_component ~172

Publish a draft component (makes it available for use in page blocks). Phase 11+12: defaults to dry_run=true — review the preview and call again with confirm_token.

NameTypeReqDescription
component_idstringyesComponent ID
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_publish_doc ~168

Publish a draft doc (status → published). Phase 11+12: defaults to dry_run=true — review the preview and call again with confirm_token to actually publish.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
doc_idstringyes–
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_publish_page ~169

Publish a draft page (creates a version snapshot). Phase 11+12: defaults to dry_run=true — review the preview and call again with confirm_token to actually publish.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
page_idstringyes–
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_publish_post ~89

Publish a blog post.

NameTypeReqDescription
post_idstringyes–
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_rebuild_component ~112

Trigger a rebuild of a framework component (Tier 4). Returns 202 — poll with content_get_build_status.

NameTypeReqDescription
component_idstringyesComponent ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring–Workspace name

No output schema declared.

No examples provided.

content_restore_page_version ~262

Restore a page to a historical version snapshot. Phase 11+12 gated: defaults to dry_run=true — review the preview (which lists snapshot_block_count vs current_block_count + snapshot_created_at) and call again with confirm_token to actually restore. The restored page becomes draft; a new version row is appended recording the restore. Returns 423 Locked when the page is locked — pass force=true (super_admin / brand_admin only) to override.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
forceboolean–Bypass page lock (super_admin / brand_admin only).
page_idstringyesPage ID (UUID).
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
version_numbernumberyes1-indexed version to restore.
workspacestring––

No output schema declared.

No examples provided.

content_search_posts ~106

Search published posts by keyword (public, no auth needed).

NameTypeReqDescription
limitnumber–Max results
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
querystringyesSearch query
workspacestring––

No output schema declared.

No examples provided.

content_set_primary_domain ~102

Set a verified domain as the primary domain for your content site.

NameTypeReqDescription
domainstringyesDomain to set as primary
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_unlock_page ~176

Unlock a content page. Default: only the actor who originally locked it can unlock. Pass force=true (super_admin or brand_admin only) to override regardless of who holds the lock. Returns 403 with `not_lock_holder` if the caller is not the lock-holder and force is not set.

NameTypeReqDescription
forceboolean–Override the lock-holder check (super_admin / brand_admin only). Use when the original lock-holder is unavailable.
page_idstringyesPage ID (UUID).
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_unpublish_doc ~169

Revert a published doc to draft. Phase 11+12: defaults to dry_run=true — review the preview and call again with confirm_token to actually unpublish.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
doc_idstringyes–
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_unpublish_page ~169

Revert a published page to draft. Phase 11+12: defaults to dry_run=true — review the preview and call again with confirm_token to actually unpublish.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
page_idstringyes–
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_unpublish_post ~95

Revert a published post to draft.

NameTypeReqDescription
post_idstringyesPost ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_update_author ~157

Update an author profile.

NameTypeReqDescription
agent_typestring––
author_idstringyesAuthor ID
avatar_urlstring––
biostring––
citystring––
countrystring––
emailstring––
full_namestring––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
rolestring––
slugstring––
workspacestring––

No output schema declared.

No examples provided.

content_update_category ~131

Update a blog category.

NameTypeReqDescription
category_idstringyesCategory ID
descriptionstring––
namestring––
parent_idstring–Parent category ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
slugstring––
sort_ordernumber––
workspacestring––

No output schema declared.

No examples provided.

content_update_component ~1,146

Update a UI component (template, CSS, JS, props schema, metadata). Use this to upgrade an existing component to a Phase A 4-class taxonomy entry — pass `kind` + (when kind != 'static') `js_runtime`. PATCH semantics: cross-field invariants (kind+block_type pairing for kind='dynamic', extension_spec required for kind='extension') are validated by the DB CHECK constraints in migration 174 — backend returns 400 with the constraint name if the patched row would violate them. Use the universal axes (mood / palette / brand_fit_tags / scene_type) to backfill agent-discovery metadata on rows authored before the marketplace search shipped.

NameTypeReqDescription
agent_metaobject–Phase A agent-discovery metadata. Validated by `ComponentAgentMeta` (Pydantic `extra='forbid'`). Shape: { interaction_pattern?: enum, trigger_kind?: enum, intent?: string, audience_tags?: string[] }.…
authoring_hintsobject–P5 — replace component-author-written rules surfaced via the _rules envelope. Pass {} to clear. Shape: {preferred_path?: string, common_mistakes?: string[], must_set?: string[], must_not_set?: string…
block_typestring–Generic block shape — REQUIRED when kind='dynamic', MUST be NULL otherwise (DB CHECK constraint chk_components_kind via migration 174). Drives the editor's block-shape picker.
brand_fit_tagsarray–Universal axis — multi-value industry vertical fit. Drives marketplace cross-filter.
categorystring––
component_idstringyesComponent ID
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
cssstring–Component CSS
default_propsobject––
dependenciesarray–CDN library keys (Tier 3). Use content_list_cdn_allowlist for available keys. When adding deps to a component without a `kind`, also patch `kind`/`js_runtime` in the same PATCH to avoid the latent-Ti…
descriptionstring––
dry_runboolean–Preview the change without mutating and receive a confirm_token. When omitted, the change is applied immediately (legacy behaviour preserved).
frameworkstring–Framework for Tier 4 app components
html_templatestring–Liquid HTML template
jsstring–Vanilla JS scoped to shadow root (Tier 2)
js_runtimestring–JavaScript runtime pattern — REQUIRED for kind ∈ {interactive, dynamic, extension}, MUST be NULL when kind='static'. vanilla — inline <script> blocks; no module bundling. web-component — C…
kindstring–Behavioural class (Phase A 4-class taxonomy). DEFAULTS TO NULL — components without a kind are flagged 'latent Tier 3' by the page auditor and excluded from marketplace_search. static — prop…
moodarray–Universal axis — multi-value mood tags for marketplace discovery (Phase A agent-discovery).
namestring––
palettearray–Universal axis — open vocabulary palette tokens (e.g. "warm-neutrals", "monochrome", "neon-cyan-magenta"). Max 12.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
props_schemaobject–JSON Schema for props
scene_typestring–Universal axis — single-value scene/intent. Component-scoped values listed; cross-asset values live on bg-videos / site-templates.
source_codestring–Framework source code (JSX/Vue SFC/Svelte)
sourcesarray–Live Data — the data source(s) this component binds to. REQUIRED (non-empty) when kind='dynamic' (backend 422 via chk_components_kind). At render the server fetches each source and exposes the result…
tagsarray––
thumbnail_urlstring––
workspacestring––

No output schema declared.

No examples provided.

content_update_doc ~344

Update a documentation page (title, body, SEO, hierarchy). Slug is immutable — to re-path a doc, change its `parent_id` (full_path is recomputed for the doc + its whole subtree). Moving a doc under one of its own descendants is rejected (cycle → 400). Phase 11+12 gate is opt-in via dry_run/confirm_token (omit both ⇒ immediate update).

NameTypeReqDescription
bodyobject–Doc body (Tiptap JSON document). body_text (full-text search) is kept in sync automatically.
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
doc_idstringyesDoc UUID.
dry_runboolean–Preview the change without mutating and receive a confirm_token. When omitted, the change is applied immediately (legacy behaviour preserved).
is_sectionboolean–Whether this doc is a section header (groups children, no own page).
parent_idstring–Move the doc under a new parent (rebuilds full_path for the doc + descendants). Pass null/omit to leave unchanged.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
seo_descriptionstring––
seo_titlestring––
sort_ordernumber–Position among siblings (ascending).
titlestring––
workspacestring––

No output schema declared.

No examples provided.

content_update_navigation ~102

Update navigation menu items.

NameTypeReqDescription
itemsarrayyesNavigation items (nested JSON)
locationstringyesMenu location
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
workspacestring––

No output schema declared.

No examples provided.

content_update_page ~281

Update a content page (title, blocks, SEO, template). Phase 11+12 Lock 4 gate is opt-in via dry_run/confirm_token.

NameTypeReqDescription
blocksarray–Updated content blocks
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
dry_runboolean–Preview the change without mutating and receive a confirm_token. When omitted, the change is applied immediately (legacy behaviour preserved).
page_idstringyesPage ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
seo_descriptionstring––
seo_titlestring––
slugstring––
templatestring–Page template/layout. Known values: 'default' (templates/page.liquid), 'landing', 'blank', 'dynamic_landing', 'dynamic_list', 'dynamic_item', '404'. dynamic_list/dynamic_item also require collection_…
titlestring––
workspacestring––

No output schema declared.

No examples provided.

content_update_post ~441

Update a blog post (title, body, excerpt, tags, cover image, author, categories, featured, SEO).

NameTypeReqDescription
author_idstring–Author UUID
author_namestring––
bodyobject–Post body (Tiptap JSON document)
category_idsarray–Category UUIDs to assign — list, not single. Use [] to clear.
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
cover_image_urlstring–Cover image URL. Field name MUST end with `_url` to persist.
dry_runboolean–Preview the change without mutating and receive a confirm_token. When omitted, the change is applied immediately (legacy behaviour preserved).
excerptstring––
featured_image_altstring–Alt text for the cover image
is_featuredboolean–Mark as featured post (field name is `is_featured`, not `featured`)
og_image_urlstring––
post_idstringyesPost ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
related_post_idsarray––
seo_descriptionstring––
seo_titlestring––
slugstring––
tag_idsarray–Tag entity UUIDs (new system)
tagsarray–Legacy text tags
titlestring––
tldr_summarystring––
vayapin_pinsarray–VayaPin pin ids that fit this article (e.g. ['BB:TAPAS','BB:CHAMPERS']) — auto-renders a card strip at the post bottom. Omit to leave unchanged; pass [] to clear. Resolve ids via GET /content/vayapin…
workspacestring––

No output schema declared.

No examples provided.

content_update_post_status ~106

Update post status (draft, published, archived).

NameTypeReqDescription
post_idstringyesPost ID
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
statusstringyesNew status
workspacestring––

No output schema declared.

No examples provided.

content_update_settings ~338

Update content settings (site name, SEO, analytics code, primary color, custom head scripts, etc.). IMPORTANT: wrap the fields you want to change inside a top-level `settings` object — pass `{ settings: { site_name: 'X', primary_color: '#abc' } }`, NOT `{ site_name: 'X', primary_color: '#abc' }` and NOT `{ changes: { ... } }` (other tools like `form_update` use `changes:`; this tool uses `settings:`). The wrapper is required; calls without it return 422 'Field required'. Phase 11+12: defaults to dry_run=true — review the preview and call again with confirm_token to apply.

NameTypeReqDescription
confirm_tokenstring–Token from a prior dry_run call. Single-use, 7d TTL.
dry_runboolean–Preview the change without mutating. Defaults to true — call again with confirm_token to actually mutate.
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
settingsobjectyesREQUIRED top-level wrapper. The dict of settings fields to update (e.g. { site_name: 'X', primary_color: '#abc', custom_head_scripts: '<script>…</script>' }). Note: tool wrapper, NOT `changes` (which…
workspacestring––

No output schema declared.

No examples provided.

content_update_site_template ~368

Patch an existing site-template catalog row (rename, attach a preview image, toggle is_public, retag, change source bindings, flip is_single_page). Phase 11+12 gated. AUTHORING-ONLY. Auth: same as content_create_site_template (super_admin OR marketplace-authoring-brand PAT). Commonly used right after content_create_site_template to set preview_thumbnail_url from a content_upload_template_preview result, or to publish a staged draft (is_public=true). Phase 11+12 flow: dry_run=true → confirm_token → call again with confirm_token. Only the fields you pass are changed.

NameTypeReqDescription
confirm_tokenstring––
descriptionstring––
dry_runboolean––
industrystring––
is_featuredboolean––
is_publicboolean––
is_single_pageboolean––
namestring––
preview_thumbnail_urlstring––
preview_urlstring––
projectstring–Optional project — a website inside the workspace (proj_xxx) — to scope this call to. Sent as the X-Project-Id header. If omitted, the spideriq.json / SPIDERIQ_PROJECT_ID binding (or the workspace de…
replication_promptstring––
slugstringyesCatalog slug to patch.
source_client_idstring––
source_component_slugsarray––
source_nav_locationsarray––
source_page_slugsarray––
source_settings_keysarray––
tagsarray––
use_casestring––
workspacestring–Workspace name (default: "default").

No output schema declared.

No examples provided.

Common questions

What is the ai.spideriq/publish MCP server?

ai.spideriq/publish is an MCP server listed in the public MCP registry as ai.spideriq/publish. SpiderIQ Publish: content platform MCP (pages, posts, templates, components, domains, media). This page covers its npm package (@spideriq/mcp-publish).

Is the ai.spideriq/publish MCP server safe to use?

ai.spideriq/publish scores 67 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the ai.spideriq/publish MCP server expose?

ai.spideriq/publish exposes 156 tools: request_access, check_access_status, get_auth_status, logout, list_workspaces, and 151 more. Their descriptions and schemas cost roughly 36,639 tokens of context every time the server is loaded.

Is the ai.spideriq/publish MCP server still maintained?

ai.spideriq/publish is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the ai.spideriq/publish MCP server under?

ai.spideriq/publish declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.