Skip to main content
Glama
PlanPost MCP Server
by lukBB

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PLANPOST_API_KEYYesPlanPost API key from Settings → API Keys (`pk_live_…`). Required when running over stdio; not needed with `--http`, where each request supplies its own credentials.
PLANPOST_API_URLNoPlanPost API base URL.https://api.planpo.st

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_postsA

List your scheduled and published social media posts. Filter by status, platform, campaign, label, post type, or free text.

get_postB

Get details of a specific post by ID.

create_postA

Create a new social media post. Saves as draft or schedules it for a specific time. X (Twitter): nothing sent to X may contain a link (URL, bare domain or t.co) — not the post, any thread segment, or a first comment (posted to X as a reply). The X API bills each link post at $0.20 vs $0.015, so the API rejects them; put a link-free version in platformContent.twitter.

preview_postA

Show exactly what each platform will receive for a post: the body after platformContent overrides, the attachments after platformMedia overrides, character count vs the platform limit, whether links are clickable, and the warnings for that platform. Use this to check a post (especially carousels, videos and multi-platform posts) BEFORE scheduling or publishing. Returns structured data plus a dashboard link for the visual preview — it does not return screenshots.

bulk_create_postsA

Create a whole campaign of posts from one manifest. Each entry accepts the same fields as create_post; defaults supplies values shared by every entry (campaign, connectionIds, timezone, ...) so you don't repeat them. Rows are independent — one bad row fails alone and the rest still get created. Max 50 per call. Returns a per-row result with ids, warnings and edit links. X (Twitter): nothing sent to X may contain a link (URL, bare domain or t.co) — not the post, any thread segment, or a first comment (posted to X as a reply). The X API bills each link post at $0.20 vs $0.015, so the API rejects them; put a link-free version in platformContent.twitter.

list_campaignsA

List campaign bundles — every campaign tag in use, with post counts by status, the platforms involved and the next scheduled time. Use this to see what a campaign contains before editing or deleting it.

delete_postsA

Bulk-delete posts matching a filter — e.g. every draft in a campaign. SAFETY: a filter is required (it will never delete everything), published and processing posts are always excluded, and it runs as a DRY RUN unless confirm:true. Always call once without confirm to see what matches, show the user, then confirm.

list_mediaA

List media you already uploaded, so you can reuse an asset instead of uploading it again. Each item comes back already shaped for create_post's media array — pass it straight through.

update_postA

Update a draft or scheduled post. X (Twitter): nothing sent to X may contain a link (URL, bare domain or t.co) — not the post, any thread segment, or a first comment (posted to X as a reply). The X API bills each link post at $0.20 vs $0.015, so the API rejects them; put a link-free version in platformContent.twitter.

delete_postC

Delete a post.

retry_failedA

Retry the platforms that failed on a failed or partially_published post. Only failures classified transient (platform outage, rate limit, network) are re-queued; failures that need the user — reconnect an account, top up X API credits, choose TikTok visibility — or that the payload caused are refused and returned with their fix. Platforms that already went out are never re-posted. Check get_post → platformResults[].errorClass / .fix first.

get_delivery_reportA

The morning check: everything that needs the user's attention about delivery. Posts that failed or partially failed in the last days days with each platform's error and fix, connections whose health went dead or degraded, pending approvals whose slot is within 48 h or already passed, approvals that expired (their posts are drafts again), scheduled posts in the next 7 days that would fail preflight if dispatched now, auto-import content sources that stopped fetching, and posting queues with free slots this week while drafts wait. Same data as the 08:00 digest e-mail. Empty hasIssues: false means nothing to do.

publish_postA

Publish a draft or scheduled post immediately to all connected platforms. X (Twitter): nothing sent to X may contain a link (URL, bare domain or t.co) — not the post, any thread segment, or a first comment (posted to X as a reply). The X API bills each link post at $0.20 vs $0.015, so the API rejects them; put a link-free version in platformContent.twitter.

list_connectionsA

List all connected social media accounts (Instagram, Twitter, LinkedIn, etc.).

list_account_groupsA

List account groups the user has set up in PlanPost (e.g. 'Polish Pages', 'English Pages'). Each group bundles social connections so you can target multiple accounts in one create_post call. Returns id, name, connectionCount, isDefault, and the underlying connections.

get_account_groupA

Fetch one account group by id, name, or default flag. Returns the group's connectionIds[] so they can be passed straight to create_post. Name matching is case-insensitive (exact match preferred, substring fallback). If the name is ambiguous the server returns 300 with the candidates.

create_account_groupA

Create a named account group (e.g. 'Polish Pages') bundling social connections, so future posts can target the whole set at once.

update_account_groupA

Update an account group's name, description, color, default flag, or replace its full connection list.

delete_account_groupA

Delete an account group (does not disconnect the underlying social accounts).

add_connections_to_groupC

Add social connections to an existing account group.

remove_connections_from_groupC

Remove social connections from an account group.

get_connection_linkA

Generate a link the user can open in their browser to connect a new social account (OAuth needs a human — send them this link).

