schedule_notes_with_custom_dates
Schedule Notes With Custom Dates. Schedule notes at user-provided custom dates/times (one date per note).
| Group | Access | MCP name |
|---|---|---|
| Schedule | Irreversible | schedule_notes_with_custom_dates |
Description
The description the MCP server sends to the model, word for word. Its rules apply to every call.
Schedule notes at user-provided custom dates/times (one date per note). ONLY use this tool if: (1) the user explicitly requests specific dates/times for their notes, OR (2) the user has no recurring schedule template set up (schedule_notes returned an error about a missing template). In all other cases, prefer schedule_notes with the recurring template instead — that tool honors reserved tag lanes. Custom dates skip lane preference because you pick the time; if the chosen time matches a slot that has Buffer channels, those still replace the note's channels. All dates must be in the future. Pass dates as ISO 8601 strings (e.g. 2026-05-01T14:30:00Z). You can also set or update each note's autoRestackAfterHours at the same time (1–168 hours; null clears it), and cross-post each note to Buffer channels by passing per-note bufferChannelIds (call list_buffer_channels first to get valid IDs). You MAY create notes without asking. CRITICAL: Scheduling in WriteStack does NOT push notes to Substack. After scheduling, the user must open WriteStack and click the yellow Sync/Warning button so the Chrome extension syncs them — you cannot do this for them. BEFORE calling this tool, you MUST ask the user to confirm they understand they need to sync manually afterward, then pass userConfirmedManualSync: true. Never set that flag unless they explicitly confirmed in this conversation. IMPORTANT: Call get_schedule_capacity first. NEVER, under any circumstances, schedule more than the reported
remaining(unless unlimited=true). If the user asks to schedule more thanremaining, schedule only the firstremainingnotes, leave the rest as ready/drafts, and tell the user how many were scheduled and why the rest were not. Scheduling sets the notes' status to scheduled and assigns posting times; this integration cannot unschedule them, so the user would have to undo it in WriteStack.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
notes | object[] | Yes | Array of (noteId, scheduledAt, autoRestackAfterHours?, bufferChannelIds?) entries (1–50). Each entry can independently set its own auto-restack delay and Buffer cross-post channels. Min items 1. Max items 50. |
notes[].autoRestackAfterHours | integer | null | No | Optional auto-restack delay in hours (1–168). If set, after the note is published WriteStack will automatically restack (re-post) it the given number of hours later to boost visibility. Pass null or omit to disable auto-restack on the note. Requires the WriteStack browser extension v1.4.78 or higher to actually fire. Min 1. Max 168. |
notes[].bufferChannelIds | string[] | No | Optional array of Buffer channel IDs to cross-post this note to once it publishes on Substack. Call list_buffer_channels first to get the valid IDs — only IDs returned by that tool are accepted. Maximum 20 channels per note — requests with more are rejected. When set, WriteStack will also post the note to these Buffer channels (e.g. LinkedIn, X/Twitter, Threads) shortly after it goes live. Pass an empty array or omit to leave cross-posting unchanged; pass the channels you want to keep, since this replaces any previously set channels. Requires a connected Buffer account. Platform limits still apply: Instagram requires an image or video, and Instagram feed images must be between 4:5 and 1.91:1 aspect ratio for automatic posting (otherwise Buffer falls back to Notify Me). See https://support.buffer.com/article/622-instagrams-accepted-aspect-ratio-ranges |
notes[].noteId | string | Yes | The note ID to schedule |
notes[].scheduledAt | string | Yes | ISO 8601 datetime string (e.g. 2026-05-01T14:30:00Z). Must be in the future. |
userConfirmedManualSync | boolean | Yes | Must be true. Only set this after the user has explicitly confirmed they understand they must manually sync these notes in WriteStack (yellow Sync/Warning button) after scheduling, because this MCP cannot push them to Substack. Do not assume confirmation. |
Example call
The smallest valid request: required arguments only, with placeholder values.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "schedule_notes_with_custom_dates",
"arguments": {
"notes": [
{
"noteId": "…",
"scheduledAt": "…"
}
],
"userConfirmedManualSync": true
}
}
}Result
The result has structuredContent that matches this schema. The same data is also in content as JSON text.
| Field | Type | Required | Description |
|---|---|---|---|
assignments | object[] | Yes | |
assignments[].autoRestackAfterHours | number | null | No | |
assignments[].bufferChannelIds | string[] | No | |
assignments[].bufferChannelsOverridden | boolean | No | |
assignments[].noteId | string | Yes | |
assignments[].notePreview | string | Yes | |
assignments[].scheduledAt | string | Yes | |
assignments[].source | string | No | One of: "lane", "open", "any". |
message | string | Yes | |
requestedCount | number | Yes | |
scheduledCount | number | Yes | |
warnings | string[] | No |
Annotations
| Hint | Value |
|---|---|
readOnlyHint | false |
destructiveHint | true |
openWorldHint | false |
The full input and output JSON Schemas for every tool are in /mcp-tools.json.
schedule_notes
Schedule Notes. Schedule notes to the user's next available posting slots based on their recurring schedule template.
list_article_newsletters
List Article Newsletters. List the newsletters the user has enabled for Articles (the ones shown in WriteStack Articles; hidden newsletters are omitted).