MCPMCP Tools/Post Ideas

Post Ideas

Generate, review, and publish AI-drafted post ideas.

create_post_idea

Writeideas:write

Create (or idempotently upsert) a post idea generated by the agent for a location. Use the same `externalId` on retries to avoid duplicates. `origin` decides review: channel/routine ideas land pending (inbox review); os_button ideas are immediate drafts.

Parameters
locationIdstringrequired
The location's id (from list_locations) this idea belongs to.
titlestringrequired
Short idea title.
contentstringoptional
Post caption / body.
externalIdstringrequired
Stable id from the agent — the idempotency key.
origin"channel" | "routine" | "os_button"required
Where the request came from.
type"announcement" | "offer" | "tip" | "showcase" | "story" | "event"optional
Idea type.
bucket"idea" | "holiday" | "calendar" | "series"optional
Bucket. Default "idea".
platformsstring[]optional
Target platforms, e.g. ["google","facebook"].
imageUrlstringoptional
Pre-generated image URL, if any.
imagePromptstringoptional
Prompt to generate an image later, if any.
seriesIdstringoptional
Series id, if part of a content series.
scheduledDatestringoptional
Suggested date (YYYY-MM-DD).
scheduledTimestringoptional
Suggested time (HH:mm).
generationJobIdstringoptional
Originating brain job/run id, for traceability.
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_post_idea",
    "arguments": {
      "locationId": "string",
      "title": "string",
      "externalId": "string",
      "origin": "channel"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/update_post_idea

update_post_idea

Writeideas:write

Update fields of an existing post idea (agency-scoped).

Parameters
idstringrequired
Post idea id (from list_post_ideas or get_post_idea) — accepts either the OS idea id or the claw approval id (externalId).
titlestringoptional
contentstringoptional
imageUrlstringoptional
imagePromptstringoptional
type"announcement" | "offer" | "tip" | "showcase" | "story" | "event"optional
Idea type.
status"draft" | "published" | "archived"optional
Lifecycle status. Not server-validated against this set — an unrecognized value is written as-is rather than rejected, so stick to these.
platformsstring[]optional
scheduledDatestringoptional
YYYY-MM-DD.
scheduledTimestringoptional
HH:mm.
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "update_post_idea",
    "arguments": {
      "id": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/archive_post_idea

archive_post_idea

Writeideas:write

Soft-delete (archive) a post idea. Keeps the externalId reference valid.

Parameters
idstringrequired
Post idea id (from list_post_ideas or get_post_idea) — accepts either the OS idea id or the claw approval id (externalId).
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "archive_post_idea",
    "arguments": {
      "id": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/list_post_ideas

list_post_ideas

Readideas:read

List post ideas for a location (agency-scoped). Excludes archived and rejected ideas.

Parameters
locationIdstringrequired
The location's id (from list_locations).
bucket"idea" | "holiday" | "calendar" | "series"optional
Filter by bucket.
status"draft" | "published" | "archived"optional
Filter by lifecycle status.
seriesIdstringoptional
Filter by series id.
searchstringoptional
Title contains (case-insensitive).
limitnumberoptional
Max rows to return (1–200, default 50).
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_post_ideas",
    "arguments": {
      "locationId": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/list_client_post_ideas

list_client_post_ideas

Readideas:read

List location-tied post ideas across EVERY location of a client in one call (the Posts → Ideas "All locations" view). Only the "idea" bucket (not holiday/calendar/series ideas) — matches what the rollup page shows. Excludes archived ideas; excludes rejected ones unless includeRejected is set. Each idea carries locationName for display. Use list_post_ideas instead when you already know which single location you want.

Parameters
clientIdstringrequired
The client whose locations' ideas to list (required, from list_clients).
includeRejectedbooleanoptional
Include ideas rejected during review. Defaults to false.
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_client_post_ideas",
    "arguments": {
      "clientId": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/list_brand_post_ideas

list_brand_post_ideas

Readideas:read

List brand-level post ideas for a client — ideas not tied to any single location (the Posts → Ideas "Brand Ideas" section), e.g. company-wide announcements meant to post across every channel at once. Excludes archived ideas; excludes rejected ones unless includeRejected is set.

Parameters
clientIdstringrequired
The client whose brand-level ideas to list (required, from list_clients).
includeRejectedbooleanoptional
Include ideas rejected during review. Defaults to false.
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_brand_post_ideas",
    "arguments": {
      "clientId": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/get_post_idea

get_post_idea

Readideas:read

Get a single post idea by id (agency-scoped).

Parameters
idstringrequired
Post idea id (from list_post_ideas) — accepts either the OS idea id or the claw approval id (externalId).
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_post_idea",
    "arguments": {
      "id": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/publish_post

publish_post

Writeposts:write

Publish a post idea: create a real post from it (+ platform submissions) and submit through the single OS publish pipeline, then mark the idea published. The one common path to go live — do not post elsewhere directly. Location ideas publish at location scope; brand ideas (no location) publish at their client's scope. A platform with no active connection never fails this call — the post is still created (as a draft if nothing resolved), and the response is `{ status: "no_connection", missingPlatforms, scope, postId, ideaId }` instead of the usual `{ postId, status, ideaId }` for whichever platforms couldn't resolve a connection. Compose what to tell the user from that data; do not assume the call failed just because `status` is "no_connection" — the content was saved. Likewise a post that cannot go live yet because a REQUIRED FIELD is absent (an event with no start/end date, a caption-less announcement, Instagram with no image) is saved as a draft and answers `{ status: "incomplete", missingFields, scope, postId, ideaId }`. Both gaps can appear together, in which case `status` is "no_connection" and `missingFields` rides alongside it — tell the user about BOTH in one message rather than letting them discover the second after fixing the first. In every one of these cases the content EXISTS as a draft: say what was saved, name what it needs, and point at where to fix it. Never report it as a failure and never silently retry.

Parameters
ideaIdstringrequired
Post idea id to publish (from list_post_ideas or get_post_idea) — accepts either the OS idea id or the claw approval id (externalId).
scheduledForstringoptional
Schedule for this ISO timestamp (omit to publish now).
draftbooleanoptional
Create the post as a draft without publishing.
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "publish_post",
    "arguments": {
      "ideaId": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/regenerate_post_idea

regenerate_post_idea

Writeideas:write

Rewrite an existing post idea's title/content/image prompt with a fresh angle, generated by the agency's Sydekick. Rewrites in place (same idea id) rather than creating a new one. Optionally pass a topic to steer the new angle. If the idea is already linked to a pending approval, its caption is updated there too.

Parameters
idstringrequired
Post idea id to regenerate (required, from list_post_ideas) — accepts either the OS idea id or the claw approval id (externalId).
topicstringoptional
A new topic/angle to steer the rewrite toward.
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "regenerate_post_idea",
    "arguments": {
      "id": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.

MCPMCP Tools/Post Ideas/generate_post_ideas_for_date

generate_post_ideas_for_date

Writeideas:write

Generate one new post idea for a location, targeted at a specific calendar date or observance (e.g. a holiday), via the agency's Sydekick. Creates a new draft idea in the "calendar" bucket by default, targeting google + facebook. Pass observanceName for a holiday/occasion tie-in, or hint for other creative direction.

Parameters
locationIdstringrequired
The location's id (required, from list_locations).
datestringrequired
The target date, YYYY-MM-DD (required).
observanceNamestringoptional
A holiday/occasion this idea should tie into, e.g. "National Coffee Day".
hintstringoptional
Additional creative direction for the idea.
bucket"idea" | "holiday" | "calendar" | "series"optional
Which bucket to file the idea under. Defaults to "calendar".
Example request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "generate_post_ideas_for_date",
    "arguments": {
      "locationId": "string",
      "date": "string"
    }
  }
}
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "..."
      }
    ]
  }
}

Response shape shown for illustration — the actual content depends on the tool and your data.