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.

ai.spideriq/publish

NPM · @SPIDERIQ/MCP-PUBLISH · SCANNED AUG 3

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

+13 this week 48 Trust /100
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 Security70
  • 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
  • Only part of the dependency tree could be resolved (131 of 135), so this covers what we could see, not the whole tree. 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 7 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability27
  • AI-judged instruction clarity (poor).Fail
  • 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 Management27
  • Stability observed for 8 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
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 · @spideriq/mcp-publish

# add to Claude Code
claude mcp add ai-spideriq-publish -- npx -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"]
// 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.

  • 2 Aug 26 +36
    • GHSA-f88m-g3jw-g9cj affects this package: high security
    • Provenance: unverified → fail security
    • Known CVEs: unverified → fail security
    • Install scripts: unverified → pass security
    • Malware scan: unverified → pass security
    • License: unverified → pass functional
    • Dependency health: unverified → partial functional
    • Maintenance: unverified → pass functional
    • MCP protocol: unverified → pass functional
    • Stability: unverified → 0.23 functional
    • Schema quality: unverified → poor functional
    • Licence: MIT functional
  • 1 Aug 26 −23
    • 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 +17
    • Tool coverage: unverified → 100 functional
  • 28 Jul 26 −17
    • Tool coverage: 100 → unverified functional
    • First check of Schema quality: unverified functional
  • 27 Jul 26 35

    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/@spideriq/[email protected]

Provenance none

Ecosystem: npm · Outcome: none

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-f88m-g3jw-g9cj high yes
Dependencies 131 packages

131 packages in the resolved dependency tree · 130 deprecated · 29 stale · 2 without a linked repository.

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

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.

Tool Tokens
content_update_tag ~112

Update a blog tag.

NameTypeReqDescription
descriptionstring
namestring
projectstringOptional 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
tag_idstringyesTag ID
workspacestring

No output schema declared.

No examples provided.

content_upload_bg_video ~335

Upload a bg-video MP4 (or poster image) to R2 for the marketplace bg-video catalog. Reads the file from the local filesystem, POSTs multipart to /content/bg-videos/upload, server uploads to R2 at `bg-videos/<slug>.<ext>` and returns the public URL. Allowed extensions: mp4 (video), webp/png/jpg/jpeg/gif (poster). 50 MB cap (server-enforced). Unlike component uploads, this tool does NOT touch the catalog row — call `content_create_bg_video` or `content_update_bg_video` afterwards with the returned URL in `video_url` or `poster_url`. Both fields are strict-allowlisted to R2 hosts as of 2026-05-12. Returns: {url, key, size_bytes, content_type}.

NameTypeReqDescription
extstringOverride extension (default: extension from local_path, lowercased). One of: mp4, webp, png, jpg, jpeg, gif.
local_pathstringyesAbsolute or cwd-relative path to the file on disk.
projectstringOptional 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…
slugstringyesBg-video slug — used as the R2 key stem (bg-videos/<slug>.<ext>).
workspacestringWorkspace name (default: "default").

No output schema declared.

No examples provided.

content_upload_component_preview ~371

Upload a preview thumbnail (PNG/JPG/GIF/WEBP/MP4) for a component. Reads the file from the local filesystem, sniffs the content-type from the extension, POSTs multipart to /content/components/{id}/upload-preview, and the server uploads to R2 + PATCHes preview_thumbnail_url on the row in one round-trip. Allowed extensions: png, jpg, jpeg, gif, webp, mp4. 5 MB cap (server-enforced; for larger animated MP4 use SpiderMedia upload then PATCH preview_thumbnail_url manually). CRO bug-fix bundle (2026-05-08, Antigravity report Bug 2): the API endpoint existed since Marketplace Admin Slice 1 (2026-04-28) but was not exposed through any agent-facing surface — agents using @spideriq/mcp-publish had no way to reach it. Now wired up. Returns: {url, key, size_bytes, content_type, component_id, preview_thumbnail_url}.

NameTypeReqDescription
component_idstringyesComponent ID (UUID) to attach the preview to.
extstringOverride extension (default: extension from local_path, lowercased). One of: png, jpg, jpeg, gif, webp, mp4.
local_pathstringyesAbsolute or cwd-relative path to the preview file on disk.
projectstringOptional 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…
workspacestringWorkspace name (default: "default").

No output schema declared.

No examples provided.

content_upload_site_template_preview ~327

Upload a preview image (PNG/JPG/GIF/WebP) for a site template. Reads the file from the local filesystem, POSTs multipart to /content/site-templates/{slug}/upload-preview, server uploads to R2 at `templates/<slug>.<ext>` and returns the public URL. Allowed extensions: png, jpg, jpeg, gif, webp. 5 MB cap. Unlike component uploads, this tool does NOT patch the catalog row — call `content_update_site_template` afterwards with the returned URL in `preview_thumbnail_url` (and optionally `preview_url`). Both fields are strict-allowlisted to R2 + curated preview hosts as of 2026-05-12. Returns: {url, key, size_bytes, content_type}.

NameTypeReqDescription
extstringOverride extension (default: extension from local_path, lowercased). One of: png, jpg, jpeg, gif, webp.
local_pathstringyesAbsolute or cwd-relative path to the preview file on disk.
projectstringOptional 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…
slugstringyesSite template slug — used as the R2 key stem (templates/<slug>.<ext>) AND the path segment.
workspacestringWorkspace name (default: "default").

No output schema declared.

No examples provided.

content_verify_domain ~99

Verify DNS for a custom domain (checks CNAME/A record).

NameTypeReqDescription
domainstringyesDomain to verify
projectstringOptional 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_visual_check ~611

Open a URL in a real browser and report what an end-user actually sees. Returns screenshot + DOM info + console errors + failed requests + per-assertion results. USE: verify a content page or form is rendering correctly after a publish operation; catch silent-200-with-broken-content failures that monitoring doesn't see. NOT: don't use for crawling external sites; URL allowlist restricts to spideriq.ai subdomains + tenant verified custom domains. CRITICAL ASSERTION RULE (from learnings_visual_check_assert_on_shadow_hosts.md, codified 2026-05-18): when verifying a form is rendering correctly, ALWAYS assert on `dom.shadow_hosts.includes("spideriq-form")`. DO NOT assert on `body_text_preview` for cross-origin iframe contents — the iframe body is opaque to the parent page's DOM, so field labels and button text are NOT in body_text_preview even when the form is rendering correctly. Same applies to any custom-element shadow-host: assert on its tag name in dom.shadow_hosts, not on body text. WARN: screenshot upload may be degraded if R2 isn't configured; check screenshot_url for null. Engine still works in degraded mode. PITFALLS: - Asserting on body_text_preview for embedded form/booking widgets — will FAIL even on a working form, because the iframe body is cross-origin. - Forgetting to pass viewport='mobile' when checking responsive behavior — defaults to desktop 1440x900. - Hitting non-allowlisted URLs — will return URL_NOT_WHITELISTED envelope. LIMITS: - 30s default / 60s hard-cap timeout per check - 5MB page-size cap - 20 requests/min per client

NameTypeReqDescription
expected_no_textarrayStrings that MUST NOT appear (e.g. "couldn't load this booking").
expected_textarrayStrings that MUST appear in body_text_preview. NOTE: opaque to cross-origin iframe contents — assert on dom.shadow_hosts for form/booking widgets instead.
page_urlstringyesFull URL to check. Must be on the allowlist (spideriq.ai subdomains or a tenant verified custom domain).
projectstringOptional 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…
tenant_idstringOptional. Expands the URL allowlist to that tenant's verified primary domain.
timeout_msnumberTotal navigation + wait timeout, in ms. Default 30000, hard cap 60000.
viewportstringViewport preset. desktop=1440x900, mobile=375x667. Defaults to desktop.
wait_for_textstringOptional — wait until this string appears in the DOM before snapshotting.

No output schema declared.

No examples provided.

create_project ~99

Create a new project (website) in the current workspace. Returns the new project including its `proj_` id. May return 403 with an upgrade CTA if the workspace is already at its plan's project cap (max_deployed_sites).

NameTypeReqDescription
namestringyesHuman-facing project name.
slugstringOptional URL-safe slug (auto-derived from name when omitted).
workspacestringCredentials slot (default "default").

No output schema declared.

No examples provided.

delete_file ~104

Delete a file from your SpiderMedia bucket by storage key.

NameTypeReqDescription
keystringyesFile storage key (from list_files response)
projectstringOptional 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…
workspacestringWorkspace name

No output schema declared.

No examples provided.

directory_bulk_upsert_listings ~228

Import many listings into a category in one transaction. Max 5000 per call. Primary path for IDAP dumps + SpiderMaps job outputs. Each listing accepts the same fields as directory_upsert_listing. Upsert keyed on (category, slug); missing slugs auto-generate from name. Returns {upserted, failed, affected_cities: ["city-slug-1", ...], failures}. Refreshes category counts + city_stats materialized view on success.

