Tool reference

schedule_notes_with_custom_dates

Schedule Notes With Custom Dates. Schedule notes at user-provided custom dates/times (one date per note).

GroupAccessMCP name
ScheduleIrreversibleschedule_notes_with_custom_dates
This tool changes data in a way that cannot be undone. Confirm with the writer before calling it.

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 than remaining, schedule only the first remaining notes, 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

ArgumentTypeRequiredDescription
notesobject[]YesArray 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[].autoRestackAfterHoursinteger | nullNoOptional 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[].bufferChannelIdsstring[]NoOptional 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[].noteIdstringYesThe note ID to schedule
notes[].scheduledAtstringYesISO 8601 datetime string (e.g. 2026-05-01T14:30:00Z). Must be in the future.
userConfirmedManualSyncbooleanYesMust 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.

FieldTypeRequiredDescription
assignmentsobject[]Yes
assignments[].autoRestackAfterHoursnumber | nullNo
assignments[].bufferChannelIdsstring[]No
assignments[].bufferChannelsOverriddenbooleanNo
assignments[].noteIdstringYes
assignments[].notePreviewstringYes
assignments[].scheduledAtstringYes
assignments[].sourcestringNoOne of: "lane", "open", "any".
messagestringYes
requestedCountnumberYes
scheduledCountnumberYes
warningsstring[]No

Annotations

HintValue
readOnlyHintfalse
destructiveHinttrue
openWorldHintfalse

The full input and output JSON Schemas for every tool are in /mcp-tools.json.

On this page