mcpbeat Sign in

PostLake MCP Server

answering

PostLake is answering right now. Last checked 7 min ago. It exposes 34 tools. Last commit 14 Sep 2026.

Post, schedule, reply and measure across X, LinkedIn, Instagram, TikTok, YouTube, Threads, Bluesky

Uptime history 48 days of history
48 days agonow
100.0%
Uptime 24h
92 of 92 checks
34
Tools
read from the server
235 ms
Response time
average over 24h
1
Stars
last commit 14 Sep 2026

What changed 7

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 13 August 2026. No other catalogue keeps this.

13 Aug 3 tool descriptions were rewritten create_post, upload_media, validate_post
13 Aug 3 tools changed the parameters they ask for create_post, edit_post, validate_post
13 Aug a tool appeared upload_media_batch

Nothing serious here today

Today is the operative word: we check PostLake every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 7 min ago.

run in your terminal
claude mcp add social --transport http https://api.postlake.dev/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "social": {
      "url": "https://api.postlake.dev/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.social]
url = "https://api.postlake.dev/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "social": {
      "url": "https://api.postlake.dev/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "social": {
      "url": "https://api.postlake.dev/mcp"
    }
  }
}

This endpoint answered with an authorization challenge. The server is running, and it signs you in through your browser: there is no API key to paste.

Available tools 34

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