NameTypeReqDescription
category_slugstringyes
listingsarrayyesArray of {name, slug?, city, state?, description?, phone?, email?, website?, rating?, review_count?, address?, latitude?, longitude?, data?, status?, source_job_id?}
projectstringOptional 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.

directory_create_category ~238

Create a directory category. SEO templates accept {category}, {city}, {listing} placeholders. Example: {name: "Plumbers", seo_title_template: "Best {category} in {city} | Acme Directory"}.

NameTypeReqDescription
data_sourceobjectConfig for future SpiderMaps sync (job_type, query_filter, ...)
descriptionstring
iconstring
namestringyes
projectstringOptional 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_description_templatestringSupports {category}, {city}, {listing}
seo_title_templatestringSupports {category}, {city}, {listing}
slugstringURL slug (auto-generated from name if omitted)
sort_ordernumber
templateobjectPer-category template config JSONB
workspacestring

No output schema declared.

No examples provided.

directory_delete_category ~94

Delete a directory category and all its listings (cascade).

NameTypeReqDescription
projectstringOptional 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…
slugstringyes
workspacestring

No output schema declared.

No examples provided.

directory_delete_listing ~108

Delete a listing by (category_slug, listing_slug). Refreshes city_stats.

NameTypeReqDescription
category_slugstringyes
listing_slugstringyes
projectstringOptional 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.

directory_get_category ~97

Get a single category plus every city that has published listings in it.

NameTypeReqDescription
projectstringOptional 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…
slugstringyes
workspacestring

No output schema declared.

No examples provided.

directory_import_from_idap ~338

Populate a directory category from the tenant's IDAP data (norm_cli_*.businesses). norm_cli_* is the canonical store for every business SpiderIQ has seen for this tenant (SpiderMaps + SpiderSite + SpiderCompanyData + SpiderPeople merged). This reads directly — no scheduler, no sync pipeline, no external call. Agent re-runs this tool whenever they want to refresh the directory. Filters (all optional): category_filter matches the categories[] array, country_code exact (uppercase), city is ILIKE substring, rating_min is inclusive. limit caps at 5000 to align with bulk_upsert. Returns {upserted, failed, source_rows, affected_cities, source_schema, filter, failures?, hint?}. If the tenant has no norm_cli_* schema yet (never ran SpiderMaps), hint explains the workaround.

NameTypeReqDescription
category_filterstringMatch businesses.categories array member (e.g. "Plumber")
category_slugstringyes
citystringILIKE substring match
country_codestringISO-2 uppercase (e.g. "US")
limitnumberMax rows to import (hard cap 5000)
projectstringOptional 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…
rating_minnumberInclusive lower bound on rating
workspacestring

No output schema declared.

No examples provided.

directory_list_categories ~147

List every directory category for the current tenant (includes empty ones). Returns {categories: [{id, name, slug, description, listing_count, city_count, seo_title_template, seo_description_template, ...}], total, page, page_size}.

NameTypeReqDescription
pagenumber
page_sizenumber
projectstringOptional 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…
workspacestringWorkspace name (default: "default")

No output schema declared.

No examples provided.

directory_list_listings ~154

List directory listings. Filter by category, city, status. Use this to verify what an IDAP dump wrote, or to audit a category before publishing changes.

NameTypeReqDescription
category_slugstring
citystring
pagenumber
page_sizenumber
projectstringOptional 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…
statusstringdraft | published | archived (default published)
workspacestring

No output schema declared.

No examples provided.

directory_update_category ~158

Update category fields. Pass only the fields you want to change.

NameTypeReqDescription
data_sourceobject
descriptionstring
iconstring
namestring
projectstringOptional 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_description_templatestring
seo_title_templatestring
slugstringyes
sort_ordernumber
templateobject
workspacestring

No output schema declared.

No examples provided.

directory_upsert_listing ~288

Create or update a single listing in a category. Upsert keyed on (category, slug). For bulk work (IDAP dumps, SpiderMaps job output), use directory_bulk_upsert_listings instead — it's one call vs N.

NameTypeReqDescription
addressstring
category_slugstringyes
citystring
countrystring
dataobjectFree-form JSONB — hours, amenities, images, whatever
descriptionstring
emailstring
latitudenumber
longitudenumber
namestringyes
phonestring
projectstringOptional 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…
ratingnumber
review_countnumber
slugstringAuto-generated from name if omitted
source_job_idstringSpiderIQ job UUID that produced this listing
statestring
statusstringdraft | published | archived (default published)
websitestring
workspacestring

No output schema declared.

No examples provided.

