MCP Servers

模型上下文协议服务器、框架、SDK 和模板的综合目录。

A FastMCP server for LinkedIn automation that provides comprehensive LinkedIn API integration with support for creating, updating, and deleting posts with media (images, videos, documents).

创建于 10/8/2025
更新于 2 months ago
Repository documentation and setup instructions

LinkedIn MCP Server

A FastMCP server for LinkedIn automation that provides comprehensive LinkedIn API integration with support for creating, updating, and deleting posts with media (images, videos, documents).

🚀 Features

Core Tools

  • create_post: Create LinkedIn posts with text, images, videos, or documents
  • update_post: Update existing LinkedIn post text
  • delete_post: Delete LinkedIn posts (supports both UGC and Share formats)

Media Support

  • TEXT: Simple text posts
  • IMAGE: Image uploads (JPG, PNG, GIF)
  • VIDEO: Video uploads (MP4, MOV, AVI) with extended timeout support
  • DOCUMENT: Document uploads (PDF, DOC, DOCX, PPT, PPTX)

Advanced Features

  • Intelligent timeout handling (up to 10 minutes for large files)
  • Dynamic video processing wait times based on file size
  • Proper URN encoding for post operations
  • Comprehensive error handling and progress feedback
  • Support for both UGC posts and legacy Share posts

📋 Prerequisites

  • Python 3.10 or higher
  • uv package manager
  • LinkedIn Developer Account with API access
  • Valid LinkedIn Access Token with required permissions

Required LinkedIn API Permissions

  • w_member_social: Write access to member's social posts
  • (Optional) r_liteprofile: Read basic profile information

🛠 Installation

  1. Clone or download the project

    mkdir linkedin-mcp
    cd linkedin-mcp
    
  2. Install dependencies

    uv init
    uv add fastmcp>=2.12.4 requests
    
  3. Set up LinkedIn API credentials

    • Create a LinkedIn Developer App at LinkedIn Developer Portal
    • Generate an Access Token with w_member_social permission
    • Get your Member URN (personal LinkedIn profile URN)

⚙️ Configuration

Update the following variables in main.py with your LinkedIn credentials:

# LinkedIn API Credentials (REPLACE WITH YOUR VALUES)
LINKEDIN_ACCESS_TOKEN = "YOUR_ACCESS_TOKEN_HERE"
LINKEDIN_MEMBER_URN = "urn:li:person:YOUR_MEMBER_ID"
LINKEDIN_API_BASE = "https://api.linkedin.com/v2"

How to Get Your Credentials

  1. Access Token:

    • Go to LinkedIn Developer Portal
    • Create an app and request w_member_social permission
    • Generate access token from your app settings
  2. Member URN:

    • Use LinkedIn API /me endpoint to get your profile
    • Extract the URN from the response
    • Format: urn:li:person:XXXXXXXXXX

🚀 Usage

Starting the Server

# Start in development mode
uv run fastmcp dev main.py

The server will start on http://localhost:6274 with MCP Inspector available for testing.

Tool Examples

1. Create Text Post

create_post(
    content="Hello LinkedIn! This is my first MCP post.",
    media_type="TEXT"
)

2. Create Image Post

create_post(
    content="Check out this amazing image!",
    media_type="IMAGE",
    file_path="C:/path/to/your/image.jpg"
)

3. Create Video Post

create_post(
    content="Watch this cool video!",
    media_type="VIDEO",
    file_path="C:/path/to/your/video.mp4"
)

4. Create Document Post

create_post(
    content="Read my latest report",
    media_type="DOCUMENT",
    file_path="C:/path/to/your/document.pdf"
)

5. Update Post

update_post(
    post_id="urn:li:ugcPost:1234567890",
    new_text="Updated post content"
)

6. Delete Post

delete_post(post_id="urn:li:ugcPost:1234567890")
# or for legacy shares
delete_post(post_id="urn:li:share:1234567890")

⏱️ Timeout Configuration

The server uses intelligent timeout handling:

  • TEXT posts: 30 seconds
  • IMAGE posts: 2 minutes
  • VIDEO posts: 10 minutes
  • DOCUMENT posts: 10 minutes

