Skip to main content
Glama
ahmedselimmansor-ctrl

LinkedIn MCP Server

README.md
# LinkedIn MCP Server

A comprehensive, containerized Model Context Protocol (MCP) server for LinkedIn. This professional-grade server allows large language models and agents to interact with LinkedIn's official REST API seamlessly. It provides granular tools to manage user profiles, handle network connections, author posts, and oversee organizations.

## 🚀 Key Features

The project leverages a highly modular architecture, making it easy to extend and maintain:

- **👤 Profile Management (`src/tools/profile`)**
  - Retrieve authenticated user profile information (`get_my_profile`).
- **📝 Content Creation (`src/tools/content`)**
  - Share simple text updates to the user's feed (`create_text_post`).
  - Share rich articles with URL and descriptive commentary (`create_article_post`).
- **🔗 Network Management (`src/tools/network`)**
  - View and list 1st-degree connections (`get_connections`) *(requires `r_network` permission)*.
- **🏢 Organization Management (`src/tools/organization`)**
  - List the company pages and organizations you administer (`get_organizations`).

## 📋 Prerequisites

To run this server, you will need:
1.  **LinkedIn Developer Account**: An application registered in the [LinkedIn Developer Portal](https://developer.linkedin.com/).
2.  **Access Token**: An OAuth 2.0 Access Token with necessary scopes (e.g., `w_member_social`, `r_liteprofile`, `r_organization_admin`).
3.  **Docker** (Optional but recommended for robust execution).
4.  **Node.js v20+** (Required if running natively without Docker).

---

## 🛠️ Installation & Setup

### Option A: Using Docker (Recommended)

Containerization ensures the MCP server runs consistently regardless of your environment.

1. **Build the Docker image:**
   ```bash
   docker build -t linkedin-mcp-server .
   ```

2. **Configure your MCP client** (e.g., `mcp.json` for Claude Desktop):
   ```json
   {
     "mcpServers": {
       "linkedin": {
         "command": "docker",
         "args": [
           "run",
           "-i",
           "--rm",
           "-e",
           "LINKEDIN_ACCESS_TOKEN=your_linkedin_access_token_here",
           "linkedin-mcp-server"
         ]
       }
     }
   }
   ```

### Option B: Running Locally

1. **Install dependencies:**
   ```bash
   npm install
   ```

2. **Build the TypeScript code:**
   ```bash
   npm run build
   ```

3. **Configure your MCP client:**
   ```json
   {
     "mcpServers": {
       "linkedin": {
         "command": "node",
         "args": ["/absolute/path/to/Linekedin_MCP_server/build/index.js"],
         "env": {
           "LINKEDIN_ACCESS_TOKEN": "your_linkedin_access_token_here"
         }
       }
     }
   }
   ```

---

## 🔍 Available Tools Reference

*   `get_my_profile`: Fetches the currently authenticated user's profile details.
*   `create_text_post`: Posts a plain-text status update on the LinkedIn feed.
*   `create_article_post`: Shares a URL to an article with a customized title and description.
*   `get_connections`: Retrieves 1st-degree connections.
*   `get_organizations`: Gets a list of LinkedIn pages/organizations that the authenticated user manages.

---

## 🛡️ Troubleshooting

- **401 Unauthorized**: Ensure your `LINKEDIN_ACCESS_TOKEN` is correct, well-formed, and has not expired.
- **403 Forbidden**: Your LinkedIn App lacks the necessary permissions for the endpoint. Check your app's authorized "Products" in the LinkedIn Developer Portal and ensure your token includes the right scopes.

## 📁 Architecture
The project is split cleanly into isolated modules:
*   `src/index.ts`: The MCP Server entry point.
*   `src/linkedin-client.ts`: The robust API wrapper using `axios`.
*   `src/tools/*`: Directory containing individually exported toolsets.

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clear and distinct purpose: two for posting (article vs text), three for retrieval (connections, profile, organizations). No overlap or ambiguity.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (create_*, get_*), making the API predictable and easy to navigate.

Tool Count4/5

5 tools is slightly lean for a social network API, but covers essential profile and posting operations. The set feels focused rather than incomplete.

Completeness3/5

Core operations are present (post, retrieve profile/connections/organizations), but notable gaps exist such as updating or deleting posts, commenting, or searching.

Maintenance

ActivityInactive
ResponsivenessSyncing