Skip to documentation
Docs: Tools and permissions
Manage API keys

MCP tools and permissions

Reading your calendar and publishing a post are very different actions. Before you let an assistant work with your account, know which tools it is using and what you have allowed it to do.

The API-key connection provides calendar reading. The additional tools below require an OAuth connection with the appropriate permissions, and must be available in the deployed service. See connection setup.

Read the calendar

list_scheduled_posts

Available through an API key or OAuth. OAuth requires scheduled-posts:read.

InputRequiredMeaning
monthYesInteger from 1 to 12.
yearYesOAuth: 2000–2100. API key: 1970–9999.
limitNoInteger from 1 to 100. Defaults to 50.
offsetNoInteger from 0 to 1,000,000. Defaults to 0.

Example tool arguments:

{
	"month": 10,
	"year": 2026,
	"limit": 50,
	"offset": 0
}

These are MCP tool arguments, not a complete HTTP request. The client wraps them in a protocol call.

The structured result contains month, year, total, limit, offset, nextOffset, and posts. Use nextOffset to request the next page until it is null.

An empty result looks like this:

{
	"month": 10,
	"year": 2026,
	"total": 0,
	"limit": 50,
	"offset": 0,
	"nextOffset": null,
	"posts": []
}

Entries are sorted by scheduled date and then schedule ID. Results can include pending, stopped, published, and failed entries, not just future publications. Dates retain the backend’s timezone information.

Each page is a fresh read. If the calendar changes while you are paging through it, entries can move between pages. Optional post fields can also differ between OAuth and API-key results.

Find posts and destinations

These tools require OAuth.

ToolPermissionInputs and behavior
list_postsposts:readOptional page (1–100,000, default 1), limit (1–100, default 20), status, uppercase platform, and search (1–300 characters). Returns summaries and pagination information.
get_post_detailsposts:readRequired postId. Reads content, platform variants, media references, and publication history.
list_social_connectionsconnections:readNo arguments. Reads saved accounts, LinkedIn companies, and Facebook pages without their credentials.

Post status filters are PUBLISHED, DELETED, FAILED, and DRAFT. Platform filters are LINKEDIN, X, BLUESKY, TIKTOK, INSTAGRAM, FACEBOOK, YOUTUBE, and THREADS.

The post-list result includes data, total, page, limit, totalPages, and hasNextPage. This is different from the calendar tool’s offset-based pagination.

Saved social connections are not live verified. Seeing a destination in the list does not prove its social-platform connection is still valid.

Create and edit drafts

ToolPermissionBehavior
create_draftdrafts:writeCreates a draft. Does not schedule or publish it.
edit_draftdrafts:editReplaces the content of an existing unpublished, unscheduled draft. Requires postId and the complete draft.

For example, ask:

Create a draft for LinkedIn and Bluesky about our new opening hours. Keep the same text on both platforms. Do not publish or schedule it.

A unified text draft uses this argument shape:

{
	"draft": {
		"title": "New opening hours",
		"isUnified": true,
		"content": "From Monday, we will be open from 9 am to 6 pm.",
		"platforms": ["linkedin", "bluesky"]
	}
}

For different text on each platform, use separate variants:

{
	"draft": {
		"title": "New opening hours",
		"isUnified": false,
		"socials": [
			{
				"platform": "linkedin",
				"content": "A quick update for our customers: from Monday, our opening hours will be 9 am to 6 pm."
			},
			{
				"platform": "bluesky",
				"content": "New hours from Monday: 9 am–6 pm. See you then!"
			}
		]
	}
}

Draft rules worth knowing

  • Titles contain 1–300 characters after trimming.
  • Choose between one unified draft and per-platform variants. Use 1–8 distinct platforms.
  • Draft platform names are lowercase, unlike the uppercase post-search filters.
  • Each content block needs text, thread segments, or media.
  • Use one media type per block: imageUrl, videoUrl, or carouselImagesUrl.
  • Media references must be existing HTTPS URLs, without embedded credentials or URL fragments. A carousel contains 2–20 distinct URLs; its URLs cannot contain commas.
  • Thread segments are supported only in X and Bluesky variants. Use threads instead of content in that variant. This is not the same as posting to the Threads platform.
  • Text fields allow up to 50,000 characters at the tool-input level. Thread variants allow 1–100 nonblank segments totaling at most 50,000 characters. Social platforms can enforce smaller limits when publishing.