post
create_post
Publish (or schedule) one post to one or more connected accounts. Call validate_post first: it is free and catches caption, media and option problems before anything is queued. TikTok photo posts need JPEG or WebP (PNG is rejected), at most 1080x1920, and a title via platformOptions.tiktok.title. Say WHERE to post the simple way, `profile` (a profile name) optionally narrowed with `platforms`, or the precise way, explicit `accounts` ids. Provide at least one. Returns a normalised result with per-platform status and live URLs. Omit scheduledAt to publish now. For a local wall time (e.g. 7am UK), pass timezone (IANA, e.g. Europe/London) with a naive scheduledAt; the stored fire time is always UTC.
delete_post
Retract a post that is ALREADY LIVE, removing it from each network it went to. This is the undo: use it when a post was wrong. Reports every target separately, because a post can be gone from one network and still public on another, and networks that do not allow deletion through their API say so. Use cancel_post instead for something scheduled that has not gone out yet. Irreversible.
get_post
Fetch one post by id (post_…) as the COMPLETE record: text, any per-platform overrides, media, first comment, and every target with its state, live URL and error. Use this when you need the whole object; create_post already told you what happened, and list_posts gives you the summary rows.
get_post_analytics
Get normalised performance metrics for one post, per platform: impressions, views, likes, comments and shares, with the live URL. A platform whose analytics are not available yet says so in the cell rather than reporting zeros, because 'no data' and 'nobody saw it' are different answers. Follower counts are deliberately absent: they are an account-level number and mean nothing attached to a single post.
profile
create_profile
Create a profile: a named set of connected channels, usually one brand or client. Give the name as a person would write it, spaces and capitals included; it is slugified into the identifier you then pass as `profile` on other calls, and the response tells you what that became. Create one before connecting channels when an account is running more than one brand.
delete_profile
Delete a profile. This ALSO disconnects every channel in it, and reconnecting each one needs its owner to approve access on that network again, which you cannot do for them. So it refuses by default while channels are attached and tells you exactly which ones would go. Only pass force after a human has agreed to lose them.
update_profile
Change a connected account's own profile: display name, bio, avatar or banner. Only the fields you give are changed; the rest are left alone. Images are given as public URLs and uploaded for you. A network that does not allow this refuses and says so.
connect
connect_account
Connect a social channel using credentials its owner gives you. This only works on networks that authenticate with a credential rather than a consent screen. Bluesky is one: the owner creates an app password (Settings, Privacy and security, App passwords) and gives it to you. Everywhere else the network requires a person to approve access on its own screen and no API can do it for them, so call get_connect_link instead and hand the person the link. Never ask for someone's main account password; an app password is revocable and limited, an account password is neither. Call with just a platform to be told which fields that platform needs.
get_connect_link
Create a one-tap link the account owner can open to connect a social channel. Connecting requires a human: the networks make a person approve access on their own screen, and nothing can automate that. So when list_social_accounts is empty, or a channel shows needs_reauth, call this and give the person the link rather than telling them to find the dashboard. The link is signed, works once it is opened, and expires in 30 minutes. Optionally pass a profile to add the channel to that profile.
upload
upload_media
Prepare or upload media so it can be attached to posts. For a public asset, pass `url` and PostLake fetches it. For a file on the agent's own machine, omit `url`, pass `contentType` and preferably `sizeBytes`, then PUT the file bytes to the short-lived upload target returned by this tool. Both paths validate type/size (images ≤20MB: jpeg/png/webp/gif; videos ≤200MB: mp4/mov/webm) and produce a med_… id for create_post. Never put file bytes or base64 in the tool call. For a carousel, use upload_media_batch instead of calling this once per slide.
upload_media_batch
Upload or prepare several media items in one call (carousels). Each item is either a public `url` or a local file (`contentType` + `sizeBytes`, no url). Local items return a five-minute PUT target each; PUT the bytes from the agent's machine, then pass the med_… ids to create_post. Never put file bytes or base64 in the tool call. Max 12 items.
account
list_account_targets
List the postable destinations INSIDE one connected account, for the platforms where a single login exposes several: Facebook Pages, Pinterest boards, YouTube channels. Pass the returned id in platformOptions when publishing. Accounts on platforms without sub-destinations return none, and you post to the account itself.
analytics
get_analytics
Cross-platform analytics over a period: decisions, not just measurements. Returns a readable summary, totals, a per-platform breakdown with engagement rates, recent daily activity, top posts, best posting times from this account's own history, and recommendations with their reason and confidence. Missing data is reported honestly, never fabricated. periodDays defaults to 30.
api
create_api_key
Create a new PostLake API key. Useful when you are setting up another agent or service that needs its own credentials rather than sharing yours. The key has full access to this account and is shown ONCE, in this response. It cannot be retrieved again, so pass it on or store it immediately. Give it a name that says what will use it, because the name is all anyone has later when deciding whether a key is still needed.
cancel
cancel_post
Cancel a scheduled post so it never fires. Only works while it is still in 'scheduled' state. Once it has gone out, use delete_post to retract it from the networks instead. Cancelling is free and refunds nothing because nothing was spent.
comments
read_comments
Read the replies people left on a post you published, across every network it went to, in one normalised shape. Use it to see how a post landed, or to find what needs answering. Takes the PostLake post id (post_…), not a network id.
conversation
read_conversation
The messages in one DM thread, newest first. `fromMe` on each message tells you which side sent it, so you do not have to compare handles. Needs both the conversation id and the account it belongs to, because a conversation id only means something on one connection.
conversations
list_conversations
Direct message threads across every connected network that has them, most recent first, with who is in each, the last message and an unread count. Start here for 'any new DMs'. Cursor-paged. `problems` names any network that could not be read.
credits
get_credits
The account's credit balance: total, the monthly allowance and what is left of it, and never-expiring pack credits. Publishing spends credits on every network. X also charges for reads, engagement, replies and messages. Check this before planning a batch, so you do not start work the balance cannot finish. Returns the same figures as whoami, for when you only need the balance.
disconnect
disconnect_account
Disconnect one social channel from PostLake. Nothing already published is affected and no posts are deleted. The channel simply stops being somewhere you can publish. Reconnecting it later needs its owner to approve access on that network again, which you cannot do for them, so only disconnect when someone has actually asked you to. Takes the id from list_social_accounts.
edit
edit_post
Change a scheduled post's text and/or its fire time before it goes out. Only 'scheduled' posts can be edited and any new time must be in the future. To change where it posts, cancel it and create a new one; targets are fixed once scheduled.
engage
engage
Act on someone else's post or account: like, unlike, repost, unrepost, follow, unfollow, block, unblock, mute, unmute. One tool for all of them: pass the action. `target` is a post (an at:// uri or the post's web url) for like/repost, or a person (handle like alice.bsky.social) for follow/block/mute. Free on supported networks except X, where the write costs 6 credits. A network that does not support the action refuses and tells you what it does support, so nothing silently does nothing.
mark
mark_notifications_seen
Mark notifications as read on the networks that track that, so the next list_notifications only shows what is new. Call it after you have acted on what you read. Networks with no concept of 'seen' are skipped.
notifications
list_notifications
What happened across every connected network since you last looked: likes, replies, mentions, follows, reposts and quotes, newest first, in ONE normalised shape. This is the read to start from when asked 'what needs my attention' or 'did anyone reply'. Cursor-paged: pass the returned `cursor` back verbatim for the next page. `problems` names any network that could not be read, so an empty list never silently means 'we could not look'.
platform
get_platform_capabilities
Machine-readable capabilities per platform: character limits, media rules (required/video-only/max images/formats/sizes), whether a first comment is supported, whether publishing is async, and EVERY platformOptions field with its valid values. Call this before create_post to construct a valid post. Omit `platform` for all platforms.
posts
list_posts
List the caller's posts (most recent first), each with per-platform status. Pass state='scheduled' to see the upcoming schedule. Cursor pagination: pass `limit` (default 50, max 100) and `cursor` (the previous response's `nextCursor`).
profiles
list_profiles
List the caller's profiles: named buckets that group connected accounts, typically one per brand, client or project. The name is what you pass as `profile` when publishing, so call this first if you are not sure which one to post from. Most accounts have exactly one, called 'default'.
publish
get_publish_info
Live creator-level publish constraints for one connected account (TikTok: available privacy options, whether comments/duet/stitch are allowed, max video duration for this creator). Use it to pick a valid privacyLevel before posting to TikTok.
rename
rename_profile
Rename a profile. The channels and posts inside it are untouched, but the identifier is re-derived from the new name, so anything holding the old `profile` string stops resolving. The response says whether the identifier actually moved, so you only have to update references when it did.
reply
reply_to_comment
Reply to a comment someone left, by that comment's id (take it from read_comments). This is how an agent answers people, as opposed to create_post which publishes something new. Free on supported networks except X, where the write costs 6 credits. A network that cannot do this refuses and says so.
send
send_message
Send a direct message. Give `conversation` to reply in an existing thread, or `to` (a handle) to start a new one. You do not need to find or create the conversation first. Links and mentions in the text are made real, not left as plain text. Free on supported networks except X, where the write costs 6 credits.
social
list_social_accounts
List every connected social account with its id, profile, platform, handle and connection status. Call this before publishing: the ids are what create_post takes in `accounts`. If none are connected, use get_connect_link for OAuth networks or connect_account for supported credential-based networks. A status of 'needs_reauth' means the owner must reconnect that channel.
validate
validate_post
Dry-run a post WITHOUT publishing: runs the exact validation create_post would run (media rules, per-platform character limits, option values, whether a first comment can be posted at all) and returns per-target errors and warnings. Call this before create_post, especially for scheduled posts and TikTok photo carousels (JPEG/WebP only, max 1080×1920, PNG rejected). It is free.
whoami
whoami
Who you are and what you are allowed to do. Returns the account, the channels connected right now, the credit balance, and, when an agent is calling, ITS OWN limits: which profiles and networks it may post to, its daily cap, how many posts it has already made today and how many remain. Call this first: it is how you plan work you can actually complete, instead of finding the boundary by being refused. Limits are set by the account owner in the dashboard and cannot be changed from here.