get_api_info ~33

Get information about the SpiderIQ API and your connection.

NameTypeReqDescription
workspacestringWorkspace name (default: default)

No output schema declared.

No examples provided.

get_auth_status ~33

Check if you are authenticated and get current user info.

NameTypeReqDescription
workspacestringWorkspace name (default: default)

No output schema declared.

No examples provided.

get_media_stats ~92

Get media storage statistics (file counts, storage used, by type).

NameTypeReqDescription
projectstringOptional 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…
workspacestringWorkspace name

No output schema declared.

No examples provided.

get_queue_stats ~48

Get statistics about job queues (pending jobs, consumers, etc.).

NameTypeReqDescription
formatstringResponse format (default: json)
workspacestringWorkspace name (default: default)

No output schema declared.

No examples provided.

get_recipe ~90

Fetch the full markdown content of a SpiderPublish recipe (or rule) from @spideriq/skills. Pass the logical name from list_recipes. Returns the recipe text verbatim — paste-able into the working context, or use as a reference while implementing.

NameTypeReqDescription
namestringyesLogical name (e.g. "clone-a-site", "build-a-homepage", "claude-md")

No output schema declared.

No examples provided.

get_video_status ~101

Get processing status for a video (encoding, ready, failed).

NameTypeReqDescription
projectstringOptional 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…
video_idstringyesVideo ID
workspacestringWorkspace name

No output schema declared.

No examples provided.

health_check ~51

Check if the SpiderIQ API is healthy and responsive.