File upload timeouts are dynamic based on file size:

  • Files < 10MB: 2 minutes
  • Files 10-50MB: 5 minutes
  • Files > 50MB: 10 minutes

🔧 Technical Details

Media Upload Process

  1. Registration: Register upload with LinkedIn to get upload URL and asset URN
  2. Binary Upload: Upload the actual file data to LinkedIn's storage
  3. Processing Wait: Wait for LinkedIn to process the media (especially videos)
  4. Post Creation: Create the LinkedIn post with the uploaded media

Error Handling

The server provides comprehensive error handling:

  • File existence validation
  • Media type validation
  • Upload failure recovery
  • Timeout management
  • LinkedIn API error parsing

URN Handling

The server properly handles different LinkedIn URN formats:

  • UGC Posts: urn:li:ugcPost:{id}
  • Legacy Shares: urn:li:share:{id}
  • Proper URL encoding for API calls

📁 Project Structure

linkedin-mcp/
├── main.py              # Main MCP server code
├── pyproject.toml       # Python project configuration
├── README.md           # This file
└── .env               # Environment variables (optional)

🔍 API Reference

create_post(content, media_type="TEXT", file_path=None)

Create a new LinkedIn post with optional media.

Parameters:

  • content (str): Text content of the post
  • media_type (str): Type of media - "TEXT", "IMAGE", "VIDEO", or "DOCUMENT"
  • file_path (str, optional): Absolute path to media file

Returns:

  • Dict with success status, post URN, and any error details

update_post(post_id, new_text)

Update the text content of an existing UGC post.

Parameters:

  • post_id (str): Post URN (e.g., "urn:li:ugcPost:1234567890")
  • new_text (str): New text content

Returns:

  • Dict with success status and operation details

delete_post(post_id)

Delete a LinkedIn post (supports both UGC and Share formats).

Parameters:

  • post_id (str): Post URN (e.g., "urn:li:ugcPost:1234567890" or "urn:li:share:1234567890")

Returns:

  • Dict with success status and operation details

🚨 Important Notes

Timeout Behavior

  • If you see a timeout error but the post appears on LinkedIn, the upload succeeded
  • LinkedIn processes uploads in the background, so timeouts may occur before final confirmation
  • Check your LinkedIn profile to verify post creation

File Size Limits

  • LinkedIn has file size limits for different media types
  • Large videos (>100MB) may take the full 10-minute timeout
  • Consider compressing large files before upload

API Rate Limits

  • LinkedIn has rate limits on API calls
  • Space out your requests to avoid hitting limits
  • The server includes appropriate delays for video processing

🐛 Troubleshooting

Common Issues

  1. "ACCESS_DENIED" errors

    • Verify your access token has the required permissions
    • Check that your LinkedIn app has w_member_social permission
  2. "File not found" errors

    • Use absolute file paths
    • Ensure file exists and is accessible
  3. Upload timeouts

    • Check your internet connection
    • Try smaller files first
    • Remember: timeout doesn't always mean failure
  4. Invalid URN format

    • Post IDs must start with urn:li:ugcPost: or urn:li:share:
    • Get correct URNs from post creation responses

Debug Mode

Start the server with debug logging:

uv run fastmcp dev main.py --debug

📄 License

This project is provided as-is for educational and development purposes. Please ensure compliance with LinkedIn's API Terms of Service.

🤝 Contributing

Feel free to submit issues, feature requests, or pull requests to improve this LinkedIn MCP server.

📞 Support

For questions or issues:

  1. Check the troubleshooting section above
  2. Review LinkedIn's API documentation
  3. Test with the MCP Inspector at http://localhost:6274

Note: Replace all placeholder credentials in main.py with your actual LinkedIn API credentials before running the server.

快速设置
此服务器的安装指南

安装包 (如果需要)

uvx linkedin-mcp

Cursor 配置 (mcp.json)

{ "mcpServers": { "lnxtanx-linkedin-mcp": { "command": "uvx", "args": [ "linkedin-mcp" ] } } }