Let AI agents publish text posts, PDF documents, images and video to LinkedIn, on your personal profile or a company page you manage, from a single prompt. It runs on LinkedIn’s official API.
{
"mcpServers": {
"upload-post": {
"url": "https://mcp.upload-post.com/mcp",
"headers": {
"Authorization": "ApiKey YOUR_API_KEY"
}
}
}
} Part of the Upload-Post MCP server. The agent picks the right tool from your prompt.
| Tool | What it does |
|---|---|
| upload_text | Publish a text post to a profile or company page, with an optional link preview |
| upload_document | Publish a PDF, PPT(X) or DOC(X) document post, the format behind LinkedIn “carousels” |
| upload_photos / upload_video | Publish image and video posts |
| get_linkedin_pages | List the company pages you manage and their IDs |
| list_scheduled / edit_scheduled / cancel_scheduled | Manage scheduled posts |
| get_analytics | Pull company page followers, impressions and engagement |
Looking for another way to post? See the LinkedIn API page or the Claude Code LinkedIn skill. Step by step: post to LinkedIn with Claude.
One hosted server at mcp.upload-post.com/mcp. Sign in with OAuth or paste an Upload-Post API key, whichever your client supports.
Open it from Settings > Developer > Edit Config, paste the entry and restart Claude Desktop. It runs the open-source npm package @upload-post/mcp on your machine and needs Node.js 18 or newer.
Using Claude in the browser? Skip the file: Customize > Connectors > + Add > Add custom connector, paste https://mcp.upload-post.com/mcp and sign in with your Upload-Post account (OAuth).
{
"mcpServers": {
"upload-post": {
"command": "npx",
"args": ["-y", "@upload-post/mcp"],
"env": { "UPLOAD_POST_API_KEY": "YOUR_API_KEY" }
}
}
} Prefer OAuth? Drop the --header line, then run /mcp inside Claude Code and sign in. Add --scope user to use the server in every project.
claude mcp add --transport http upload-post https://mcp.upload-post.com/mcp \
--header "Authorization: ApiKey YOUR_API_KEY" Put it in .cursor/mcp.json for one project or ~/.cursor/mcp.json for all of them, then reload Cursor.
{
"mcpServers": {
"upload-post": {
"url": "https://mcp.upload-post.com/mcp",
"headers": {
"Authorization": "ApiKey YOUR_API_KEY"
}
}
}
}
Your API key is under API Keys in app.upload-post.com. Before the first post, connect LinkedIn to a profile in the dashboard: the agent passes that profile name as user. On ChatGPT, search for Upload-Post under Apps and click Connect; no config file needed.
An example flow with placeholder names, IDs and URLs, not a customer transcript. The tool names and parameters are the real ones the server exposes.
You
Post the Q3 report at https://example.com/q3-report.pdf on the Acme Analytics company page (Upload-Post profile "acme"). Title it "Q3 product report", write a two-line intro and make it public.
Tool call 1
get_linkedin_pages
The agent looks up the page ID instead of guessing it.
{
"profile": "acme"
}{
"success": true,
"pages": [
{
"id": "urn:li:organization:12345678",
"name": "Acme Analytics",
"vanityName": "acme-analytics"
}
]
}Tool call 2
upload_document
Document posts (what most people call PDF carousels) have their own tool. The page ID routes the post to the company page.
{
"documentPathOrUrl": "https://example.com/q3-report.pdf",
"user": "acme",
"title": "Q3 product report",
"description": "Our Q3 in 12 slides: what shipped, what moved, what comes next.",
"targetLinkedinPageId": "urn:li:organization:12345678",
"linkedinVisibility": "PUBLIC"
}{
"success": true,
"results": {
"linkedin": {
"success": true,
"post_id": "urn:li:activity:7654321098765432",
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7654321098765432/",
"content_type": "document"
}
}
}Assistant
Done. "Q3 product report" is live on the Acme Analytics page as a public document post: https://www.linkedin.com/feed/update/urn:li:activity:7654321098765432/
upload_photos: An image post on your personal profile, visible to connections only.
{
"photosPathsOrUrls": [
"https://example.com/team-offsite.jpg"
],
"user": "acme",
"platforms": [
"linkedin"
],
"title": "Three things we changed after our team offsite. Number two surprised me.",
"platformOptions": {
"linkedinVisibility": "CONNECTIONS"
}
}upload_text: A text post with a link preview, scheduled for Monday 9:00 Madrid time.
{
"title": "We rewrote our onboarding from scratch. Here is what changed and why.",
"user": "acme",
"platforms": [
"linkedin"
],
"linkUrl": "https://example.com/blog/onboarding",
"scheduledDate": "2026-10-05T09:00:00",
"timezone": "Europe/Madrid"
}How the LinkedIn MCP server actually reaches your account.
The MCP server never logs in as you, scrapes LinkedIn or drives a browser. Your AI client calls the server, the server calls Upload-Post, and Upload-Post publishes through LinkedIn’s REST API with its own approved LinkedIn app. You connect LinkedIn once, on LinkedIn’s own permission screen, so your LinkedIn password never reaches Upload-Post or your AI client.
The permissions LinkedIn asks you to approve are the standard ones for third-party posting tools: w_member_social to post as yourself and w_organization_social to post as a company page. LinkedIn only lets you post as a page if you hold an admin role on it (administrator or content admin), and that rule applies here too.
LinkedIn’s User Agreement bans unauthorized automated methods for creating or sharing posts, scraping tools and browser plugins, and sharing log-in credentials. Those are the things that usually get automated accounts restricted. An approved app on the official API is the route LinkedIn built for tools like this. It does not exempt you from LinkedIn’s rules on spam and content, so write posts a person would stand behind.
LinkedIn access tokens last about 60 days and refresh with regular use. You can disconnect LinkedIn from your Upload-Post profile at any time, and revoke an AI client that signed in with OAuth under Connected Apps in the dashboard.
Sources: LinkedIn Posts API, LinkedIn User Agreement, section 8.2, Upload-Post LinkedIn guide, upload-post-mcp on GitHub.
The four kinds of LinkedIn MCP server you will find, and how each one reaches your account. Checked 28 September 2026.
| How it reaches LinkedIn | Can it post? | What you install | Risk to your account | Price | |
|---|---|---|---|---|---|
| Upload-Post MCP | LinkedIn’s official API through an approved app. You grant access on LinkedIn’s own OAuth screen. | Yes: text, images, video and PDF documents, to your profile or any page you administer, now or scheduled. | Nothing. It is hosted at mcp.upload-post.com. An open-source npm package exists if you would rather run it locally. | Low. No password, no cookies, no browser automation. | Free plan with 10 uploads a month. Unlimited uploads from $24/month. |
| Open-source browser-session servers (e.g. stickerdaniel/linkedin-mcp-server) | Drives a real browser logged in as you and keeps your LinkedIn session cookies. | Built for research and outreach: profiles, people and job search, messages. The most popular one does not publish posts. | A local install (uvx, Docker or a desktop bundle). | High. The README itself warns that accounts using automated tools can be restricted or banned. | Free, open source. |
| Automation platforms (e.g. Zapier MCP) | The platform’s own LinkedIn integration. | Two actions: a share update on your profile and a company page update. | Nothing, but calls run through your Zapier account. | Low. | Needs a Zapier account. |
| LinkedIn content apps (e.g. Taplio, Postiv) | Hosted, connected to LinkedIn through the app. | Yes, inside that app’s drafting and scheduling workflow. | Nothing, but you need an account with that app. | Low. | Not listed on their MCP pages. |
There is no official LinkedIn MCP server. LinkedIn has not published one, so every LinkedIn MCP server is third-party. What matters is how it reaches your account: through LinkedIn’s official API with your permission, or by driving a browser with your session cookie.
Upload-Post is not a writing app. Your AI client writes the post and the server publishes it, so you keep the assistant, prompts and voice you already use. The same server also posts to TikTok, Instagram, YouTube, X and 17 more platforms, so one connection covers every network you publish to.
What it will not do: read other people’s profiles, search for people, send connection requests or messages, or export leads. LinkedIn does not open those actions to ordinary third-party apps, which is why the tools that offer them work through a browser session.
Sources: stickerdaniel/linkedin-mcp-server README, Zapier LinkedIn MCP, Taplio LinkedIn MCP, Postiv LinkedIn MCP, LinkedIn User Agreement, section 8.2.
What LinkedIn and Upload-Post accept per post, checked September 2026.
| What | Limit | Source |
|---|---|---|
| Post text | 3,000 characters | Upload-Post character limits |
| Document or video title | 400 characters (an emoji counts as 2). Longer titles are trimmed with an ellipsis. | Upload-Post document upload |
| Documents | PDF, PPT, PPTX, DOC or DOCX, up to 100 MB and 300 pages | LinkedIn Documents API |
| Video | 3 seconds to 30 minutes, 75 KB to 500 MB | LinkedIn Videos API |
| Images | JPEG, PNG or GIF, up to 36,152,320 pixels; animated GIFs up to 250 frames | Upload-Post photo requirements |
| Visibility | PUBLIC (default), CONNECTIONS, LOGGED_IN or CONTAINER | Upload-Post LinkedIn guide |
| Posting as a page | Needs an administrator or content admin role on that page | LinkedIn Posts API |
No commands to memorize. Describe what you want.
“Draft and publish a LinkedIn post announcing our v2 release. Keep it plain, no hype.”
“Post this PDF as a document carousel on our company page.”
“Schedule a LinkedIn text post for next Monday at 10:00 Madrid time.”
“How did our company page do this month? Followers, impressions, engagement.”
LinkedIn + AI agents, answered. Last updated September 2026.
A LinkedIn MCP server is a Model Context Protocol server that exposes LinkedIn publishing as tools an AI agent can call. The Upload-Post MCP server lets ChatGPT, Claude, Gemini or any MCP client post text, documents, images and video to LinkedIn, with no custom code.
Yes. The get_linkedin_pages tool lists the company pages you manage, and the agent can target any of them, or your personal profile, per post.
Yes. The upload_document tool publishes a PDF, PPT, PPTX, DOC or DOCX file as a LinkedIn document post, which LinkedIn shows as a swipeable carousel. A title is required and is capped at 400 characters.
The MCP server is free and open source (MIT). Posting goes through your Upload-Post plan: the Free plan includes 10 uploads a month and 2 profiles with no card, and paid plans with unlimited uploads start at $24 a month ($16 a month billed annually).
No. LinkedIn has not released an MCP server, so every LinkedIn MCP server is built by a third party. Upload-Post’s runs on LinkedIn’s official API through an approved app, which is the closest thing to official: you grant access on LinkedIn’s own permission screen and never share your password or cookies.
No. The server is hosted at https://mcp.upload-post.com/mcp. In Claude on the web or ChatGPT you add it as a connector and sign in with OAuth; in Claude Code or Cursor you paste the URL and an API key. If you prefer to run it on your own machine, the same server is published as the open-source npm package @upload-post/mcp.
Your MCP client decides. Claude, ChatGPT and Cursor show each tool call and can ask you to approve it before it runs. You can also ask the agent to schedule the post instead of publishing it, then review or cancel it with list_scheduled and cancel_scheduled before it goes out.
In Claude Code, run claude mcp add --transport http upload-post https://mcp.upload-post.com/mcp and sign in with /mcp, or pass your API key with --header. In Claude Desktop, add the npx @upload-post/mcp entry with your API key to claude_desktop_config.json. In Claude on the web, add the URL as a custom connector. Then connect LinkedIn to a profile in the Upload-Post dashboard.
Both. Without a page ID, posts go to the personal profile of the connected LinkedIn account. With targetLinkedinPageId set to an ID from get_linkedin_pages, the post goes out as that company page. LinkedIn requires an administrator or content admin role on the page.
The server uses LinkedIn’s official API through an approved app and LinkedIn’s own permission screen. It does not share your password, scrape or automate a browser, which are the practices LinkedIn’s User Agreement prohibits. You still have to follow LinkedIn’s rules on content and spam.
Up to 3,000 characters of post text and 400 characters for a document or video title. Documents can be PDF, PPT, PPTX, DOC or DOCX up to 100 MB and 300 pages. Videos run from 3 seconds to 30 minutes and 75 KB to 500 MB.
For company pages you administer, yes: get_analytics takes the page URN and returns that page’s numbers. Personal profiles are not supported, because LinkedIn only grants the permission for reading a member’s posts (r_member_social) to approved developers.
No. It publishes and manages your own posts and pages. It does not scrape profiles, search for people or send connection requests.
Free to start, no credit card. Connect LinkedIn once and post from any MCP client.
We use strictly necessary cookies to run this site. With your permission we would also like to measure how the site is used (analytics) and how our ads perform (marketing). Nothing optional is loaded until you choose. Cookie Policy · Privacy Policy
Choose which categories you allow. You can change this at any time from "Cookie settings" in the footer. Cookie Policy
Needed for the site to work: your consent record (up_consent) and your light/dark theme preference. Exempt from consent under art. 22.2 LSSI.
OpenPanel, self-hosted on our own servers (api.openpanel.fotoexamen.com). Aggregated page and feature usage so we can see what to improve. No data goes to an advertising network.
Google Ads conversion measurement, the Reddit advertising pixel, and our own affiliate/attribution cookies (aff_ref, up_attribution). These tell us which campaign or affiliate brought you here.