NameTypeReqDescription
api_urlstringAPI URL (default: https://spideriq.ai)
workspacestringWorkspace name (default: default)

No output schema declared.

No examples provided.

import_from_url ~171

Import file(s) from URL into your SpiderMedia bucket. Supports single URL or batch. Auto-proxies Instagram/Facebook/Twitter CDN URLs.

NameTypeReqDescription
folderstringTarget folder (e.g., "ads", "logos")
projectstringOptional 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…
urlstringSingle URL to import
urlsarrayBatch URLs to import [{url, filename?}]
use_proxybooleanForce proxy for CDN URLs (default: auto-detect)
workspacestringWorkspace name

No output schema declared.

No examples provided.

list_data_source_items ~421

Fetch live items from a registered content data source — the same door a kind='dynamic' component binds to (Live Data). Sibling of list_data_sources. Use this to PREVIEW what a dynamic component will render, or to discover a source's row shape before wiring a component's `sources`. It returns real, published, tenant-scoped records. v1 sources: posts, authors, categories, tags, changelog. (idap.* collections → 501 Phase 2; a singleton like idap.lead → 422 — those reach /lp/ templates as `lead`.) Filtering: pass `filter` keys matching the source's filterable fields (discover via list_data_sources), e.g. {"tag":"news"} on posts. `sort` is a single field with optional ":asc"/":desc" (or "-field"); `limit` (1-500) + `offset` paginate; `fields` trims the returned keys. Returns { items: [...], total, source_id }. Public read (X-Content-Domain tenant scope).

NameTypeReqDescription
fieldsarrayProject to these field ids only (default: all).
filterobjectFilter by the source's filterable fields, e.g. {"tag":"news","category":"..."}.
limitintegerMax rows (default 50).
offsetintegerPagination offset (default 0).
projectstringOptional 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…
sortstringSort field with optional ':asc'/':desc' (or '-field'), e.g. '-published_at'.
source_idstringyesRegistered source id (list_data_sources). v1: posts, authors, categories, tags, changelog.
workspacestring

No output schema declared.

No examples provided.

list_data_sources ~319

List the 9 registered content data sources that drive kind='dynamic' components (Phase D). Use this to discover the available source_id values when an agent is configuring a Dynamic block (List, Item Details, etc.). The registry includes: - 4 internal CMS collections: posts, authors, categories, tags - 4 IDAP collections: idap.countries → idap.cities → {idap.streets, idap.businesses} (hierarchical — pass --parent to walk the tree) - 1 singleton: idap.lead (per-request visitor lead context; only Item Details accepts it) Each source carries: - id (use as the source_id in DataBinding / SourceBinding) - label + description (human-readable) - parent_id (NULL for top-level; set for hierarchical children) - is_collection (false for singletons like idap.lead — only item_details binds these) - schema_json.fields[] (filterable + sortable per field) - schema_json.filters[] (named filter helpers) Public read.

NameTypeReqDescription
parent_idstringFilter to children of this source (e.g. "idap.countries" returns idap.cities).
projectstringOptional 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.

list_files ~126

List files in your SpiderMedia bucket.

NameTypeReqDescription
limitnumberMax results (default: 20)
offsetnumberOffset for pagination
projectstringOptional 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…
typestringFilter by file type (image, video, document)
workspacestringWorkspace name

No output schema declared.

No examples provided.

list_projects ~96

List the projects (websites) in the current workspace. Each project has an `id` (proj_xxx) that you pass as the optional `project` argument of any content/template tool — or bind via `spideriq use <workspace> --project <proj_>` — to scope content operations to that website.

NameTypeReqDescription
workspacestringCredentials slot (default "default") in ~/.spideriq/credentials.json.

No output schema declared.

No examples provided.

list_recipes ~97

List all SpiderPublish workflow recipes shipped in @spideriq/skills. Returns name, description, and kind (rule | recipe | config) for each manifest entry. Call get_recipe(name) to read full content. Use this when the user asks "how do I X?" — the recipe index points you at a known-good workflow markdown.

NameTypeReqDescription
kindstringFilter to a single kind (default: all kinds)

No output schema declared.

No examples provided.

list_videos ~110

List videos in your SpiderMedia bucket.

NameTypeReqDescription
limitnumberMax results (default: 20)
offsetnumberOffset for pagination
projectstringOptional 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…
workspacestringWorkspace name

No output schema declared.

No examples provided.

list_workspaces ~19

List all configured workspaces and their authentication status.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

logout ~25

Remove stored authentication credentials.

NameTypeReqDescription
workspacestringWorkspace name (default: default)

No output schema declared.

No examples provided.

marketplace_form_test_submit ~442

Test-fire a submission against a dynamic form block. NOT the production submit path — real form submissions come from a visitor's browser via POST /content/forms/{form_id}/submit (no auth). This MCP tool exists so agents can validate a form's wiring during authoring + smoke-test before publishing. When to use: - After authoring a new form block, fire a synthetic submission to confirm validation + persistence work. - After changing fields / submit_url / fallback_idap_lead, verify the new behaviour without leaving the editor. - Debugging cross-tenant isolation: pick a form_id from one tenant, attempt to write under another — server returns 404, never silently misroutes. Cross-tenant isolation: form_id is the composite "<page_uuid>:<block_uuid>". The server resolves client_id ONLY from the page row; no tenant signal is accepted in the URL or body. A form_id from a different tenant simply 404s. Validation: - Required fields must be present + non-empty. - Field type drives coercion (number → float, checkbox → bool, select/radio → must match options). - Unknown field names rejected with 400. Returns the full FormSubmitResponse: ok, submission_id (when persisted), success_action ('redirect' | 'message' | 'modal'), success_redirect_url, success_message, webhook_status (when submit_url is configured).

NameTypeReqDescription
form_idstringyesComposite form id "<page_uuid>:<block_uuid>". Both halves UUIDs.
projectstringOptional 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…
request_idstringOptional retry-idempotency token. Combined with the resolved client_id, dedups duplicate test-fires within a 24h window.
submissionobjectyesField name → value map. Validated against the form's props.fields list at the server. Extra fields rejected.
workspacestring

No output schema declared.

No examples provided.

marketplace_search ~631

Cross-table search across bg-videos / components / site-templates by AI-discovery axes (Phase D). Use this BEFORE content_list_marketplace_components / content_list_marketplace_bg_videos when the user asks for an asset by intent ("a calm cinematic background video for a luxury hotel") rather than by category. The 4 universal axes (mood / palette / brand_fit / scene_type) plus per-asset agent_meta narrow the catalog by behaviour, not by component name. Universal axes (controlled vocabulary, see marketplace_taxonomy.py): - mood: calm, energetic, bold, confident, dreamy, futuristic, urban, minimal, warm, sensory, editorial, professional, friendly, clear, technical, credible - palette: free-form (e.g. monochrome, deep-blue, cream, neutral-warm) - brand_fit: saas, agency, ecommerce, fintech, real-estate, hospitality, restaurant, wellness, healthcare, blog, publication, personal, tech, design, consulting, outdoor, lifestyle - scene_type: hero-bold, feature-grid, pricing-tiers, social-proof, faq-accordion, conversion-cta, navigation-header, navigation-footer, data-collection-form, editorial-content, team-grid (components); city-aerial, nature-landscape, abstract-motion, food-prep, people-lifestyle, tech-hardware (bg-videos); marketing-site, docs-site, directory-site, portfolio-site (site-templates) Per-asset agent_meta (use marketplace_get_help for the full vocabulary): - bg-video: pace, time_of_day, weather, has_people, aspect_ratio, has_audio, music_tempo_bpm, transcript - component: interaction_pattern, trigger_kind, placement, motion_safety, conversion_strategy - site-template: page_count, has_blog, has_pricing, has_directory, has_booking, conversion_strategy, style_aesthetic, component_set Restrict the search to specific asset types via asset_types — e.g. asset_types=["bg_video"] when you need just a hero background, ["component","site_template"] when you're planning a full page. Public read, no auth required.

NameTypeReqDescription
agent_metaobjectKey/value filters against agent_meta JSONB (e.g. {"pace":"slow","time_of_day":"night"}).
asset_typesarrayRestrict to specific marketplace tables. Omit for all 3.
brand_fitarrayIndustry-vertical fit tags.
limitintegerDefault 20.
moodarrayMood values (any-of match against the column).
palettearrayPalette tokens.
projectstringOptional 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…
scene_typestringSingle scene_type filter.
workspacestring

No output schema declared.

No examples provided.

marketplace_suggest_agent_meta ~466

Suggest mood / palette / brand_fit_tags / scene_type / agent_meta for one marketplace asset using the SpiderGate V2 inference engine. Two-step apply pattern (recommended): 1. Call `marketplace_suggest_agent_meta` to get a SuggestEnvelope with proposed values + per-key confidence (high / medium / low → action: auto_apply | review | drop). 2. Review the envelope. For values you trust, call the matching apply tool: - bg_video → set_bg_video_agent_meta - component → set_component_agent_meta - site_template → set_site_template_agent_meta The apply tools are gated (dry_run=true default + confirm_token). They mark the row `agent_meta_source='llm_inferred'` so future bulk re-runs can distinguish machine suggestions from human curation. Anti-hallucination: the engine validates proposed values against the locked Pydantic enums BEFORE returning. Off-vocab values are dropped and listed in `dropped_keys` so you can audit suggestions that didn't make the cut. Universal `palette` is intentionally open-vocabulary. Confidence-gated apply (locked thresholds 0.75 / 0.55): - action="auto_apply" → safe to apply directly (≥0.75 + vocab match) - action="review" → human eyeball recommended (0.55–0.75) - action="drop" → engine already dropped these — don't apply Cost: <$0.01 per call (Opus 4.7 via the spideriq/vision or spideriq/lead-analysis task aliases). Vision is used for bg-videos when poster_url is present; text-only otherwise. Super_admin only.

NameTypeReqDescription
asset_typestringyesWhich marketplace table to suggest for.
projectstringOptional 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…
slugstringyesAsset slug (e.g. "alpine-wildflowers", "hero-bold-default", "agency-minimal").
workspacestring

No output schema declared.

No examples provided.

page_insert_section ~529

Insert a marketplace section into an existing page. Phase 11+12 gated. When to use: - Adding a hero / pricing / FAQ block to a page the customer already has - Programmatic page assembly: list sections → preview → insert → publish position semantics: - "end" (default) — append at the end of the blocks array - "start" — prepend - "before" / "after" — relative to anchor_block_id (REQUIRED when used) - integer — explicit 0-based index, clamped to [0, len(blocks)] Phase 11+12 flow: 1. Call with dry_run=true → returns {dry_run, preview, confirm_token, expires_at} 2. Inspect the preview (insertion_index, new_block_id, blocks_count_before/after) 3. Call again with confirm_token=<token> → mutates the page and returns the new block id The inserted block is type='component' with the requested component_slug + props. The page itself is NOT republished — call content_publish_page after if needed, or content_deploy_site to push everything live.

NameTypeReqDescription
anchor_block_idstringRequired when position is "before" or "after".
audit_levelstringP5: include an `_audit` block on the success response (or `_rules` block on dry_run). 'all' (default for mutations) returns every finding so the agent sees scroll-sequence empty frames, missing requi…
component_slugstringyesMarketplace component slug (e.g. "hero-headline", "logo-cloud").
component_versionstringOptional pinned version. Omit for latest published.
confirm_tokenstringPhase 11+12: consume a prior preview token.
dry_runbooleanPhase 11+12: preview the insertion without mutating.
page_idstringyesUUID of the target page.
positionWhere to place the new block. Default: "end".
projectstringOptional 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…
propsobjectComponent props matching the component's props_schema. Falls through default_props for omitted keys.
workspacestringWorkspace name (default: "default").

No output schema declared.

No examples provided.

request_access ~120

Request access to SpiderIQ API. This sends an approval email to the admin. After calling this, use check_access_status to poll for approval. Once approved, the token is automatically saved for subsequent API calls.

NameTypeReqDescription
api_urlstringAPI URL (default: https://spideriq.ai)
emailstringyesAdmin email address (the person who will approve access)
projectstringProject name (shown in approval email)
scopesarrayRequested permission scopes (default: jobs:submit, jobs:read)

No output schema declared.

No examples provided.

set_bg_video_agent_meta ~403

Patch agent-discovery axes + agent_meta on a bg-video catalog row (super_admin). Phase 11+12 gated. Same shape as set_component_agent_meta, but BgVideoAgentMeta has different keys: - pace: slow, medium, fast (slow=meditative, medium=narrative, fast=energetic) - time_of_day: dawn, day, dusk, night - weather: clear, cloudy, rain, snow, fog, stormy (NULL = indoor / abstract) - has_people: bool (TRUE if humans visible) - aspect_ratio: 16:9, 9:16, 1:1, 4:3, 21:9 - has_audio: bool - music_tempo_bpm: 20–300 (only meaningful when has_audio=true) - transcript: ≤ 2000 chars (accessibility + agent context) The bg-video catalog is global — every tenant sees the same rows — so this is super_admin only on the server. replication_prompt also accepted for free-form curator notes. Defaults dry_run=true.

NameTypeReqDescription
agent_metaobjectBgVideoAgentMeta keys (see description).
brand_fit_tagsarray
confirm_tokenstring
dry_runbooleanDefault true.
moodarray
palettearray
projectstringOptional 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_promptstringOptional free-form curator prompt (≤ 4000 chars).
scene_typestring
slugstringyesBg-video slug (e.g. "alpine-wildflowers").
workspacestring

No output schema declared.

No examples provided.

set_component_agent_meta ~386

Patch the agent-discovery axes on a component: universal axes (mood / palette / brand_fit_tags / scene_type) + per-component agent_meta JSONB. Phase 11+12 gated. Use this to make a component findable by intent through marketplace_search. Strict enum validation at the API boundary — unknown values 422 with the accepted vocabulary listed. agent_meta keys (ComponentAgentMeta, extra="forbid"): - interaction_pattern: static, click, hover, scroll, timer, form, drag - trigger_kind: page-load, scroll-into-view, click, hover, exit-intent, timer-fixed-date, timer-elapsed, form-submit, geo-match, none - placement: above-fold, below-fold, side-rail, modal, toast, footer, header, any - motion_safety: bool (TRUE if component honours prefers-reduced-motion) - accessibility_notes: string ≤ 1000 chars - conversion_strategy: primary-cta, secondary-cta, trust, scarcity, social-proof, education, navigation, none Pass only the fields you want to change — exclude_unset semantics. Defaults dry_run=true.

NameTypeReqDescription
agent_metaobjectComponentAgentMeta keys (see description for vocabulary).
brand_fit_tagsarray
component_idstringyes
confirm_tokenstring
dry_runbooleanDefault true.
moodarray
palettearray
projectstringOptional 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…
scene_typestring
workspacestring

No output schema declared.

No examples provided.

set_component_kind ~313

Set the 4-class behavioural taxonomy on a component: kind ∈ {static, interactive, dynamic, extension}. Phase 11+12 gated. When to use: - Curating a freshly-created custom component into the right marketplace tab - Reclassifying a legacy 'static' component as 'interactive' once you add JS - Promoting a Dynamic component (kind='dynamic' requires block_type + sources to already be set on the row, or this PATCH 400s on the DB CHECK constraint) The DB CHECK constraints (migration 174) enforce kind invariants — setting kind='dynamic' on a row missing block_type returns 400 with a specific constraint message. Phase A schemas (marketplace_taxonomy.py) define the strict enum. dry_run=true (default when neither flag set) returns a preview envelope with a confirm_token; pass confirm_token=<token> to commit.

NameTypeReqDescription
component_idstringyesUUID of the component.
confirm_tokenstringConsume a prior preview token to commit.
dry_runbooleanDefault true — preview without mutating.
kindstringyes4-class behavioural taxonomy (Phase A).
projectstringOptional 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.

set_site_template_agent_meta ~319

Patch agent-discovery axes + agent_meta on a site_template catalog row (super_admin). Phase 11+12 gated. SiteTemplateAgentMeta keys: - page_count: 1–200 (number of pages the template ships with) - has_blog: bool - has_pricing: bool - has_directory: bool (programmatic SEO target) - has_booking: bool (SpiderBook integration) - conversion_strategy: same vocabulary as ComponentAgentMeta - style_aesthetic: minimal, bold, editorial, playful, premium, technical, brutalist, soft - component_set: array of component slugs the template ships with (≤ 100) The site-template catalog is global — super_admin only. Defaults dry_run=true.

NameTypeReqDescription
agent_metaobjectSiteTemplateAgentMeta keys (see description).
brand_fit_tagsarray
confirm_tokenstring
dry_runbooleanDefault true.
moodarray
palettearray
projectstringOptional 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
scene_typestring
slugstringyesSite-template slug (e.g. "saas-minimal").
workspacestring

No output schema declared.

No examples provided.

template_apply_theme ~166

Apply a pre-built theme to your site. Copies all theme templates to your template set. Phase 11+12: defaults to dry_run=true. Review the preview, then call again with confirm_token to actually apply.

NameTypeReqDescription
confirm_tokenstringToken from a prior dry_run call.
dry_runbooleanPreview the change without mutating. Default true.
projectstringOptional 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…
themestringTheme name (default: "default")
workspacestring

No output schema declared.

No examples provided.

template_delete ~183

Delete a custom template (reverts to the theme default for that path). Phase 11+12 Lock 4 gate is opt-in via dry_run/confirm_token (defaults preserve immediate-delete for backward compat).

NameTypeReqDescription
confirm_tokenstringToken from a prior dry_run call. Single-use, 7d TTL.
dry_runbooleanPreview the change without mutating and receive a confirm_token. When omitted, the change is applied immediately (legacy behaviour preserved).
pathstringyesTemplate path to delete
projectstringOptional 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.

template_get ~199

Get a Liquid template source code by path (e.g. "templates/blog.liquid"). Returns YOUR tenant's KV override if one exists, otherwise the bundled default-theme file. A 404 means neither exists for this tenant — it does NOT mean the feature is missing: the page can still render from the default theme even when this returns 404 (e.g. templates/changelog.liquid). Likewise, a large inline-CSS template here is your own prior customization, not what SpiderPublish ships.

NameTypeReqDescription
pathstringyesTemplate path (e.g. layout/theme.liquid, snippets/hero-block.liquid)
projectstringOptional 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.

template_get_config ~93

Get template config: current theme, route overrides, settings, and connected data sources.

NameTypeReqDescription
projectstringOptional 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.

template_get_help ~391

SpiderPublishREADME — agent orchestration entry-point. Returns four sections in one response: • reference — canonical schema (content types, block types, Liquid filters/tags, template structure, data sources). The exact YAML/JSON/MD payload the legacy tool returned. Includes per-block-type field maps + agent-natural alias hints (2026-05-22 usability F-19) so an agent that writes `hero.title` instead of `hero.headline` catches the mistake before publishing. • site_context — current spideriq.json binding (client_id, project_name, brand_name) walked up from cwd; null when unbound. • recipes — workflow markdowns from @spideriq/skills (build-a- homepage, add-a-component, swap-a-hero-block, clone-a-site, add-a-domain). Read the matching one BEFORE improvising. • routing — "if user asks X, call tool Y" rules. Adopt before improvising. Call this FIRST in any SpiderPublish-related conversation. The reference still comes from /api/v1/content/help so it tracks the deployed API. For the live theme's per-block-type fields, call `template_inspect_block_fields(block_type)` — it returns the canonical fields the ACTIVE theme's snippet reads + the agent-natural alias map.

NameTypeReqDescription
formatstringResponse format (default: yaml). Wraps reference + site_context + recipes + routing into one document.
projectstringOptional 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.

template_inspect_block_fields ~312

Get the canonical `data.*` fields the default theme reads for a block type, plus the agent-natural alias map. Use this BEFORE inserting a non-component block (hero, cta_section, stats_bar, comparison_table, etc.) to avoid the silent-blank-section trap from the 2026-05-22 usability report (F-9). Returns: • fields — what the snippet actually reads • _aliases — common mistakes → canonical field name (e.g. {"title": "headline", "cta_text": "cta_primary (object: {label, url})"}) • _anti_patterns — shapes that 422 (e.g. rich_text + data.content as a string is REJECTED — pass data.html instead) • _notes — free-form caveats Omit `block_type` to list all known block types. Public read, no auth.

NameTypeReqDescription
block_typestringSpecific block type to inspect (e.g. "hero", "cta_section"). Omit to list all.
formatstringResponse format (default: json).
projectstringOptional 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.

template_list ~84

List all custom Liquid templates for your site.

NameTypeReqDescription
projectstringOptional 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.