Skip to main content

Tools reference

The Phase 1 tool surface, grouped by intent. Every mutation returns the updated entity.

Discovery & context

ToolDescription
list_projectsProjects the caller can access
get_project_brandThe project's brand (positioning, voices, audiences, topics, proof points) — read before writing or reviewing so drafts stay on-brand
list_collectionsCollections in a project (filter by type/status)
pipeline_statusDashboard: publications/promos by status, upcoming scheduled_for, stale items
get_publicationFull publication incl. promos, media, reviews
list_publicationsFilter by project, collection, status
search_contentText search across titles and bodies

Planning

ToolDescription
create_collectionNew campaign (with dates) or section
create_stubTitle + idea + collection → publication in stub
batch_create_stubsPlan a whole campaign in one call

Writing & review — publications

ToolDescription
update_draftWrite/edit title, summary, body, notes; moves stub → draft when a body is added
submit_for_reviewdraft → reviewing
review_publicationRecord a review; approve → approved, request_changes → draft with notes
mark_publishedRecord canonical_url after the manual Substack publish; → published
archive_publicationarchived

Promos

ToolDescription
start_promotingapproved → promoting; returns the channel list + per-channel constraints from channels.config
create_promoChannel-ready copy for one channel; starts in draft. A publication can have several promos per channel — pass an optional internal name to tell them apart (never published)
update_promoEdit the internal name (any time before published; empty string clears it), the copy (draft only), or the scheduled_for (any time before published). Omit a field to leave it unchanged
submit_promo_for_reviewdraft → reviewing
review_promoApprove / request changes
publish_promoFor manual channels: record external_url, → published. Auto channels are dispatched by the system, not this tool

Media

ToolDescription
upload_media_from_urlFetch an image URL into Supabase Storage, create a media row
list_mediaMedia for a project / publication
attach_mediaLink media to a publication or promo (with position)

Example call

Advance a publication to review
await client.callTool("submit_for_review", {
publication: "pub_9f21",
});
Transitions are validated

Calling a tool that would skip statuses returns a structured invalid-transition error naming the current status and allowed next states. Move items one legal step at a time.