Tools reference
The Phase 1 tool surface, grouped by intent. Every mutation returns the updated entity.
Discovery & context
| Tool | Description |
|---|---|
list_projects | Projects the caller can access |
get_project_brand | The project's brand (positioning, voices, audiences, topics, proof points) — read before writing or reviewing so drafts stay on-brand |
list_collections | Collections in a project (filter by type/status) |
pipeline_status | Dashboard: publications/promos by status, upcoming scheduled_for, stale items |
get_publication | Full publication incl. promos, media, reviews |
list_publications | Filter by project, collection, status |
search_content | Text search across titles and bodies |
Planning
| Tool | Description |
|---|---|
create_collection | New campaign (with dates) or section |
create_stub | Title + idea + collection → publication in stub |
batch_create_stubs | Plan a whole campaign in one call |
Writing & review — publications
| Tool | Description |
|---|---|
update_draft | Write/edit title, summary, body, notes; moves stub → draft when a body is added |
submit_for_review | draft → reviewing |
review_publication | Record a review; approve → approved, request_changes → draft with notes |
mark_published | Record canonical_url after the manual Substack publish; → published |
archive_publication | → archived |
Promos
| Tool | Description |
|---|---|
start_promoting | approved → promoting; returns the channel list + per-channel constraints from channels.config |
create_promo | Channel-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_promo | Edit 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_review | draft → reviewing |
review_promo | Approve / request changes |
publish_promo | For manual channels: record external_url, → published. Auto channels are dispatched by the system, not this tool |
Media
| Tool | Description |
|---|---|
upload_media_from_url | Fetch an image URL into Supabase Storage, create a media row |
list_media | Media for a project / publication |
attach_media | Link 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.