Guides
Hosted MCP server
Connect ChatGPT, Claude, and other MCP clients to your Postiv workspace: same API key, same scopes, interactive widgets in hosts that support MCP Apps.
The hosted MCP server exposes the same workspace automation surface as the Public API. It uses the same organization API key, the same scopes, and the same server-side services behind the public endpoints. The endpoint is https://postiv.ai/mcp (https://postiv.ai/api/mcp/mcp also works).
In hosts that support MCP Apps, such as claude.ai, tools render interactive widgets instead of plain text: a post editor card, an image preview, a carousel pager, and inspiration cards.
Want the illustrated setup first? Follow the step-by-step guide to connect Claude to LinkedIn, then return here for client-specific authentication and the complete tool reference.
Available tools
| Tool | Scope | Description |
|---|---|---|
| get_workspace | workspace:read | Read the connected workspace (name, slug) and which scopes this key has. Call first. |
| submit_feedback | feedback:write | Send explicit feedback about Postiv or Bob to the product team. |
| add_knowledge | knowledge:write | Add a text document to the workspace knowledge base for retrieval by Postiv's AI. |
| search_knowledge | knowledge:read | Semantically search the workspace knowledge base before drafting, to ground content in real facts. |
| search_templates | posts:read | Search Postiv's proven post-writing templates (global + workspace custom). |
| search_inspiration | inspiration:read | Search the moderated LinkedIn inspiration library by semantic query and/or exact filters; renders as a swipeable carousel in widget-capable hosts. |
| list_linkedin_profiles | profiles:read | List connected LinkedIn profiles/company pages and their integration ids. |
| get_writing_style | profiles:read | Read the trained writing style for one profile (voice, structure, examples). |
| list_content_plans | plans:read | List Bob's weekly content plans for a profile, with pillar distribution. |
| get_content_plan_item | plans:read | Read one plan item in full detail, including saved source material/research. |
| get_bob_planning_settings | plans:read | Read Bob's status, cadence, pillar count, and current-week plan state for a profile. |
| update_bob_planning_settings | plans:write | Update Bob's posting cadence for a profile. |
| list_pillars | plans:read | List a profile's recurring content pillars (summary only). |
| get_pillar | plans:read | Read one pillar's full content and 30-day performance. |
| list_team_briefs | team_briefs:read | List team writing assignments and per-member progress. |
| get_team_brief | team_briefs:read | Read one team brief's full instructions, deadline, and assignment progress. |
| create_team_brief | team_briefs:write | Create a team writing assignment for every current workspace member (owners/admins only). |
| create_pillar | plans:write | Create a recurring content pillar for one LinkedIn profile. |
| update_pillar | plans:write | Update an active content pillar while preserving system-owned learnings. |
| archive_pillar | plans:write | Soft-delete a pillar from future weekly planning. |
| list_pending_approvals | approvals:read | List exact scheduled-post copy, refreshed media, carousel PDF, author/profile details, and approval history awaiting the API-key actor's decision. |
| approve_scheduled_post | approvals:write | Record the API-key actor's approval without bypassing other approvers. |
| request_approval_changes | approvals:write | Return a pending post to its author with revision feedback. |
| deny_scheduled_post | approvals:write | Deny an assigned scheduled post and prevent publishing. |
| create_scratchpad_item | scratchpad:write | Save a quick note/url/image into the org's shared scratchpad. |
| list_scratchpad_items | scratchpad:read | List all live scratchpad items. |
| update_scratchpad_item | scratchpad:write | Edit a scratchpad item's content and/or status. |
| delete_scratchpad_item | scratchpad:write | Permanently delete a scratchpad item. |
| promote_scratchpad_item | scratchpad:write, knowledge:write | Promote a scrap into a permanent org knowledge asset (deletes the scrap on success). |
| list_engage_posts | engage:read | Live-sync and list YOUR LinkedIn posts with Engage inbox comment activity. |
| get_engage_thread | engage:read | Live-refresh and load the full comment thread for one of YOUR posts. |
| sync_engage_comments | engage:read | Explicitly live-sync Engage comments from LinkedIn for recent posts. |
| reply_to_engage_comment | engage:write | Post a LinkedIn reply to a comment on one of YOUR posts. |
| dismiss_engage_comment | engage:write | Mark a comment as no-reply-needed in the Engage inbox (local only). |
| react_to_engage_comment | engage:write | Add, replace, or clear a LinkedIn reaction on an Engage inbox comment. |
| suggest_engage_reply | engage:write | Draft a short AI reply suggestion (does not post). |
| get_comment_plug_config | profiles:read | Read default Comment Plug settings for one or all profiles. |
| set_comment_plug_config | posts:schedule | Set a profile's default Comment Plug (auto first-comment) used by future scheduled posts. |
| create_post | posts:write | Create a LinkedIn post draft; humanizer is opt-in (default false) and hook-lint always runs before saving. |
| list_posts | posts:read | List posts filtered by status/profile/search, with 300-char content previews. |
| get_post | posts:read | Read one post's full current content and status. |
| update_post | posts:write | Update a draft's title/content/profile; fails on scheduled/published posts. |
| schedule_post | posts:schedule | Queue a draft for publishing (>=2min in the future); waits for approvers if configured. Also accepts mediaSource with exactly one url, assetId, imageId, or carouselId for PDF/video/image/carousel/infographic selection through the existing publish queue. Do not combine mediaSource with mediaType/mediaUrls/carouselId. |
| unschedule_post | posts:schedule | Cancel a scheduled post, returning it to draft. |
| reschedule_post | posts:schedule | Move a scheduled post to a new time. |
| generate_post_image | images:write | Generate a brand-new AI image for a post via style preset or freeform prompt (MCP-ONLY: no REST equivalent exists). Returns a 7-day signed URL + markdown image line to relay. |
| edit_post_image | images:write | Edit an existing image with a natural-language instruction, stacking a new version. |
| create_carousel | posts:write | Create a multi-slide carousel from a structured content outline (content only, never HTML). |
| create_infographic | posts:write | Create a single-canvas infographic (content only, never HTML), publishes as an image post. |
| render_carousel | posts:write | Render slide PNGs + PDF (carousel) or canvas PNG (infographic) for the latest version; idempotent. |
| get_carousel | posts:read | Read one carousel/infographic's slide summaries and render/PDF readiness. |
| edit_carousel_slide | posts:write | Edit one slide (or the infographic canvas) with a natural-language instruction. |
| list_analytics_accounts | analytics:read | List tracked LinkedIn analytics accounts, each mapping to one profile. |
| get_analytics_summary | analytics:read | Cached KPI totals for one account or 'all', over a period or date range. |
| get_performance_overview | analytics:read | Cached day-by-day impressions/engagements time series. |
| get_top_posts | analytics:read | Top posts by date/engagements/impressions or outlier-vs-baseline sorts. |
| get_post_analytics | analytics:read | Cached analytics for one specific post. |
| list_media | posts:read | Browse reusable images, PDFs, videos, carousels, and infographics. GET /api/public/media supports type, query, limit, and offset. Results include image attachInput, scheduleInput for all formats, and signed preview/file URLs. |
| attach_post_media | posts:write, images:write | Attach an image using exactly one url, assetId, or imageId and postId, without scheduling or AI generation. POST /api/public/posts/:id/media. Uses existing image attachment storage. Remote raster images: 10MB. Other formats use schedule_post.mediaSource, matching the editor scheduling flow. |
| detach_post_media | posts:write | Remove a draft image attachment without deleting its library file. DELETE /api/public/posts/:id/media. |
ChatGPT (developer mode, web only)
ChatGPT custom MCP apps currently run on chatgpt.com, not in the ChatGPT desktop app. Availability depends on your ChatGPT plan, workspace settings, and role. ChatGPT does not accept a custom Authorization header here, so use Postiv's secret URL and choose No Authentication. The URL contains your API key; treat it like a password.
https://postiv.ai/mcp/pk_postiv_...- 1On chatgpt.com, open Settings, then Security and login, and turn on Developer mode.
- 2Open Plugins, select the plus button, and create a developer-mode app named Postiv.
- 3Paste the secret MCP URL, choose No Authentication, then select Scan Tools and wait for the Postiv tools to appear before creating the app.
- 4Start a new chat, open the plus menu, choose Developer mode, and select Postiv for that conversation. Saving the app alone does not enable it in existing chats.
See OpenAI's current ChatGPT developer mode requirements if Developer mode or the Plugins plus button is unavailable.
claude.ai (custom connector)
claude.ai custom connectors can only take a URL, they cannot send a header, so the API key goes in the path instead of an Authorization header. Treat this URL as a secret, the same as the key itself.
https://postiv.ai/mcp/pk_postiv_...- 1In claude.ai, go to Settings, then Connectors.
- 2Click "Add custom connector".
- 3Paste the URL above with your own key in it.


Claude Code
claude mcp add --transport http postiv https://postiv.ai/mcp \
--header "Authorization: Bearer pk_postiv_..."Generic Streamable HTTP client
{
"postiv": {
"url": "https://postiv.ai/mcp",
"headers": {
"Authorization": "Bearer pk_postiv_..."
}
}
}Claude Desktop with mcp-remote
{
"mcpServers": {
"postiv": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://postiv.ai/mcp",
"--header",
"Authorization: Bearer pk_postiv_..."
]
}
}
}