linkedin-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@linkedin-mcppost a quick update about my team's success"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
linkedin-mcp
A personal-use remote MCP server, hosted on Cloudflare Workers, that lets you post to LinkedIn, queue/schedule drafts, and pull your own post analytics from Claude. Single-user (your own LinkedIn account only).
See PROGRESS.md for build status and known API limitations.
Tools exposed
create_post(text, visibility)— publish nowsave_draft(text, scheduled_time, visibility)— queue for later, published by a cron triggerlist_drafts()— see queued/scheduled/published draftsdelete_post(post_id)— cancel a draft, or delete a published LinkedIn post (accepts a draft id or a LinkedIn post URN)get_recent_posts(count)— your last N postsget_post_analytics(post_id)— engagement counts for one post (see limitations below)get_profile_stats()— basic profile info (see limitations below)
Related MCP server: LinkedIn MCP Server
Architecture
Hosting: Cloudflare Workers, MCP over Streamable HTTP at
/mcp, via theagentspackage'sMcpAgent(a Durable Object).Storage: Cloudflare D1 — one table for your OAuth token pair, one table for the draft/schedule queue.
Scheduling: a Cron Trigger (every 15 min) checks D1 for due drafts and publishes them.
Auth to LinkedIn: OAuth 2.0 3-legged flow,
w_member_social+openid/profilescopes. Tokens are refreshed automatically using the stored refresh_token.Auth to this server: the
/mcpendpoint requiresAuthorization: Bearer <MCP_AUTH_TOKEN>— without this, anyone who finds your*.workers.devURL could post to your LinkedIn as you.
Setup
1. Register a LinkedIn app
Go to https://www.linkedin.com/developers/apps and create an app.
Under Products, request/add:
Share on LinkedIn (gives
w_member_social)Sign In with LinkedIn using OpenID Connect (gives
openid,profile)
Under Auth, note your Client ID and Client Secret. You'll add the redirect URL here after step 4 gives you your Workers URL.
2. Cloudflare setup
npm install
npx wrangler login
npx wrangler d1 create linkedin_mcp_dbCopy the database_id from the output into wrangler.jsonc
(d1_databases[0].database_id).
Generate a random bearer token for securing your own /mcp endpoint, e.g.:
openssl rand -hex 32Set secrets:
npx wrangler secret put LINKEDIN_CLIENT_ID
npx wrangler secret put LINKEDIN_CLIENT_SECRET
npx wrangler secret put MCP_AUTH_TOKEN3. Set your redirect URI
Deploy once to learn your *.workers.dev URL:
npm run deployUpdate wrangler.jsonc's vars.LINKEDIN_REDIRECT_URI to
https://<your-subdomain>.<your-account>.workers.dev/oauth/callback, then add
that exact URL as an Authorized redirect URL in the LinkedIn app's Auth
settings. Redeploy:
npm run deploy4. Run the D1 migration
npm run db:migrate:remote5. One-time LinkedIn login
In a browser, visit:
https://<your-worker>/oauth/authorize?token=<MCP_AUTH_TOKEN>Log in with your own LinkedIn account and approve. You'll see a "connected successfully" page. This stores your access/refresh token pair in D1; the worker refreshes it automatically going forward.
6. Connect from Claude
Add a remote MCP connector pointing at https://<your-worker>/mcp with an
Authorization: Bearer <MCP_AUTH_TOKEN> header. Ask Claude to run
create_post with a short test message to confirm everything end-to-end.
Local development
cp .dev.vars.example .dev.vars # fill in real values
npm run db:migrate:local
npm run devwrangler dev runs a local D1 replica; you'll still hit the real LinkedIn API,
so use a low-visibility test post the first few times.
Non-goals
No scraping/reading other people's profiles, no auto-connect/DM/engagement-pod automation, no multi-user OAuth (single LinkedIn account only).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aneesh-a7/linkedin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server