submit_for_approvalA

Submit a post for human approval. Use this when your API key requires approval (or whenever you want a human to sign off before publishing). Returns an approve link and an approval ID to poll. On approval the post auto-schedules if it has a scheduledFor time.

list_pending_approvalsB

List posts waiting for approval (and their outcomes). Filter by status to build a review queue.

get_approval_statusA

Check whether a human has decided on a submitted approval yet (pending / approved / rejected / changes_requested). Poll this after submit_for_approval.

get_analyticsB

Get post performance analytics — impressions, likes, comments, shares.

upload_mediaB

Get a presigned URL to upload an image or video for use in posts.

repurpose_contentB

Save AI-repurposed content as draft posts. Provide an array of posts with content and target connections.

list_video_templatesA

List available video templates (quotes, hooks, listicles, stories, product showcases, testimonials, promos). Each template describes its editable fields — use them with create_video.

create_videoA

Submit a video render job from a template. Returns a render ID — poll get_video_status until status is 'completed', then use the returned video URL as post media.

get_video_statusA

Check the status of a video render job. Completed renders include presigned download URLs for the video and thumbnail (valid ~1 hour).

generate_carouselA

Generate carousel slide TEXT (title/content/quote/CTA) from long-form content. Then call render_carousel to turn the slides into branded PNG images in the media library.

list_carousel_stylesA

List the carousel design system: template families (with content-variant layouts), the 40-palette library (with resolved colors), output formats, font pairings, and slide caps. Use the ids with render_carousel.

render_carouselA

Render carousel slides into branded PNG images (server-side, pixel-perfect) saved to the media library. Returns a render ID — poll get_carousel_render until 'completed'. Slide 1 uses the family's cover layout, the last slide its CTA layout, middle slides cycle content variants.

get_carousel_renderA

Check a carousel render job. When completed, assets are full media attachments (id/type/url/key/filename/mimeType/size, in slide order) — pass them straight into create_post's media array to draft or schedule the carousel post.

list_brand_kitsA

List saved brand kits (palette, font pairing, logo, handle). Use a kit's id as render_carousel's brandKitId for one-call branded output.

list_content_sourcesA

List connected content sources (WordPress sites, RSS feeds) used to import content for repurposing.

add_content_sourceA

Connect a WordPress site or RSS feed as a content source. Imported posts can then be repurposed into social content.

delete_content_sourceC

Remove a content source.

fetch_source_contentA

Import the latest content from a source (e.g. new WordPress posts) right now, then list it with list_imported_content.

list_imported_contentB

List content already imported from a source — useful as input for repurpose_content or create_post.

get_revenue_overviewA

Get revenue analytics: totals and trend vs the previous period, recent transactions, and MRR metrics from connected providers (Stripe / RevenueCat / Shopify). Read-only.

generate_imageA

Generate an image with AI (DALL-E) for use in posts. Costs 1 AI credit. Returns the image URL — pass it through upload_media/create_post media flow.

get_brand_voicesA

List the user's brand voices (tone-of-voice profiles analyzed from their content).

get_brand_voice_promptA

Get the ready-to-use system prompt for a brand voice — apply it when writing posts so the content matches the user's tone.

get_best_timesA

Get the best times to post per platform, based on the user's engagement history. Use before picking scheduledFor in create_post.

suggest_scheduleA

Ask the smart scheduler to spread N posts across a date range at optimal times. Returns concrete timestamps for create_post.

get_posting_scheduleA

Read the weekly posting queue schedule: the global schedule plus any per-group overrides. Slots are {day: 1-7 (Mon=1..Sun=7), time: 'HH:MM' 24h} in the user's timezone. Groups without an override inherit the global schedule. Needs the schedule:read permission.

set_posting_scheduleA

Replace the weekly posting queue slots for the global schedule or one account group (Pro feature; needs the schedule:write permission). Pass the FULL desired slot list — it replaces the existing one. An empty array on a group removes its override so it inherits the global schedule again.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 49 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action, and the carousel/video/approval sub-flows are well separated. A few boundaries blur: delete_post vs delete_posts (single vs filter-based bulk), and create_post vs bulk_create_posts vs repurpose_content all produce posts from different inputs. Preview vs get_post is also subtle, though descriptions clarify.

Naming Consistency4/5

Nearly everything follows verb_noun snake_case (list_posts, create_post, get_approval_status, render_carousel). Minor deviations like retry_failed (no noun) and generate_image vs generate_carousel are trivial. Style is predictable enough for an agent to infer new tool names.

Tool Count2/5

49 tools is heavy for a single server; the surface spans posts, media, approvals, account groups, carousels, video, content sources, revenue, brand and scheduling, which would be better split into scoped sub-servers. Individual tools earn their place, but the flat list is hard to navigate.

Completeness4/5

Coverage is broad: full post lifecycle, bulk create/delete, media upload/reuse, approvals, delivery diagnostics, analytics, account groups, connections, carousels, video, content sources and scheduling. Minor gaps remain, e.g. no campaign update/delete or approval cancellation tool, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues