LinkedIn MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DRY_RUN | No | When true, mutating tools validate and report but never execute. | false |
| HUMANIZE | No | When true, adds random delays and human-like typing. | true |
| LOG_LEVEL | No | Logging level: trace, debug, info, warn, error, silent. | info |
| CACHE_TTL_MS | No | Read cache lifetime in milliseconds. | 300000 |
| MCP_HTTP_HOST | No | Bind address for HTTP transport. Non-loopback requires MCP_HTTP_TOKEN. | 127.0.0.1 |
| MCP_HTTP_PATH | No | Endpoint path for HTTP transport. | /mcp |
| MCP_HTTP_PORT | No | Port for streamable HTTP transport. | 3000 |
| LINKEDIN_LI_AT | No | LinkedIn session cookie (li_at) string. Outranks other authentication methods. | |
| MCP_HTTP_TOKEN | No | Bearer token required for non-loopback HTTP bindings. | |
| DEBUG_ARTIFACTS | No | When true, saves screenshots and HTML on browser failures. | true |
| BROWSER_HEADLESS | No | When false, browser UI is visible for debugging. | true |
| TRANSPORT_STRATEGY | No | Transport selection strategy: auto, api, or browser. | auto |
| LINKEDIN_AUTO_LOGIN | No | If set to false, disables the automatic browser login prompt on first use. | true |
| LINKEDIN_COOKIE_FILE | No | Path to a JSON cookies file exported with Cookie-Editor extension. | |
| REQUIRE_CONFIRMATION | No | When true, destructive tools require explicit confirm: true parameter. | true |
| LINKEDIN_BROWSER_PROFILE | No | Path to a dedicated Chrome profile directory. Overrides automatic profile location. | |
| RATE_LIMIT_MESSAGES_PER_DAY | No | Daily messaging quota. | 100 |
| RATE_LIMIT_CONNECTIONS_PER_DAY | No | Daily connection request quota. | 80 |
| RATE_LIMIT_REQUESTS_PER_MINUTE | No | Global request pacing limit. | 30 |
| RATE_LIMIT_APPLICATIONS_PER_DAY | No | Daily job application quota. | 50 |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| linkedin_add_awardB | Add an honour or award to the profile. |
| linkedin_add_certificationB | Add a licence or certification to the profile. |
| linkedin_add_educationA | Add an education entry to the profile. School names are matched against LinkedIn's directory. |
| linkedin_add_experienceA | Add a work experience entry to the profile. Company names are matched against LinkedIn's company directory. Set current=true for an ongoing role and omit the end date. |
| linkedin_add_languageB | Add a language to the profile with an optional proficiency level. |
| linkedin_add_projectA | Add a project to the profile — useful for portfolio work, open source and side projects. |
| linkedin_add_publicationB | Add a publication (paper, article, book) to the profile. |
| linkedin_add_skillA | Add a skill to the profile. LinkedIn matches skills against its own taxonomy and uses them for recruiter search, so prefer standard names ("Machine Learning" over "ML wizardry"). Max 50 skills. |
| linkedin_add_volunteer_experienceB | Add volunteer experience to the profile. |
| linkedin_analyse_job_fitA | Compare the user's profile against a job posting: match score, which required skills they have and lack, keyword coverage, and specific recommendations. Use this to decide whether a role is worth applying to, and to know what to emphasise if it is. |
| linkedin_analyse_profileA | Score profile completeness and return specific, actionable improvement suggestions. The score is computed by this server from which sections are present and substantive — it is not LinkedIn's own metric. Use this to answer "how can I improve my profile?". |
| linkedin_apply_to_jobA | Apply to a job through LinkedIn Easy Apply. Reads each step of the form, answers questions from the |
| linkedin_apply_to_jobs_bulkA | Apply to several Easy Apply jobs in sequence, with human-like pacing between them. Skips jobs already applied to, and aborts the batch on a session or quota failure rather than hammering LinkedIn. Applications where a required question could not be answered are reported as skipped with the specific questions listed — supply those answers and retry those jobs. This submits real applications, so get explicit user approval for the batch first. |
| linkedin_auth_export_cookiesA | Export the currently loaded cookies so they can be moved to another machine or backed up. WARNING: the output contains live session credentials — anyone holding them can access the user's LinkedIn account. Only surface this when the user explicitly asks for it. |
| linkedin_auth_import_cookiesA | Import LinkedIn cookies supplied directly as text. Accepts Cookie-Editor JSON, EditThisCookie JSON, a Playwright storageState object, Netscape cookies.txt, or a raw "li_at=…; JSESSIONID=…" header string. Use this when the user pastes cookies into the conversation rather than saving a file. |
| linkedin_auth_reloadA | Reload cookies from the configured source (file or environment) and re-validate the session. Use this after the user has exported a fresh cookie file to recover from an expired session without restarting the server. |
| linkedin_auth_statusA | Check whether the LinkedIn session is currently valid, and report which cookies are loaded, from where, and who the session belongs to. Call this first if any other tool returns an AUTH_EXPIRED or AUTH_MISSING error, and before starting a long workflow. |
| linkedin_comment_on_postA | Add a comment to a post. Max 1,250 characters. The comment is public and attributed to the signed-in user, so confirm the wording with them first. |
| linkedin_compose_outreachA | Draft a personalised outreach message grounded in the user's real profile — no invented credentials. Returns the draft plus notes about what was missing. Rewrite it for voice before sending; this gives you an accurate factual base, not finished prose. |
| linkedin_create_postA | Publish a post to the LinkedIn feed. Supports plain text, images (up to 20), a video, a document (PDF/PPT — this is how carousels are made), or a poll. Only one media type per post. Max 3,000 characters. This publishes immediately and is visible to the network, so confirm the text with the user first. |
| linkedin_delete_draftA | Delete a local post draft. This only affects this server's store, not LinkedIn. |
| linkedin_delete_notificationA | Delete a single notification, matched by a distinctive substring of its text. |
| linkedin_delete_postA | Permanently delete one of your own posts, along with its reactions and comments. This cannot be undone. |
| linkedin_delete_profile_sectionA | Permanently delete a profile entry. Addressed by zero-based index within the section — call linkedin_get_profile first to confirm you have the right one. This cannot be undone. |
| linkedin_edit_postA | Replace the text of an existing post. LinkedIn does not allow editing every post type — polls and some reposts are immutable, and the tool reports that clearly rather than failing silently. |
| linkedin_edit_profile_sectionA | Edit an existing profile entry in place. Entries are addressed by their zero-based index within the section, so call linkedin_get_profile first to see the current order. Only the fields you supply are changed. |
| linkedin_export_companiesA | Search companies and export the results to JSON, CSV or Markdown. |
| linkedin_export_connectionsA | Export connections to JSON, CSV or Markdown. For a genuinely complete archive (with emails and connection dates) prefer linkedin_request_data_export, which uses LinkedIn's official export. |
| linkedin_export_conversationsA | Export conversations — optionally including full message history — to JSON, CSV or Markdown. |
| linkedin_export_jobsA | Run a job search and export the results to JSON, CSV or Markdown — useful for building a pipeline spreadsheet or feeding another tool. Accepts the same filters as linkedin_search_jobs. |
| linkedin_export_postsA | Export posts (with engagement metrics) to a JSON, CSV or Markdown file — useful for analysing which content performed best. |
| linkedin_export_profileA | Export a full profile to a structured file (JSON, CSV or Markdown) for downstream use — archiving, feeding another tool, or handing to a resume builder. |
| linkedin_export_search_resultsB | Run any search and export the results to JSON, CSV or Markdown. |
| linkedin_find_recruitersA | Find recruiters relevant to a role or company. Each match carries a recruiterScore (0-100) and the signals behind it, so you can judge confidence rather than trusting a silent filter. LinkedIn has no "recruiter" entity type — this infers it from headline patterns. |
| linkedin_followA | Follow or unfollow a person. Following shows their posts in your feed without requiring a connection — useful for people who do not accept invitations. |
| linkedin_follow_companyA | Follow or unfollow a company page. |
| linkedin_forget_answerA | Delete a remembered screening-question answer, e.g. after it turns out to be wrong. |
| linkedin_generate_cover_letterA | Draft a cover letter grounded in the user's real profile and a specific job posting. Draws evidence from actual experience descriptions rather than inventing achievements. Reports gaps so you know what to strengthen. Rewrite the output for voice before it is sent. |
| linkedin_generate_resumeA | Build a structured resume from the user's actual LinkedIn profile, optionally tailored to a specific job (which reorders skills to surface relevant ones first). Every line comes from real profile data — nothing is invented. The |
| linkedin_get_application_historyA | List applications submitted through this server, including the answers given and any failures. For LinkedIn's own authoritative record, use linkedin_get_applied_jobs instead. |
| linkedin_get_applied_jobsA | Read LinkedIn's own record of jobs the user has applied to. This is authoritative, unlike linkedin_get_application_history which reflects only applications made through this server. |
| linkedin_get_companyA | Read a company page: description, industry, size, headquarters, founding year, specialties, follower count and website. The returned companyId is what job and people searches use for company filtering. |
| linkedin_get_company_employeesA | List people who work at a company, optionally filtered by job title. Useful for finding warm introductions, hiring managers, or peers in a target team. |
| linkedin_get_company_jobsB | List open jobs posted by a specific company. |
| linkedin_get_connectionsA | List the signed-in user's 1st-degree connections with names, headlines and profile links. Large networks take a while to page through, so set a realistic limit. |
| linkedin_get_contact_infoA | Read a profile's contact information: email, phone, websites, Twitter and birthday. LinkedIn only reveals most of these for 1st-degree connections, so expect sparse results otherwise. |
| linkedin_get_conversation_historyA | Read the full message history of one conversation, oldest to newest. Use this to get context before composing a reply. |
| linkedin_get_conversationsA | List message conversations with participants, the last message and unread status. Use this to triage the inbox before reading or replying to specific threads. |
| linkedin_get_followersB | List people who follow the signed-in user without necessarily being connected. |
| linkedin_get_followingA | List the people the signed-in user follows. |
| linkedin_get_hiring_teamA | Find recruiters and hiring contacts at a company, identified by title patterns. Use the results to address a cover letter to a real person or to send targeted outreach. |
| linkedin_get_invitationsA | List pending connection invitations — either received (awaiting your response) or sent (awaiting theirs). Returns sender names and any personalised message. |
| linkedin_get_jobA | Read a job posting in full: complete description, required skills (extracted from the text), salary, applicant count, employment type, experience level and the hiring team where LinkedIn shows it. Use this before applying or tailoring a resume. |
| linkedin_get_network_statsA | Summarise network size: connection count, follower count and pending invitation counts. |
| linkedin_get_notificationsA | Read LinkedIn notifications — reactions, comments, invitations, job alerts and profile views. Use unreadOnly to triage only what is new. |
| linkedin_get_postA | Read a single post in detail by URN, activity id or URL. |
| linkedin_get_post_commentsA | Read the comments on a post, in order. The returned index of each comment is what linkedin_reply_to_comment expects. |
| linkedin_get_postsA | Read recent posts from a profile's activity or from the home feed, including text, author, engagement metrics and post type. Use this to review what someone posts about before engaging, or to audit your own posting history. |
| linkedin_get_profileA | Read a complete LinkedIn profile: headline, about, experience, education, skills, certifications, projects, publications, awards, volunteering and languages. Use this before writing any profile update (so edits are grounded in what is actually there) and before tailoring a resume. |
| linkedin_get_profile_analyticsA | Read profile analytics: profile views, post impressions, search appearances and follower count. LinkedIn restricts several of these for non-Premium accounts, and anything unavailable is reported explicitly rather than guessed. |
| linkedin_get_remembered_answersA | List screening-question answers this server has remembered from previous applications, so they can be reviewed or corrected before the next batch. |
| linkedin_get_saved_jobsA | List the jobs the user has saved on LinkedIn. |
| linkedin_get_settingsA | Read LinkedIn account settings for a category (account, privacy, visibility, notifications, communications, data-privacy). Returns each setting with its current value and a direct link, since most settings must be changed manually. |
| linkedin_list_draftsA | List locally saved post drafts that have not yet been published. |
| linkedin_list_filesA | List files this server has produced or can use: previous exports and available resume/cover-letter documents. Use this to find a resume path before applying to a job, or to locate an earlier export. |
| linkedin_list_resumesA | List resume and cover-letter files available in the configured resume directory, with paths ready to pass to linkedin_apply_to_job. |
| linkedin_list_toolsA | List every tool this server exposes, grouped by category, with flags showing which are read-only, which mutate LinkedIn, and which are destructive. Useful for orienting before planning a multi-step workflow. |
| linkedin_manage_conversationB | Archive, unarchive, mark read/unread, or delete a conversation. Deletion is irreversible and removes the thread from your inbox only (the other party keeps their copy). |
| linkedin_mark_notifications_readA | Mark notifications as read. LinkedIn has no bulk API for this — the server loads and scrolls the notifications page, which is how LinkedIn itself clears the unread badge. |
| linkedin_message_recruitersA | Find recruiters hiring for a role and message each one, personalising from the user's profile unless a fixed message is supplied. Paces sends and stops on quota or session failures. This contacts real people on the user's behalf — always confirm the recipient list and message wording with them before invoking it. |
| linkedin_publish_draftA | Publish a previously saved local draft to LinkedIn. Attaches any media recorded with the draft. The draft is marked published on success. |
| linkedin_react_to_postA | React to a post. Defaults to a Like; celebrate/support/love/insightful/funny are also available. Calling this on an already-liked post is a no-op rather than an error. |
| linkedin_remove_connectionA | Remove an existing 1st-degree connection. They are not notified, but re-connecting requires a fresh invitation. This cannot be undone directly. |
| linkedin_remove_skillA | Remove a skill from the profile, along with any endorsements it has accumulated. |
| linkedin_reply_to_commentA | Reply to a specific comment on a post. Comments are addressed by zero-based index — call linkedin_get_post_comments first to see the order. |
| linkedin_reply_to_conversationA | Send a message into an existing conversation thread by its id. |
| linkedin_repostA | Repost (reshare) someone else's post. Without |
| linkedin_request_data_exportA | Trigger LinkedIn's official data export. This is the only way to obtain a genuinely complete archive — connections with emails, full message history, activity logs — which scraping cannot match. LinkedIn emails a download link within minutes to 24 hours. |
| linkedin_resolve_locationA | Resolve a place name to LinkedIn's internal geo id/URN. Most callers do not need this — the search tools resolve locations automatically — but it is useful for building precise filters by hand. |
| linkedin_respond_to_invitationA | Accept or ignore a received connection invitation. Identify the sender by name or public identifier — the invitation list reorders between calls, so indexes are not used. |
| linkedin_save_draftA | Save post text as a local draft without publishing it. LinkedIn exposes no draft API, so drafts live in this server's local store — they are not visible in the LinkedIn UI. Use this to prepare content for review before publishing. |
| linkedin_save_jobA | Save a job to the user's saved list, or remove it from the list. |
| linkedin_save_postA | Bookmark a post to the user's saved items for later reading. |
| linkedin_searchA | Universal LinkedIn search across any vertical: people, jobs, companies, posts, events, groups, schools or everything at once. Use the dedicated tools (linkedin_search_jobs, linkedin_search_people, linkedin_search_companies) when you need vertical-specific filters; use this for posts, events, groups and schools, or for a broad sweep. |
| linkedin_search_companiesA | Search for companies by name or keyword. Use this to resolve a company name into the numeric companyId that linkedin_search_jobs and linkedin_search_people need for company filters. |
| linkedin_search_conversationsA | Search the message inbox by keyword or participant name. |
| linkedin_search_jobsA | Search LinkedIn jobs using the full filter set: keywords, location, remote/hybrid/onsite, experience level, employment type, date posted, salary band, company, industry, Easy Apply only, and more. Handles pagination automatically. This is the entry point for every job workflow — the returned jobIds feed linkedin_get_job, linkedin_save_job and linkedin_apply_to_job. |
| linkedin_search_peopleA | Search for people, with filters for connection degree, current/past company, school, industry, location and job title. Returns names, headlines, locations and profile identifiers. Use the identifiers with linkedin_get_profile, linkedin_send_connection_request or linkedin_send_message. |
| linkedin_send_connection_requestA | Send a connection request, optionally with a personalised note (max 300 characters). Notes dramatically improve acceptance rates but free accounts are limited to about 5 per month. LinkedIn also caps invitations at roughly 100/week — this server enforces a conservative daily limit to keep the account safe. |
| linkedin_send_messageA | Send a direct message to a person, starting a new conversation or continuing an existing one. Messaging people outside your network generally requires Premium InMail — the tool says so explicitly when that is the blocker. Max 8,000 characters. |
| linkedin_set_open_to_workA | Turn the "Open To Work" signal on or off. When enabling, you can specify target job titles and locations, and whether the badge is visible to everyone or only to recruiters. |
| linkedin_system_resetA | Clear the in-memory cache and/or restart the browser. Use this when reads seem stale after an out-of-band change, or when browser automation starts failing repeatedly. |
| linkedin_system_statusA | Report server health: configuration in effect, browser state, cache statistics, rate-limit quota consumption and local storage counts. Use this to diagnose slowness, unexpected refusals, or to confirm whether DRY_RUN is active before performing writes. |
| linkedin_update_aboutA | Replace the About (summary) section on the signed-in user's profile. Max 2,600 characters. Read the existing profile first so the rewrite keeps real facts intact. |
| linkedin_update_headlineA | Replace the headline on the signed-in user's profile. The headline is the single most visible field in search results, so prefer a specific role + specialism over a bare job title. Max 220 characters. |
| linkedin_update_locationA | Update the profile location. LinkedIn requires a location from its own list, so the value is matched against its typeahead — use a recognisable city or region name. |
| linkedin_update_settingA | Change one of the few settings that can be automated safely: profile-viewing-mode (how you appear when viewing others) and open-to-work-visibility. Everything else must be changed manually — LinkedIn's settings UI has no stable hooks and a mis-click has real privacy consequences. |
| linkedin_upload_bannerA | Upload or replace the profile background banner. LinkedIn recommends 1584x396 pixels; JPG/PNG/GIF up to 8MB. |
| linkedin_upload_profile_photoA | Upload or replace the profile photo. Accepts JPG, PNG or GIF up to 8MB. LinkedIn recommends a square image of at least 400x400. |
| linkedin_withdraw_applicationA | Withdraw a submitted job application. LinkedIn only allows this for some postings and within a limited window, so a clear "not possible" answer is a normal outcome. |
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/Sabari2005/linkedin-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server