linkedin-mcp-pro
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LI_AT | No | LinkedIn li_at cookie value | |
| JSESSIONID | No | LinkedIn JSESSIONID cookie value | |
| LI_AT_FILE | No | Path to file containing LinkedIn li_at cookie | |
| WARMUP_ENABLED | No | Enable warmup mode | true |
| JSESSIONID_FILE | No | Path to file containing LinkedIn JSESSIONID cookie | |
| DAILY_LIMIT_POSTS | No | Daily limit for posts | 2 |
| BUSINESS_HOURS_END | No | End hour for business hours (UTC) | 20 |
| BUSINESS_HOURS_START | No | Start hour for business hours (UTC) | 9 |
| DAILY_LIMIT_CONNECTION_REQUESTS | No | Daily limit for connection requests | 20 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_my_profileA | Get the authenticated user's LinkedIn profile (name, headline, summary, current position). |
| get_person_profileA | Get a LinkedIn member's profile by their public identifier (vanity name). |
| search_peopleB | Search for LinkedIn members by keyword, with optional location and company filters. |
| search_jobsC | Search for jobs by keyword, with optional location and experience filters. |
| get_job_detailsA | Get full details for a specific job posting by its ID. |
| search_companiesC | Search for LinkedIn company pages by keyword. |
| get_company_profileC | Get a LinkedIn company page profile. |
| get_company_employeesC | List employees at a company from the /people/ page. |
| get_feedC | Get recent posts from your home feed. |
| get_inboxC | List recent conversations from your LinkedIn messaging inbox. |
| get_conversationA | Read a specific messaging conversation by participant public ID or thread URN. |
| get_pending_invitationsA | List sent connection invitations awaiting response. |
| send_connection_requestA | Send a connection request to a LinkedIn member, with optional personalized note. Subject to daily quota (default 20), warm-up ramp, business hours, and jitter. Set dry_run=true to preview without sending. |
| create_postA | Publish a new LinkedIn post (text + optional local image/video file). Subject to daily quota (default 2), warm-up, business hours, jitter. Set dry_run=true to preview. |
| delete_postA | Permanently delete one of your own posts by URL or URN. |
| comment_on_postB | Post a comment on a LinkedIn post (by URL or URN). |
| react_to_postC | Add a reaction (like, celebrate, insightful, etc.) to a post. |
| send_messageC | Send a direct message to a LinkedIn member you're connected with. |
| accept_invitationC | Accept an incoming connection invitation. |
| decline_invitationB | Decline an incoming connection invitation. |
| withdraw_invitationB | Withdraw a sent (still pending) connection invitation. |
| list_templatesA | List all saved LinkedIn post templates (name, description, tags). Templates live in ~/.linkedin-mcp/templates/ by default; override with LINKEDIN_MCP_TEMPLATES_DIR. |
| get_templateA | Return one template's full YAML document (name, body, tags, default_vars). |
| render_templateA | Render a template's body with the given variables. Built-in variables {date}, {time}, {day_of_week}, {week_number}, {month}, {year} are auto-filled. With strict=true, missing variables raise an error instead of being left verbatim. |
| save_templateA | Create or overwrite a post template. Body may contain {variable} placeholders. Tags are searchable labels; default_vars are values filled in at render time unless overridden by the caller. |
| delete_templateC | Delete a saved template by name. |
| deadman_statusA | Read-only dead-man switch check: last_post_at, days_since, status, should_alert. No side effects, no Telegram call. |
| deadman_check_and_alertA | Force a dead-man check and send a Telegram alert if status=='alert' and the 24h cooldown has elapsed. Telegram is configured via LINKEDIN_MCP_TELEGRAM_BOT_TOKEN + LINKEDIN_MCP_TELEGRAM_CHAT_ID. |
| deadman_test_alertA | Send a one-off test Telegram message (bypasses the 24h cooldown) so the operator can verify bot token + chat id are wired up. |
| list_schedulesA | List all post schedules from ~/.linkedin-mcp/schedule.yaml. |
| add_scheduleA | Add a new post schedule. Provide one of: cron (5-field), at (ISO datetime), or days+time. Provide either template (name) or text (direct body). |
| remove_scheduleB | Remove a post schedule by name. |
| enable_scheduleB | Re-enable a disabled post schedule. |
| disable_scheduleA | Disable a post schedule (keeps it in the YAML, won't run). |
| run_due_nowA | Enqueue all currently-due schedules into the action queue. The scheduler worker drains them through SafetyGuard + create_post. |
| get_daily_statsA | Get today's quota usage for all action types (used / limit / zone). |
| get_audit_logB | Get the most recent audit log entries (every action, with status and details). |
| get_post_volumeA | Per-day count of post audits in the last |
| get_post_success_rateB | Roll-up of post outcomes in the last |
| get_quota_usageA | Today's per-action-type quota usage (raw counts from daily_quotas). Caps are not joined in — use |
| get_top_posting_hoursA | Distribution of post audits by hour-of-day (0..23, UTC) over the last |
| get_top_posting_daysA | Distribution of post audits by weekday name (Monday..Sunday) over the last |
| get_recent_postsB | Most recent |
| get_analytics_summaryA | One-call roll-up: success rate, today's quota, top hour, top weekday. Read-only — no LinkedIn calls. |
| get_safety_statusA | Get the current safety gate status: config, daily/hourly usage, active pauses, cooldowns. All Tier 3 features go through this gate. |
| set_safety_configB | Update safety config. Pass any subset of: enabled, dry_run, tz, whitelist, blacklist, business_hours_start, business_hours_end, cooldown_min, cooldown_max, like_daily, comment_daily, connect_daily, feed_watch_daily, account_age_days, warmup_days, warmup_multiplier, like_hourly, comment_hourly, connect_hourly, negative_response_threshold, shadowban_pause_hours. Lists (whitelist/blacklist) are replaced entirely. |
| clear_safety_pauseA | Manually clear any active pauses (negative feedback / shadow-ban). Use this after reviewing and addressing the cause. |
| poll_feedB | Run a single poll cycle against the feed. Returns what was added, denied, and the safety gate decision. |
| build_digestC | Build a digest of the last N hours of feed activity (top posts, mentions, keyword alerts, trending, warnings). |
| get_digest_markdownB | Return the digest as Markdown text (ready to send to Telegram or email). |
| auto_like_by_keywordB | Search posts by keyword and like them through the safety gate. Defaults to dry-run. Each like is gated by daily quota (default 30/day), hourly quota (5/hr), whitelist/blacklist match, and randomized cooldown. Returns detailed per-post decisions. |
| auto_comment_by_keywordA | Search posts by keyword and comment on them through the safety gate. VERY HIGH BAN RISK: defaults to 5/day, 1/hour, requires author in 1st-degree network, blocks spam phrases, requires personalized draft. ALWAYS start with dry_run=true. |
| auto_connect_by_criteriaA | Find people matching criteria and send connection requests through the safety gate. HIGH BAN RISK: defaults to 20/day, 3/hour, requires personalized note (no blank invites), blocks recruiters/agencies by default. ALWAYS start with dry_run=true. |
| voice_to_draftA | Transcribe an audio file (mp3/m4a/wav/ogg) via Whisper, clean filler words, and produce an AI-drafted LinkedIn post. Returns draft for human review — does NOT post automatically. Requires ffmpeg + faster-whisper on host. |
| llm_list_providersA | List all configured LLM providers with status (masked keys, last test result). |
| llm_add_keyC | Add or update an LLM API key. |
| llm_remove_keyC | Remove an LLM provider's stored key. |
| llm_test_keyB | Test if a provider's key works (1-token ping). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- 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/horizonbymuneeb/linkedin-mcp-pro'
If you have feedback or need assistance with the MCP directory API, please join our Discord server