Content Tools

Tools for the core content types, in @spideriq/mcp-publish and @spideriq/mcp. Gated tools default to dry_run=true; all accept an optional workspace.

Pages

  • content_list_pages — list pages. Params: status, limit.

  • content_create_page — create a page. Params: title (required), slug, blocks, template, and the full SEO set: seo_title, seo_description, og_title, og_description, og_image_url, twitter_card (summary\|summary_large_image), twitter_image_url, canonical_url, robots, keywords, json_ld. robots is the indexing lever (index,follow / noindex,nofollow; unset ⇒ indexable by default). Gated.

  • content_get_page — get a page. Params: page_id (required), audit_level.

  • content_update_page — update a page. Params: page_id (required) + any page fields. Gated.

  • content_delete_page — archive a page. Params: page_id. Gated (dry_run default).

  • content_publish_page / content_unpublish_page — change publish state. Params: page_id. Gated.

  • content_duplicate_page — copy a page. Params: page_id, new_title.

  • content_export_page — self-contained export. Params: page_id, format (json|md|archive).

  • content_lock_page / content_unlock_page — edit locking.

  • content_list_page_versions / content_get_page_version / content_restore_page_version — version history (restore is gated).

  • page_insert_section — insert a marketplace section. Params: page_id, component_slug (required), props, position. Gated.

Posts, authors, tags, categories

  • content_list_posts · content_create_post · content_get_post · content_update_post · content_delete_post — post CRUD. content_create_post params include title (required), body (Tiptap), excerpt, tags, category_ids, author_id/author_name, is_featured, cover_image_url, seo_*, vayapin_pins.

  • content_publish_post / content_unpublish_post / content_update_post_status — publish state.

  • content_search_posts (query) / content_featured_posts (limit) — discovery.

  • content_list_authors · content_create_author · content_get_author · content_update_author · content_delete_author.

  • content_list_tags · content_create_tag · content_update_tag · content_delete_tag.

  • content_list_categories · content_create_category · content_update_category · content_delete_category.

Custom collections

Eleven tools. A collection defines a content type; its records are first-class pages served at /<route_base>/<record-slug>.

  • collection_list — list the project's collections. No required params.

  • collection_create — define a collection. Params: slug (required), label (required), route_base, schema_json, is_public. Enforces the max_collections cap.

  • collection_get — one collection definition. Params: slug (required).

  • collection_update — change label, route_base, schema or visibility. Params: slug (required).

  • collection_delete — delete a collection and all its records. Params: slug (required). Gated (dry_run defaults to true); the preview reports the record count that would go with it.

  • collection_record_list — a page of records, drafts included. Params: collection (required), fields, limit (1–500, default 50), offset, sort. Pass fields on a wide schema — every field of every record is returned otherwise.

  • collection_record_get — one record, by its slug. Params: collection (required), slug (required).

  • collection_record_create — one draft record. Params: collection (required), slug (required), data, seo_title, seo_description, og_image_url, sort, publish_at. Enforces max_records.

  • collection_record_bulk — 1–100 draft records in one transaction. Params: collection (required), records (required). Any validation failure rejects the whole batch.

  • collection_record_update — edit a record, by its id. Params: collection (required), record_id (required). Editing draft fields applies immediately; a status change is gated.

  • collection_record_delete — remove a record. Params: collection (required), record_id (required). Gated.

Three things that catch people

Records are read by slug and written by id. collection_record_get takes slug; collection_record_update and collection_record_delete take record_id. List first, keep the id, then write.

Unknown data fields are rejected, not ignored. Sending a key the schema does not declare fails the write, and the error names every field that is declared. This is the opposite of content_create_post, where an unrecognised key is dropped silently.

Slug rules differ by level. Collection and record slugs match ^[a-z0-9][a-z0-9-]*$ — hyphens, never underscores. Field ids inside schema_json match ^[a-z][a-z0-9_]*$ — snake_case, underscores allowed. So case-studies is a valid collection slug and case_studies is not.

Docs

  • content_docs_tree — the full docs tree.

  • content_create_doc — create a doc or section. Params: title (required), slug, body (Tiptap), parent_id.

  • content_duplicate_doc — copy a doc.

Navigation

  • content_get_navigation — read a menu. Params: location (header|footer|docs_sidebar).

  • content_update_navigation — replace a menu. Params: location, items (the full list).

Media

  • import_from_url — import an image/file (or a batch) by URL.

  • upload_local_file / upload_local_directory — upload from disk.

  • list_files — list media. Params: type, limit, offset.

  • delete_file — remove a media object. Params: key.

  • list_videos / get_video_status — video assets.

  • get_media_stats — storage usage.

Settings

  • content_get_settings — read site settings.

  • content_update_settings — update settings. Params: a settings object wrapper. Gated.

Domains

  • content_list_domains · content_add_domain · content_verify_domain · content_set_primary_domain · content_delete_domain — see Design, Deploy & Domain Tools.

Next steps

Publish