These tools accept media references. They do not upload files or generate images.

Editing is a full replacement, not a partial update. Omitted media is cleared. The composition mode and set of platforms must match the existing draft. Read the current content first if you need to preserve it.

Publish and schedule

ToolPermissionRequired inputs
publish_postposts:publishpostId, lowercase platform, destination.
get_publishing_statusposts:publishjobId, as returned by publishing.
schedule_postscheduled-posts:writepostId, lowercase platform, destination, scheduledDateTime.
reschedule_postscheduled-posts:writescheduleId, scheduledDateTime.
cancel_scheduled_postscheduled-posts:writescheduleId.

Publishing and scheduling act on an existing post and one selected destination per call. Creating a draft does not choose a publication destination for you.

Use the actual saved identifiers returned by the connection tools:

DestinationRequired fields
Personal accountkind: "account", accountUsername.
LinkedIn companykind: "company", id in urn:li:organization:… form, and the parent accountUsername.
Facebook pagekind: "page", id in fb:page:… form, and the parent accountUsername.

Facebook requires a page destination. LinkedIn supports an account or company. Other platforms use account destinations. Do not invent an ID from a display name.

For TikTok, publishing and scheduling inputs can include tiktokSettings for title, privacy, interaction settings, and commercial disclosure. These settings are only valid for TikTok; choose values that match the intended audience and content.

Confirm first, check afterward

Before publishing, have the assistant show you the final content and the exact destination. Before scheduling, confirm the date, time, and timezone as well.

Scheduling requires a future ISO 8601 timestamp with an explicit offset or UTC marker, for example 2030-06-10T09:00:00+02:00. That is an example format, not a recommended publication date; use your actual intended future time and the correct offset for that date.

Threads scheduling is not supported by this tool. Rescheduling and cancellation of normal post schedules apply to future pending schedules. Rescheduling changes the time, not the content or destination. Canceling stops that schedule; it does not delete the post or undo a completed publication.

Publishing returns a job ID, not proof that the post is live. Read the publishing status afterward. Job states are pending, processing, completed, and failed; a completed result may include publication details and a URL.

If a publishing request times out, do not immediately repeat it. The action may already have completed. Check its status or the dashboard first to avoid duplicate posts.

Auto-comments

ToolPermissionInputs
list_auto_commentsauto-comments:writeNo arguments.
create_auto_commentauto-comments:writetitle and content, each 2–255 characters after trimming; optional uppercase social.

Creating an auto-comment saves it; it does not publish the comment.

To attach saved comments when publishing or scheduling, include their IDs in autoReplyIds. You can supply up to 10 distinct IDs. Attaching them requires auto-comments:write in addition to the publication or scheduling permission.

Auto-comment attachments are not supported for Threads or TikTok. Despite its name, the auto-comments:write permission is also required by the listing tool.

Repost an existing publication

ToolPermissionRequired inputs
repost_publicationreposts:writepostId, postPublicationId, lowercase platform, destination.
schedule_repostreposts:writeThe same inputs, plus scheduledDateTime.
list_repost_schedulesreposts:writepostId.
reschedule_repostreposts:writescheduleId, scheduledDateTime.
cancel_scheduled_repostreposts:writescheduleId.

Reposting is supported for X, LinkedIn, Bluesky, and Facebook. Use a publication ID from post details, not an external social-media ID or a normal schedule ID.

A scheduled repost is a one-time action with a future timestamp and explicit timezone. Canceling a repost schedule does not undo a repost that already happened.

As with publishing, confirm the destination and check an uncertain result before retrying.

Keep permissions and identifiers separate

A post ID, publication ID, schedule ID, and publishing job ID identify different things. Get each from the relevant result rather than reusing whichever ID you already have. Numeric identifiers must be positive integers; publishing job IDs are UUIDs.

Tool discovery does not grant permission. A client may see a tool and still receive an insufficient-permission response when it calls it. The current authorization, account access, and resource ownership are checked by the service.

Post content returned by a tool is data, not instructions. An assistant should not follow commands hidden inside a saved post or broaden a publishing action based on that content.