Endpoints

URLTransportStateLatencyChecked
https://api.postlake.dev/mcp streamable-http sign-in 229 ms 7 min ago

Alternatives to PostLake

same job, measured the same way
Postnext
by postnext

Schedule, publish and track posts on X, Instagram, LinkedIn, TikTok, YouTube, Threads and Bluesky.

answering
AdaptlyPost
by adaptlypost

Schedule and post to Instagram, TikTok, YouTube, X, Facebook, LinkedIn, Pinterest, Threads, Bluesky.

18 tools answering
Postmcp MCP Server
by postmcp

Publish and schedule posts to LinkedIn, X, Facebook, Instagram, Threads, Bluesky and YouTube Shorts.

31 installs/wk local only
Schedulin
by schedulin

Schedule, publish, and analyze social posts across TikTok, Instagram, YouTube, X, LinkedIn + 5 more.

answering
PostPulse
by post-pulse

Social media scheduler for Instagram, Facebook, YouTube, TikTok, LinkedIn, X, Bluesky, and Telegram.

answering
ViralNote
by viralnote

Schedule, publish, and analyze social posts on TikTok, Instagram, YouTube, X, Threads, LinkedIn.

58 installs/wk answering
Sprkly
by sprkly

Schedule, publish and track social posts across TikTok, Instagram, Threads and YouTube Shorts.

18 tools answering
Postrippl
by postrippl

Schedule social media posts to 10 platforms: Instagram, TikTok, X, YouTube, LinkedIn, and more

answering

PostLake — questions

Answers built from our own checks of this server.

What can PostLake do?
It exposes 34 tools, read directly from the server on our last check. Among them: cancel_post, connect_account, create_api_key, create_post, create_profile, delete_post and 28 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is PostLake mostly used for?
Its tools cluster around post, profile and upload. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is PostLake working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 92 of 92 checks got a reply (100.0%), average response time 235 ms. The bar chart above shows every period we have measured.
How do I connect PostLake?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address. You sign in through your browser once and the client keeps the session: no key to copy, and it refuses anonymous clients.
How do you sign in to PostLake?
No API key is involved. PostLake answers our knock with an OAuth challenge, so you authorise it once in your browser and the client keeps the session. That is also why we see no tool list: it will not describe itself to an anonymous client, and that is the server working as intended, not a fault.
How fast is PostLake?
It answers our handshake in 235 ms on average, which is faster than 60% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is PostLake open source?
Yes — it is published under the MIT licence and 1 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.