{
  "markdown": "# PostLake: the social operating system for AI agents\n\n**Give an agent one reliable way to run social.** PostLake lets agents publish,\nschedule, monitor, discover, reply, moderate, and learn across X, LinkedIn,\nInstagram, TikTok, Facebook, Threads, Bluesky, YouTube, and Pinterest.\n\nOne connection gives an agent one normalised contract instead of nine platform\nSDKs, nine auth models, and nine incompatible result shapes. It can act with a\nhosted MCP server, a drop-in agent skill, or the REST API.\n\n> An agent can plan a campaign, validate each destination before it spends a\n> credit, publish or save a draft for approval, confirm asynchronous posts,\n> read conversations and comments, handle what needs a response, and use the\n> results to decide what to do next.\n\n- **Hosted MCP:** `https://api.postlake.dev/mcp`\n- **Documentation:** https://docs.postlake.dev\n- **Website:** https://postlake.dev\n- **Machine-readable docs:** https://postlake.dev/llms.txt\n- **MCP Registry:** `dev.postlake/social`\n- **Grok Build:** install `postlake` from the plugin marketplace, or add this repo as a marketplace source\n\n## Why agents use PostLake\n\n### One contract, every network\n\nPost once or fan out to every connected network. Each target has the same\nstate, URL, time, and error shape, so an agent handles the result once rather\nthan writing platform-specific recovery logic.\n\n### Safe to let an agent act\n\n`validate_post` provides a free dry run before publishing. Idempotency keys\nmake retries safe. Owners can require approval on an OAuth connection, which\nforces every publish request from that agent into a draft and prevents it from\napproving its own work. `confirm_post` checks an asynchronous provider after\nit accepts a post, and every action reports the individual target result rather\nthan hiding partial failure.\n\n### Not just a publishing endpoint\n\nAn agent can read a unified feed of notifications, direct messages, comments,\nand post performance. It can then reply, moderate, engage, research a topic,\nor inspect an account before it acts. Social management stays in the same\nworkflow as publishing.\n\n### Human control where it belongs\n\nOAuth makes the account owner approve a connection in the browser. `get_connect_link`\nlets an agent send them directly to that approval step. Owners can revoke an\nagent, manage channels, set agent limits, and require approval from PostLake.\nAn OAuth agent cannot create an unrestricted account key to bypass those\ncontrols, and never needs a social-network password.\n\n## Start in minutes\n\n### Hosted MCP: Cursor, Claude, ChatGPT, Gemini, Copilot, and more\n\nPostLake is a remote Streamable HTTP MCP server. Nothing is installed, run, or\nself-hosted. Add this server in your MCP client, then complete the PostLake\nOAuth approval once.\n\n```json\n{\n  \"mcpServers\": {\n    \"postlake\": {\n      \"url\": \"https://api.postlake.dev/mcp\"\n    }\n  }\n}\n```\n\n#### Cursor\n\nOpen **Settings -> Tools & MCP -> New MCP server**, add the configuration above,\nthen select **Connect** for PostLake and approve the browser sign-in.\n\n#### Claude Code\n\n```bash\nclaude mcp add --transport http postlake https://api.postlake.dev/mcp\n```\n\n#### Grok Build\n\nThis repository is a Grok Build plugin. It ships the hosted MCP server and the\nagent skills. No local process, no shell hooks, no API key in chat.\n\nAdd this repo as a marketplace, then install `postlake`:\n\n```bash\ngrok plugin marketplace add PostLake/postlake-mcp\ngrok plugin install postlake --trust\n```\n\nInside Grok Build you can also browse `/marketplace` after the official xAI\ncatalog lists it.\n\nThe MCP server is `https://api.postlake.dev/mcp` (Streamable HTTP). On first\nuse, Grok opens PostLake OAuth in the browser. The account owner approves the\nagent once and can revoke it from https://app.postlake.dev/app/agents.\n\nThis plugin calls only:\n\n- `https://api.postlake.dev` (MCP and REST)\n- `https://postlake.dev` and `https://docs.postlake.dev` (docs the skills cite)\n- `https://app.postlake.dev` (OAuth approval and dashboard)\n\n`openclaw/` in this repo is a separate OpenClaw package. Grok Build does not\nload it.\n\n#### Other MCP clients\n\nAdd `https://api.postlake.dev/mcp` as a remote MCP server. The initial OAuth\nchallenge opens the host's sign-in and approval flow. Full setup instructions:\nhttps://docs.postlake.dev/mcp\n\n### Drop-in skills: coding agents\n\nInstall PostLake's agent skills for Claude Code, Cursor, Codex, Windsurf, and\nother skills-compatible coding agents:\n\n```bash\nnpx skills add postlake/postlake-mcp --all\n```\n\nSet `POSTLAKE_API_KEY` in the agent's runtime, then ask it to handle social\nwork in plain language. The skills cover accounts, publishing, scheduling,\nmedia, inbox conversations, and analytics.\n\n### REST API: custom agent runtimes\n\nUse `https://api.postlake.dev/v1` from LangGraph, CrewAI, AutoGen, OpenAI tool\ncalls, or any HTTPS client. The REST API and MCP server work against the same\nprofiles, channels, posts, and safety rules.\n\n## What an agent can do\n\nThe MCP server currently provides 53 focused tools. They are designed around\nsocial outcomes rather than individual platform APIs.\n\n| Outcome | Tools |\n| --- | --- |\n| **Understand the account** | `whoami`, `get_credits`, `list_profiles`, `list_social_accounts`, `get_social_account`, `list_account_targets`, `check_allowance` |\n| **Connect and organise channels** | `create_profile`, `rename_profile`, `delete_profile`, `connect_account`, `get_connect_link`, `disconnect_account` |\n| **Plan and validate** | `get_platform_capabilities`, `get_publish_info`, `validate_post` |\n| **Publish and schedule** | `create_post`, `get_post`, `confirm_post`, `list_posts`, `edit_post`, `cancel_post`, `publish_draft`, `delete_post` |\n| **Media** | `upload_media`, `upload_media_batch` |\n| **Unified Inbox** | `list_notifications`, `mark_notifications_seen`, `list_conversations`, `read_conversation`, `mark_conversation_read`, `send_message`, `read_comments`, `reply_to_comment`, `hide_comment`, `delete_comment` |\n| **Discover and understand the network** | `search_posts`, `look_up_profile`, `read_profile_posts`, `search_places`, `list_own_posts`, `list_tagged_posts` |\n| **Engage and manage presence** | `engage`, `update_profile` |\n| **Commerce, events, and collaborations** | `list_products`, `list_branded_partners`, `list_ad_accounts`, `list_events`, `create_event`, `find_creators` |\n| **Measure and improve** | `get_post_analytics`, `get_analytics` |\n\nAccount-key-authenticated MCP callers can also use `create_api_key` to hand off\nto another trusted service. OAuth agents do not see or receive this tool because\nan account key would bypass their owner-set limits.\n\n## An agent workflow that does not break trust\n\n1. Call `whoami` and `list_social_accounts` to understand the account, limits,\n   connected channels, and current readiness.\n2. If a human still needs to connect a channel, call `get_connect_link` and send\n   them the short-lived approval URL. Do not ask them to hunt through a dashboard.\n3. Call `get_platform_capabilities` and `validate_post` before creating a\n   multi-network post. PostLake returns each target's exact constraint and fix.\n4. Use `create_post` to publish, schedule, or save a `draft` for human review.\n   If the owner enabled Require my approval, PostLake saves a draft even when\n   the agent does not request one. Include an idempotency key so a retry cannot\n   double-post.\n5. If a platform is processing asynchronously, call `confirm_post` to obtain\n   the provider-confirmed state without waiting for a public URL.\n6. Use `list_notifications`, `list_conversations`, and `read_comments` to see\n   what needs attention. Reply, moderate, or engage only where the platform\n   supports it.\n7. Use `get_analytics` and `get_post_analytics` to turn results into the next\n   informed action, not a spreadsheet someone has to interpret later.\n\n### Direct messages\n\nFacebook, Instagram, X, and Bluesky use one normalized conversation shape.\nAgents list threads with `list_conversations`, open one with\n`read_conversation`, finish it with `mark_conversation_read`, and reply with\n`send_message`. A message can include `content` for an attachment, shared\nmedia, or a provider payload that PostLake cannot safely flatten to text.\n\nFacebook and Instagram can deliver `message.received` webhooks. X and Bluesky\ndo not push inbound messages to PostLake, so poll `list_conversations` on a\nschedule. Sending a DM on X costs 6 credits; sending on the other supported\ninbox networks does not spend credits. Full REST and MCP guidance:\nhttps://docs.postlake.dev/messages.\n\n## Example prompts\n\n- \"Check every connected channel, then tell me what needs a human approval.\"\n- \"Draft a launch post for LinkedIn, Instagram, Threads, and TikTok. Validate\n  it, save it as a draft, and show me the platform-specific changes.\"\n- \"Read new DMs and comments. Give me concise reply drafts, but do not send\n  anything until I approve them.\"\n- \"Find what people are saying about this topic, inspect the strongest three\n  accounts, then propose a post that adds something useful.\"\n- \"Confirm yesterday's TikTok post, then compare its performance with the rest\n  of the week and recommend the next post.\"\n\n## Platform-aware, not platform-blind\n\nPostLake knows the constraints that cause social automations to fail in real\nlife: media types, image counts, caption limits, creator-level TikTok settings,\nnetwork-specific privacy options, post destinations, async publishing, and\nwhether a given connection can read, search, message, or engage.\n\nWhen a platform cannot perform an action, PostLake says so in the response.\nAn empty list never silently means a network was not read. A partial publish\ndoes not pretend every destination succeeded. Agents get the information they\nneed to recover safely.\n\n## What this repository contains\n\n| Path | Used by |\n| --- | --- |\n| `skills/` | Claude Code, Cursor, Codex, Windsurf (`npx skills add postlake/postlake-mcp --all`) |\n| `.mcp.json` | Grok Build, Claude Code plugins, Cursor plugins. Hosted MCP only. |\n| `.grok-plugin/` | Grok Build plugin manifest |\n| `.claude-plugin/` | Claude Code / Cursor plugin manifest |\n| `openclaw/` | OpenClaw only. Not part of the Grok or Claude plugin. |\n\n## Security and ownership\n\nFor interactive MCP clients, PostLake uses OAuth and PKCE. The account owner\napproves each connected agent once and can revoke it from the dashboard at any\ntime. OAuth tokens are scoped to that client and refresh automatically. Owners\ncan enforce profile, platform, daily-credit, pack-credit, and approval limits.\nAn approval-gated agent cannot publish its own drafts or mint an unrestricted\naccount API key.\n\nFor unattended services, use a PostLake API key in the service's secret store,\nnot in a prompt or source file. Keys have account-level access, so use a named\nkey per trusted service and revoke it when it is no longer needed.\n\n## Pricing\n\nEvery plan includes the MCP server and agent access. Start with 20 free credits\nper month and no card. Credits are charged when publishing or where a platform\ncharges for a particular operation. On X, `send_message` costs 6 credits; sends\non Facebook, Instagram, and Bluesky do not spend credits. See current pricing\nand credit rates at https://postlake.dev/pricing.\n\n## Documentation\n\n- MCP setup and tool reference: https://docs.postlake.dev/mcp\n- Quickstart: https://docs.postlake.dev/quickstart\n- Publishing and schedules: https://docs.postlake.dev/publishing\n- Reading, Inbox, and engagement: https://docs.postlake.dev/reading\n- API reference: https://docs.postlake.dev\n\nBuilt by [PostLake](https://postlake.dev). Issues and pull requests are welcome.\n",
  "bytes": 11639,
  "sha": "6624f84d7cf2e8e1949200f96e20da9d3c3abd5d6a42c931abebe63a84b8d654",
  "repo_slug": "postlake/postlake-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_dev_postlake_social_ec00cf95/readme"
}