LinkedIn MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP server port | 3000 |
| CACHE_TTL | No | Cache TTL in seconds | 300 |
| LOG_LEVEL | No | Log level: debug, info, warn, error | info |
| TRANSPORT | No | Transport mode: stdio or http | stdio |
| RATE_LIMIT_RPM | No | Max requests per minute | 30 |
| LINKEDIN_COOKIE | No | LinkedIn li_at session cookie | |
| REQUEST_TIMEOUT | No | Request timeout in milliseconds | 30000 |
| LINKEDIN_CSRF_TOKEN | No | LinkedIn JSESSIONID for CSRF protection | |
| LINKEDIN_ACCESS_TOKEN | No | LinkedIn OAuth access token |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | Report server version, browser/login status, and capabilities. |
| health_checkA | Deep health check: cookie login state, a LIVE Voyager probe (confirms the API actually answers, not just that a cookie exists), and today's safety-budget headroom (per-action used/cap/remaining + pending invites). |
| close_sessionA | Close the browser context and release resources (kills the Chrome process). |
| get_my_profileA | Get the authenticated user's own LinkedIn profile (experience, education, headline, summary). |
| get_profileA | Get a LinkedIn profile by public identifier (the slug in the profile URL, e.g. "satyanadella"). |
| get_feedB | Get recent posts from your LinkedIn home feed (author + post text). |
| get_notificationsB | Get your recent LinkedIn notifications (headline, time, read state). |
| search_peopleA | Search LinkedIn people by keywords. Returns name, headline, location, and public identifier (pass that to get_profile for full details). |
| search_jobsA | Search LinkedIn jobs by keywords (and optional location). Returns title, location, posted time. |
| get_inboxA | List your recent LinkedIn messaging conversations (title, last activity, unread count). |
| get_job_detailsA | Get full details for a job posting by its numeric id (the digits in /jobs/view/ or from search_jobs jobUrn). |
| search_companiesA | Search LinkedIn companies by keywords. Returns name + universalName slug (pass that to get_company for full details). |
| get_companyB | Get a company by its LinkedIn URL slug (e.g. "google", "microsoft"). Returns name, description, website, industry, size, HQ. |
| get_company_postsA | Get a company's recent posts by its LinkedIn URL slug (e.g. "google"). Returns post text + a short meta line. |
| get_company_employeesA | List employees LinkedIn surfaces for a company (by URL slug). Returns name, headline, and public identifier (feed the slug to get_profile). Prospecting core. |
| get_pending_invitationsA | List your pending connection invitations — received (inbound, with the urn/sharedSecret to accept later) and sent (outbound). Read-only. |
| get_conversationA | Read messages in a LinkedIn conversation by its URN (get the URN from get_inbox). |
| connect_with_personA | [ALPHA, write] Send a connection request. Gated: requires confirm:true. Returns a structured status (ok | duplicate | already_connected | restricted | quota_exhausted | failed). Counts against the daily connect cap. |
| send_messageA | [ALPHA, write] Send a message. Pass thread_id / conversation_urn to REPLY into an existing conversation (verified); otherwise a new thread is started to recipient_urn (best-known). Gated: requires confirm:true. Returns a structured status. Counts against the daily message cap. |
| create_postA | [ALPHA, write] Publish a text post to your feed. Gated: requires confirm:true. Returns a structured status. |
| react_to_postA | [ALPHA, write] React to a post. Gated: requires confirm:true. Returns a structured status. |
| comment_on_postA | [ALPHA, write] Comment on a post. Gated: requires confirm:true. Returns a structured status. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Each tool targets a distinct LinkedIn resource or action. Reads (get_*) are clearly separated from writes (create, comment, connect, etc.), and search tools are dedicated to people, companies, and jobs. No two tools overlap in purpose.
Most tools follow a verb_noun pattern (e.g., get_profile, search_people, create_post). A few exceptions like health_check and whoami break the pattern, but overall the naming is predictable and readable.
22 tools is well-scoped for a LinkedIn integration. Each tool covers a distinct operation without overloading the surface, covering profiles, companies, jobs, messaging, feed, and account management.
Core CRUD and lifecycle operations for LinkedIn are present: profile reading, search, connection management, messaging, and feed interactions. Minor gaps like profile editing or post deletion exist but do not hinder typical workflows.