Token导航 LogoToken导航TokenDH.com
Chuk MCP Linkedin logo
设计创作stdio官方级别未说明来源级核验

Chuk MCP Linkedin

MCP Server

一个专业的LinkedIn内容创作服务器,提供基于模型上下文协议(MCP)的组件化内容创作、数据驱动的优化和安全的发布功能。

工具数

1

提示词数

0

GitHub Stars

2

资源数

0
PythonClaude设计Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

IBM

提供方

IBM

最后核验

2026/5/17 20:20

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uvx mcp-cli --server https://linkedin.chukai.io --provider anthropic --model claude-sonnet-4-5

详细介绍

LinkedIn MCP服务器

用于创建高性能LinkedIn内容的MCP服务器设计系统

![Python 3.11+](https://www.python.org/downloads/) ![License: Apache 2.0](https://opensource.org/licenses/Apache-2.0) ![Code style: black](https://github.com/psf/black) ![MCP](https://modelcontextprotocol.io)

特性快速开始安装文档例子

______________________________________________________________________

概述

用于LinkedIn内容创建的专业模型上下文协议(MCP)服务器,具有受shadcn启发的组件系统、10个性能调优主题和基于1M+帖子分析的数据驱动优化。

建立在 ChukMCP服务器 --模块化、零配置的MCP服务器框架,具有智能环境检测和生产就绪默认值。

它的作用:

  • ✅ 使用基于主题的组件和变体撰写帖子
  • ✅ 通过LinkedIn API上传文档(PDF/PPTX/DOCX)
  • ✅ 使用会话隔离的工件存储预览帖子
  • ✅ 在LinkedIn上发布和安排帖子
  • ✅ 利用2025年的性能数据优化内容
  • ✅ 生成安全、有时间限制的预览URL

它没有做什么:

  • ❌ 创建PowerPoint/PDF文件(此服务器专注于LinkedIn内容的撰写和发布)

🔒 隐私和安全

令牌安全:

  • 令牌从不以明文形式登录(仅在调试级别使用8个字符前缀)
  • 日志中编辑的所有敏感数据(令牌、代码、用户ID)
  • OAuth访问令牌:短期(默认15分钟)以降低重播风险
  • OAuth刷新令牌:每日轮换以获得最大安全性
  • LinkedIn发行的令牌:存储在服务器端,自动刷新
  • 没有令牌持久化到文件系统(仅限Redis/内存会话)

草稿隔离:

  • 所有草稿都适用于经过身份验证的用户会话
  • 无法进行跨用户访问(由强制执行 @requires_auth 装饰师)
  • 会话到期时自动删除草稿工件

工件存储:

  • 内存提供程序:服务器重新启动时清除了工件
  • Redis提供者:基于TTL的过期时间(默认值:1小时)
  • S3提供商:预设URL在配置时间后过期(默认值:1小时)

会话管理:

  • 在每个请求上验证会话
  • 自动清理过期会话
  • 在所有状态更改操作中启用CSRF保护

OAuth 2.1合规性(RFC 9728):

  • 授权服务器发现: RFC 8414 元数据在 /.well-known/oauth-authorization-server
  • 受保护资源元数据: RFC 9728/.well-known/oauth-protected-resource
  • JWT访问令牌: RFC 9068 短TTL格式
  • PKCE:所有授权流都需要(S256质询方法)
  • 州与非州:强制执行以防止CSRF和重放攻击

OAuth模式:

  • LinkedIn直接模式 (默认):服务器直接通过LinkedIn处理OAuth流
  • 钥匙斗篷模式:将OAuth委托给Keycloak,Keycloak将LinkedIn作为身份提供者进行管理

- 集中身份验证和SSO支持 - 通过Keycloak的身份提供者集成进行令牌代理 - 企业功能:LDAP、SAML、2FA - 看 Keycloak设置指南

  • 直通模式:直接接受LinkedIn承载令牌(无OAuth流)

- 非常适合测试和开发 - 无需OAuth凭据 - 通过LinkedIn用户信息端点验证的令牌 - 看 通道模式指南

领英API合规性:您有责任遵守 LinkedIn的API服务条款 以及速率限制。此服务器不实现速率限制-根据需要配置您自己的反向代理或API网关。

特性

🎨 设计系统架构

  • 基于组件的组合 -从可重用组件(Hook、Body、CTA、Hashtags)构建帖子
  • 受CVA启发的变体 -支持复合变体的类型安全变体
  • 10个预先构建的主题 -思想领袖、数据驱动、讲故事者等
  • 设计代币 -集中式造型系统,确保一致性
  • Shadcn哲学 -复制、粘贴和拥有您的组件

📊 数据驱动优化

根据2025年对9000个公司页面上100多万个帖子的分析:

  • 文件张贴:45.85%的参与度中位数(数据集中最高)
  • 民意调查帖子:200%+更高的中位数覆盖率(最未充分利用的格式)
  • 视频帖子:参与度中位数为1.4倍,同比增长69%
  • 最佳时机:周二至周四,上午7点至9点(参与高峰时段)
  • 前210个字符:LinkedIn“查看更多”截断前的关键挂钩窗口

Data & Methodology

数据集:来自9247个公司页面的1042183篇帖子(2025年1月至12月)

指标:

  • *参与* =(点赞+评论+分享)/印象
  • *到达* =每个帖子的唯一观众
  • *成长* =参与率同比变化

来源:LinkedIn Pages API,从已选择的公司帐户汇总。参与率是中值,以减少异常值偏差。时间分析使用UTC标准化时间戳。

局限性数据集倾向于B2B科技公司(占样本的63%)。结果可能因消费品牌或地区市场而异。

🖥️ 预览和工件系统

  • 像素完美的LinkedIn UI -真实明信片渲染
  • 实时分析 -角色计数、参与度预测
  • 文档渲染 -PDF/PPTX页面作为图像(如LinkedIn)
  • 会话隔离 -安全的、基于会话的草稿存储
  • 文物存储 -多个后端(内存、S3、IBM COS)
  • 预先签名的URL -限时、安全的预览URL

🚀 专业CLI

  • 基于ChukMCPServer构建:模块化框架,零配置部署
  • 多种模式:STDIO(Claude Desktop)、HTTP(API)、Auto-detect
  • 智能环境检测:自动配置本地开发、Docker、Fly.io等。
  • 调试记录:内置日志记录和错误处理
  • Docker支持:多阶段构建,强化安全性
  • 入口点: linkedin-mcplinkedin-mcp-server 命令

🔧 开发者体验

  • 96%的测试覆盖率 -1058项测试通过
  • CI/CD就绪 -GitHub操作,预提交钩子
  • 类型安全 -完整的MyPy类型注释
  • 有据可查的 -大量文档和示例

快速开始

选项1:使用公共MCP服务器(推荐)

最简单的入门方法是使用我们的托管MCP服务器 https://linkedin.chukai.io.

备注:公共服务器是一个尽力而为的演示实例,为了防止滥用,速率受到限制。对于具有保证SLA的生产使用,请部署自己的实例(请参阅 部署).

添加到克劳德桌面:

  1. 打开您的Claude Desktop配置文件:

- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 视窗: C:\Users\\AppData\Roaming\Claude\claude_desktop_config.json

(替换 `` 使用您的实际Windows用户名)

  1. 添加LinkedIn MCP服务器(无尾随斜线):
{
  "mcpServers": {
    "linkedin": {
      "url": "https://linkedin.chukai.io"
    }
  }
}
  1. 重新启动克劳德桌面
  1. 在系统提示时使用LinkedIn进行身份验证(您将被重定向到LinkedIn OAuth)

与MCP CLI一起使用:

# Install MCP CLI (using uvx - no separate install needed)
# Requires: ANTHROPIC_API_KEY or OPENAI_API_KEY environment variable

# Connect with Claude
uvx mcp-cli --server https://linkedin.chukai.io --provider anthropic --model claude-sonnet-4-5

# Or with OpenAI
uvx mcp-cli --server https://linkedin.chukai.io --provider openai --model gpt-5-mini

# Or use local Ollama (no API key needed)
uvx mcp-cli --server https://linkedin.chukai.io

公共服务器包括:

  • OAuth 2.1合规性 完全支持RFC:

- 授权服务器发现(RFC 8414)at /.well-known/oauth-authorization-server - 受保护资源元数据(RFC 9728)at /.well-known/oauth-protected-resource - JWT访问令牌(RFC 9068)

  • Redis会话存储 用于多实例可靠性
  • S3兼容工件存储 (Tigris)带有预签名URL
  • 自动缩放 高可用性(Fly.io)
  • 安全预览URL 具有可配置的过期时间(默认值:1小时)

选项2:本地运行

想运行自己的实例吗?在本地安装并运行服务器:

1.安装软件包

# Basic installation
pip install chuk-mcp-linkedin

# With HTTP server support
pip install chuk-mcp-linkedin[http]

# With document preview support
pip install chuk-mcp-linkedin[preview]

# For development
pip install chuk-mcp-linkedin[dev]

2.设置环境变量

创建 .env 文件:

# LinkedIn OAuth credentials (required)
LINKEDIN_CLIENT_ID=your_client_id
LINKEDIN_CLIENT_SECRET=your_client_secret
LINKEDIN_REDIRECT_URI=http://localhost:8000/oauth/callback

# Optional: OAuth server URL (for discovery endpoint)
OAUTH_SERVER_URL=http://localhost:8000

# Session storage (default: memory)
SESSION_PROVIDER=memory

# Enable publishing (default: false)
ENABLE_PUBLISHING=true

3.运行服务器

# STDIO mode (for Claude Desktop)
linkedin-mcp stdio

# HTTP mode (API server)
linkedin-mcp http --port 8000

# Auto-detect mode
linkedin-mcp auto

# With debug logging
linkedin-mcp stdio --debug

4.配置克劳德桌面(本地服务器)

{
  "mcpServers": {
    "linkedin": {
      "command": "linkedin-mcp",
      "args": ["stdio"],
      "env": {
        "LINKEDIN_CLIENT_ID": "your_client_id",
        "LINKEDIN_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

创建您的第一个帖子

from chuk_mcp_linkedin.posts import ComposablePost
from chuk_mcp_linkedin.themes import ThemeManager

# Get a theme
theme = ThemeManager().get_theme("thought_leader")

# Compose a post
post = ComposablePost("text", theme=theme)
post.add_hook("stat", "95% of LinkedIn posts get zero comments")
post.add_body("""
Here's why (and how to fix it):

Most posts lack these 3 elements:

→ Strong hook (first 210 characters)
→ Clear value (what's in it for them)
→ Conversation starter (invite engagement)

Start treating posts like conversations, not broadcasts.
""", structure="listicle")
post.add_cta("curiosity", "What's your biggest LinkedIn frustration?")
post.add_hashtags(["LinkedInTips", "ContentStrategy"])

# Get the composed text
text = post.compose()
print(text)

安装

先决条件

安装选项

# Basic installation (STDIO mode only)
pip install chuk-mcp-linkedin

# Recommended: with uv (faster, more reliable)
uv pip install chuk-mcp-linkedin

任选附件

根据需要安装其他功能:

额外命令包括用例
超文本传输协议pip install chuk-mcp-linkedin[http]uvicorn,starlette作为HTTP API服务器运行
预览pip install chuk-mcp-linkedin[preview]pdf2image、Pillow、python pptx、python docx、PyPDF2文档预览渲染
开发pip install chuk-mcp-linkedin[dev]pytest、black、ruff、mypy、预提交开发和测试
全部pip install "chuk-mcp-linkedin[dev,http,preview]"以上所有完整安装

系统依赖关系(预览支持):

# macOS
brew install poppler

# Ubuntu/Debian
sudo apt-get install poppler-utils

# Windows (using Chocolatey)
choco install poppler

来源

# Clone from your source repository
uv pip install -e ".[dev,http,preview]"

用法

CLI命令

# Get help
linkedin-mcp --help

# STDIO mode (for Claude Desktop)
linkedin-mcp stdio

# HTTP mode (API server on port 8000)
linkedin-mcp http --host 0.0.0.0 --port 8000

# Auto-detect best mode
linkedin-mcp auto

# Enable debug logging
linkedin-mcp stdio --debug --log-level DEBUG

Python API

简单文本帖子

from chuk_mcp_linkedin.posts import ComposablePost
from chuk_mcp_linkedin.themes import ThemeManager

# Get theme
theme_mgr = ThemeManager()
theme = theme_mgr.get_theme("thought_leader")

# Create post
post = ComposablePost("text", theme=theme)
post.add_hook("question", "What drives innovation in 2025?")
post.add_body("Innovation comes from diverse perspectives...", structure="linear")
post.add_cta("direct", "Share your thoughts!")

# Compose final text
final_text = post.compose()

文档职位(最高参与度)

文档帖子的参与率为45.85%,是2025年的最高格式!

from chuk_mcp_linkedin.posts import ComposablePost

# Compose post text (publishing via MCP server with OAuth)
post = ComposablePost("document", theme=theme)
post.add_hook("stat", "Document posts get 45.85% engagement")
post.add_body("Our Q4 results are in. Here's what we learned 📊")
post.add_cta("curiosity", "What's your biggest takeaway?")
text = post.compose()

# Publishing is done via MCP server tools with OAuth authentication
# See examples/oauth_linkedin_example.py for OAuth flow
# See docs/OAUTH.md for setup instructions

投票站(最高覆盖率)

民意调查的覆盖率比平均帖子高出200%以上!

# Create poll
post = ComposablePost("poll", theme=theme)
post.add_hook("question", "Quick question for my network:")
post.add_body("What's your biggest LinkedIn challenge in 2025?")

# Note: Actual poll creation uses LinkedIn API
# This creates the post text; poll options go via API

预览系统

使用自动URL检测在发布前预览您的帖子:

from chuk_mcp_linkedin.manager import LinkedInManager

manager = LinkedInManager()

# Create draft
draft = manager.create_draft("My Post", "text")
# ... compose post ...

# Generate HTML preview (auto-opens in browser)
preview_path = manager.generate_html_preview(draft.draft_id)

MCP工具:linkedin_preview_url

生成具有自动服务器检测功能的可共享预览URL:

# Via MCP tool
{
    "tool": "linkedin_preview_url",
    "arguments": {
        "draft_id": "draft_123"  # Optional, uses current draft if not provided
    }
}

预览URL行为:

  • 生产(OAuth):自动使用来自的已部署服务器URL OAUTH_SERVER_URL env 是

- 例子: https://linkedin.chukai.io/preview/abc123

  • 本地开发:默认为 http://localhost:8000/preview/abc123
  • 变绿:可以指定自定义 base_url 参数(如果需要)

环境变量:

# Production - preview URLs use this automatically
export OAUTH_SERVER_URL=https://linkedin.chukai.io

# Local - no configuration needed (defaults to localhost:8000)

CLI预览版(旧版):

# Preview current draft
python preview_post.py

# Preview specific draft
python preview_post.py draft_id_here

# List all drafts
python preview_post.py --list

会话管理和工件存储

该服务器包括企业级会话管理和工件存储,由 chuk-artifacts:

特征:

  • 🔒 会话隔离 -每节课只看到自己的草稿
  • 📦 文物存储 -具有网格架构的安全、基于会话的存储
  • 🔗 预先签名的URL -限时、安全的预览URL
  • ☁️ 多个后端 -内存、文件系统、S3、IBM云对象存储
  • 🧹 自动清理 -旧预览自动过期

基于会话的草稿

from chuk_mcp_linkedin.manager import LinkedInManager

# Create manager with session ID
manager = LinkedInManager(
    session_id="user_alice",
    use_artifacts=True,
    artifact_provider="memory"  # or "filesystem", "s3", "ibm-cos"
)

# Drafts are automatically locked to this session
draft = manager.create_draft("My Post", "text")

# Only this session can access the draft
accessible = manager.is_draft_accessible(draft.draft_id)  # True for "user_alice"

# Different session cannot access
other_manager = LinkedInManager(session_id="user_bob")
accessible = other_manager.is_draft_accessible(draft.draft_id)  # False

基于工件的预览

生成自动过期的安全预览URL:

from chuk_mcp_linkedin.preview import get_artifact_manager

# Initialize artifact manager
async with await get_artifact_manager(provider="memory") as artifacts:
    # Create session
    session_id = artifacts.create_session(user_id="alice")

    # Store preview
    artifact_id = await artifacts.store_preview(
        html_content="...",
        draft_id="draft_123",
        draft_name="My Post",
        session_id=session_id
    )

    # Generate presigned URL (expires in 1 hour)
    url = await artifacts.get_preview_url(
        artifact_id=artifact_id,
        session_id=session_id,
        expires_in=3600
    )

    print(f"Preview URL: {url}")

MCP工具:linkedin_preview_url

linkedin_preview_url 工具生成会话隔离的预览URL:

{
  "tool": "linkedin_preview_url",
  "arguments": {
    "draft_id": "draft_123",     // optional: defaults to current draft
    "base_url": "https://linkedin.chukai.io",  // optional: auto-detected from OAUTH_SERVER_URL
    "expires_in": 3600           // optional: default 3600s
  }
}

答复:

{
  "url": "https://linkedin.chukai.io/preview/04a0c703d98d428fae0e550c885523f7",
  "draft_id": "draft_123",
  "artifact_id": "04a0c703d98d428fae0e550c885523f7",
  "expires_in": 3600
}

该URL是可共享的,不需要身份验证。它将在指定时间后自动过期。

存储提供商

根据您的需求配置存储后端:

内存(默认):

# Fast, ephemeral storage for development
manager = LinkedInManager(use_artifacts=True, artifact_provider="memory")

文件系统:

# Persistent storage on disk
manager = LinkedInManager(use_artifacts=True, artifact_provider="filesystem")
# Stores in: .artifacts/linkedin-drafts/

S3:

# Configure via environment variables
export ARTIFACT_PROVIDER=s3
export ARTIFACT_S3_BUCKET=my-linkedin-artifacts
export ARTIFACT_S3_REGION=us-east-1
export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
from chuk_artifacts.config import configure_s3

# Or configure programmatically
configure_s3(
    bucket="my-linkedin-artifacts",
    region="us-east-1",
    access_key="your_key",
    secret_key="your_secret"
)

manager = LinkedInManager(use_artifacts=True, artifact_provider="s3")

IBM云对象存储:

from chuk_artifacts.config import configure_ibm_cos

configure_ibm_cos(
    bucket="my-linkedin-artifacts",
    endpoint="https://s3.us-south.cloud-object-storage.appdomain.cloud",
    access_key="your_key",
    secret_key="your_secret"
)

网格体系结构

工件使用分层网格结构:

grid/
├── {sandbox_id}/              # "linkedin-mcp"
│   ├── {session_id}/          # "user_alice"
│   │   ├── {artifact_id}/     # "abc123"
│   │   │   ├── metadata.json
│   │   │   └── content
│   │   └── {artifact_id}/
│   └── {session_id}/
└── {sandbox_id}/

这确保了:

  • ✅ 会话隔离(用户无法访问彼此的工件)
  • ✅ 多租户支持(不同沙盒)
  • ✅ 可扩展存储(高效组织)
  • ✅ 易于清理(按会话或沙盒删除)

本地开发

对于没有云存储的本地开发:

# Use in-memory artifact storage
from chuk_mcp_linkedin.manager import LinkedInManager

manager = LinkedInManager(
    use_artifacts=True,
    artifact_provider="memory"  # Fast, ephemeral storage
)

# Or use filesystem for persistent local storage
manager = LinkedInManager(
    use_artifacts=True,
    artifact_provider="filesystem"  # Stores in .artifacts/
)

可用主题

为不同的LinkedIn人物角色预先构建的10个主题:

主题描述用例
thought_leader权威和专业知识行业见解、框架
data_driven让数字讲故事分析、研究、报告
storyteller叙事驱动个人经历、案例研究
community_builder促进对话民意调查、提问、参与
technical_expert深厚的技术知识工程、开发、技术主题
personal_brand真实的联系幕后,个人故事
corporate_professional抛光企业官方公告、更新
contrarian_voice挑战现状有争议的观点,辩论
coach_mentor指导和支持提示、建议、指导
entertainer让LinkedIn变得有趣幽默、表情包、轻松内容

MCP服务器集成

使用OAuth(推荐)

对于具有OAuth身份验证的HTTP模式:

{
  "mcpServers": {
    "linkedin": {
      "command": "linkedin-mcp",
      "args": ["http", "--port", "8000"],
      "env": {
        "SESSION_PROVIDER": "memory",
        "LINKEDIN_CLIENT_ID": "your_linkedin_client_id",
        "LINKEDIN_CLIENT_SECRET": "your_linkedin_client_secret",
        "OAUTH_ENABLED": "true"
      }
    }
  }
}

然后与MCP-CLI一起使用:

uvx mcp-cli --server linkedin --provider openai --model gpt-5-mini

docs/OAUTH.md 获取完整的OAuth设置说明。

STDIO模式(桌面客户端)

对于Claude Desktop和其他桌面客户端集成:

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

备注:发布工具需要OAuth。STDIO模式支持所有其他工具(绘图、合成、预览)。

码头工人

快速开始

# Build image
docker build -t chuk-mcp-linkedin:latest .

# Run in STDIO mode
docker-compose --profile stdio up -d

# Run in HTTP mode
docker-compose --profile http up -d

# View logs
docker-compose logs -f

Makefile命令

make docker-build      # Build Docker image
make docker-run-stdio  # Run in STDIO mode
make docker-run-http   # Run in HTTP mode on port 8000
make docker-test       # Build and test image
make docker-logs       # View container logs
make docker-stop       # Stop containers
make docker-clean      # Clean up Docker resources

环境变量

创建 .env 文件:

# ============================================================================
# OAuth Configuration (Required for Publishing)
# ============================================================================

# LinkedIn OAuth Credentials (from https://www.linkedin.com/developers/apps)
LINKEDIN_CLIENT_ID=your_linkedin_client_id
LINKEDIN_CLIENT_SECRET=your_linkedin_client_secret

# OAuth Server URLs
LINKEDIN_REDIRECT_URI=http://localhost:8000/oauth/callback  # Must match LinkedIn app settings
OAUTH_SERVER_URL=http://localhost:8000
OAUTH_ENABLED=true

# Session Storage (for OAuth tokens)
SESSION_PROVIDER=memory              # Development: memory | Production: redis
SESSION_REDIS_URL=redis://localhost:6379/0  # Required if SESSION_PROVIDER=redis

# ============================================================================
# OAuth Token TTL Configuration (Optional - Defaults Shown)
# ============================================================================

# Authorization codes - Temporary codes exchanged for access tokens during OAuth flow
# Short-lived for security (5 minutes)
OAUTH_AUTH_CODE_TTL=300

# Access tokens - Used by MCP clients to authenticate API requests
# Should be short-lived and refreshed regularly (15 minutes)
OAUTH_ACCESS_TOKEN_TTL=900

# Refresh tokens - Long-lived tokens that obtain new access tokens without re-authentication
# Short lifetime requires daily re-authorization for maximum security (1 day)
OAUTH_REFRESH_TOKEN_TTL=86400

# Client registrations - How long dynamically registered MCP clients remain valid (1 year)
OAUTH_CLIENT_REGISTRATION_TTL=31536000

# LinkedIn tokens - Access and refresh tokens from LinkedIn stored server-side
# Auto-refreshed when expired (1 day, more secure than LinkedIn's 60-day default)
OAUTH_EXTERNAL_TOKEN_TTL=86400

# ============================================================================
# Server Configuration
# ============================================================================
DEBUG=0
HTTP_PORT=8000

# LinkedIn Person URN (for API calls - auto-detected from OAuth token)
LINKEDIN_PERSON_URN=urn:li:person:YOUR_ID  # Optional: Auto-fetched via OAuth

要点:

  • 会话_提供者=内存 -开发所需(不需要Redis)
  • 会话_提供者=redis -生产所需(使用SESSION_REDIS_URL)
  • 需要OAuth -发布工具(linkedin_publish)需要OAuth身份验证
  • 令牌TTL -默认设置侧重于安全性(生命周期短,每天重新授权)

docs/OAUTH.md 完整的OAuth设置和 用于Docker部署。

生产部署

Fly.io部署(推荐)

将LinkedIn MCP服务器部署到带有Redis会话存储的Fly.io:

先决条件

  1. Fly.io帐户 - 在fly.io注册
  2. Fly CLI -安装: curl -L https://fly.io/install.sh | sh
  3. LinkedIn OAuth应用程序 -创建时间 LinkedIn开发者
  4. Redis实例 -在Fly.io上创建(或使用Uptash)

第一步:创建Fly.io应用程序

# Login to Fly.io
fly auth login

# Create app (generates fly.toml)
fly launch --no-deploy

# Choose app name (e.g., your-linkedin-mcp)
# Choose region (e.g., cdg for Paris)

第二步:创建Redis实例

# Create Redis on Fly.io
fly redis create

# Note the Redis URL from output:
# redis://default:PASSWORD@fly-INSTANCE-NAME.upstash.io:6379

步骤3:创建提格里斯储物桶

# Create Tigris S3-compatible storage for preview artifacts
fly storage create --name your-linkedin-mcp

# Fly automatically sets these secrets on your app:
# - AWS_ACCESS_KEY_ID
# - AWS_SECRET_ACCESS_KEY
# - AWS_ENDPOINT_URL_S3
# - AWS_REGION
# - BUCKET_NAME

步骤4:配置环境变量

所需机密参考:

机密必填来源目的
LINKEDIN_CLIENT_ID✅ 是的LinkedIn开发者门户OAuth客户端ID
LINKEDIN_CLIENT_SECRET✅ 是领英开发者门户OAuth客户端机密
SESSION_REDIS_URL✅ 是输出来自 fly redis create (步骤2)会话的Redis连接字符串
SESSION_PROVIDER✅ 是设置为 redis启用Redis会话后端
OAUTH_SERVER_URL✅ 是您的Fly.io应用程序URLOAuth发现库URL
LINKEDIN_REDIRECT_URI✅ 是的{OAUTH_SERVER_URL}/oauth/callbackOAuth回调端点
AWS_ACCESS_KEY_ID汽车fly storage create (步骤3)Tigris S3访问密钥(自动设置)
AWS_SECRET_ACCESS_KEY汽车fly storage create (步骤3)Tigris S3密钥(自动设置)
AWS_ENDPOINT_URL_S3汽车fly storage create (步骤3)Tigris S3端点(自动设置)
AWS_REGION汽车fly storage create (步骤3)提格里斯S3区域(自动设置)

使用Fly CLI设置所需的机密:

# LinkedIn OAuth credentials (from https://www.linkedin.com/developers/apps)
fly secrets set \
  LINKEDIN_CLIENT_ID=your_linkedin_client_id \
  LINKEDIN_CLIENT_SECRET=your_linkedin_client_secret \
  --app your-linkedin-mcp

# Redis connection (from step 2)
fly secrets set \
  SESSION_REDIS_URL="redis://default:PASSWORD@fly-INSTANCE-NAME.upstash.io:6379" \
  SESSION_PROVIDER=redis \
  --app your-linkedin-mcp

# OAuth server configuration
fly secrets set \
  OAUTH_SERVER_URL=https://your-linkedin-mcp.fly.dev \
  LINKEDIN_REDIRECT_URI=https://your-linkedin-mcp.fly.dev/oauth/callback \
  --app your-linkedin-mcp
备注:运行时会自动设置Tigris的AWS凭据(步骤3) fly storage create无需手动配置!

步骤5:配置fly.toml

更新 fly.toml 生产设置:

app = 'your-linkedin-mcp'
primary_region = 'cdg'

[build]

[http_service]
  internal_port = 8000
  force_https = true
  auto_stop_machines = 'stop'
  auto_start_machines = true
  min_machines_running = 0
  processes = ['app']

[[vm]]
  memory = '1gb'
  cpu_kind = 'shared'
  cpus = 1

[env]
  SESSION_PROVIDER = 'redis'
  ENABLE_PUBLISHING = true
  OAUTH_SERVER_URL = 'https://your-linkedin-mcp.fly.dev'
  LINKEDIN_REDIRECT_URI = 'https://your-linkedin-mcp.fly.dev/oauth/callback'

  # Artifact Storage (Tigris S3-compatible)
  ARTIFACT_PROVIDER = 's3'
  ARTIFACT_S3_BUCKET = 'your-linkedin-mcp'
  # AWS_* secrets automatically set by `fly storage create`

步骤6:部署

# Deploy to Fly.io
fly deploy

# Check deployment status
fly status

# View logs
fly logs

# Test OAuth endpoint
curl https://your-linkedin-mcp.fly.dev/.well-known/oauth-authorization-server

步骤7:配置MCP客户端

更新您的MCP客户端配置(例如。, ~/.mcp-cli/servers.yaml):

servers:
  linkedin:
    url: https://your-linkedin-mcp.fly.dev  # No trailing slash!
    oauth: true

测试连接:

uvx mcp-cli --server linkedin --provider openai --model gpt-5-mini

Redis 配置

发展(记忆)

对于本地开发,请使用内存中的会话存储:

# .env file
SESSION_PROVIDER=memory

无需安装Redis。服务器重新启动时会话丢失。

生产(Redis)

对于生产环境,使用Redis进行持久会话存储:

选项1:Fly.io Redis(升级版)

# Create Redis instance
fly redis create

# Get connection details
fly redis status your-redis-instance

# Set as secret
fly secrets set SESSION_REDIS_URL="redis://default:PASSWORD@fly-INSTANCE.upstash.io:6379"

选项2:外部Redis(Uptash、AWS ElastiCache等)

# Set Redis URL
export SESSION_REDIS_URL="redis://username:password@host:port/db"
export SESSION_PROVIDER=redis

环境变量:

# Session Provider
SESSION_PROVIDER=redis                    # Required: redis | memory

# Redis Connection (required if SESSION_PROVIDER=redis)
SESSION_REDIS_URL=redis://default:password@host:6379

# Optional Redis settings
REDIS_TLS_INSECURE=0  # Set to 1 to disable TLS cert verification (not recommended)

自定义域设置

为您的部署配置自定义域:

第一步:将域名添加到Fly.io

# Add custom domain
fly certs create linkedin.yourdomain.com

# Verify DNS settings
fly certs show linkedin.yourdomain.com

步骤2:更新DNS

添加DNS记录(检查上一个命令的输出):

Type: CNAME
Name: linkedin.yourdomain.com
Value: your-linkedin-mcp.fly.dev

步骤3:更新OAuth URL

# Update secrets with custom domain
fly secrets set \
  OAUTH_SERVER_URL=https://linkedin.yourdomain.com \
  LINKEDIN_REDIRECT_URI=https://linkedin.yourdomain.com/oauth/callback

步骤4:更新LinkedIn应用程序

  1. 首选 LinkedIn开发者
  2. 选择您的应用程序
  3. 更新“重定向URL”以匹配: https://linkedin.yourdomain.com/oauth/callback

环境变量引用

生产环境变量的完整列表:

# ============================================================================
# OAuth Configuration (Required for Production)
# ============================================================================

# LinkedIn OAuth Credentials
LINKEDIN_CLIENT_ID=your_linkedin_client_id
LINKEDIN_CLIENT_SECRET=your_linkedin_client_secret

# OAuth Server URLs (must match LinkedIn app settings)
# IMPORTANT: This URL is also used for preview URLs (linkedin_preview_url tool)
OAUTH_SERVER_URL=https://your-app.fly.dev
LINKEDIN_REDIRECT_URI=https://your-app.fly.dev/oauth/callback
OAUTH_ENABLED=true

# ============================================================================
# Session Storage (Required for Production)
# ============================================================================

# Production: Use Redis
SESSION_PROVIDER=redis
SESSION_REDIS_URL=redis://default:password@fly-instance.upstash.io:6379

# Development: Use Memory
# SESSION_PROVIDER=memory

# ============================================================================
# OAuth Token TTL Configuration (Optional - Defaults Shown)
# ============================================================================

OAUTH_AUTH_CODE_TTL=300                   # Authorization codes (5 min)
OAUTH_ACCESS_TOKEN_TTL=900                # Access tokens (15 min)
OAUTH_REFRESH_TOKEN_TTL=86400             # Refresh tokens (1 day)
OAUTH_CLIENT_REGISTRATION_TTL=31536000    # Client registrations (1 year)
OAUTH_EXTERNAL_TOKEN_TTL=86400            # LinkedIn tokens (1 day)

# ============================================================================
# Server Configuration
# ============================================================================

DEBUG=0                                   # Disable debug mode in production
HTTP_PORT=8000                            # Server port
ENABLE_PUBLISHING=true                    # Enable publishing tools

# LinkedIn Person URN (optional - auto-detected via OAuth)
LINKEDIN_PERSON_URN=urn:li:person:YOUR_ID

日志记录配置

控制生产中的测井水平:

# Production logging
LOG_LEVEL=INFO          # INFO for production, DEBUG for troubleshooting
MCP_LOG_LEVEL=WARNING   # MCP protocol logging

# Development logging
LOG_LEVEL=DEBUG
MCP_LOG_LEVEL=INFO

安全说明:在INFO级别,不记录敏感数据(令牌、用户ID、授权码)。此数据仅在调试级别记录,用于故障排除。

监控和故障排除

# View live logs
fly logs --app your-linkedin-mcp

# Check app status
fly status --app your-linkedin-mcp

# Check Redis status
fly redis status your-redis-instance

# Restart app
fly apps restart your-linkedin-mcp

# Scale app
fly scale count 2 --app your-linkedin-mcp  # 2 instances
fly scale memory 2048 --app your-linkedin-mcp  # 2GB memory

健康检查

服务器包括健康检查终结点:

# Check server health
curl https://your-app.fly.dev/

# Check OAuth discovery
curl https://your-app.fly.dev/.well-known/oauth-authorization-server

# Check MCP endpoint
curl https://your-app.fly.dev/mcp

安全最佳实践

  1. 永远不要泄露秘密 -在Fly.toml中使用Fly secrets,而不是环境变量
  2. 仅使用HTTPS -设置 force_https = true 在fly.toml
  3. 定期旋转令牌 -LinkedIn令牌会自动刷新
  4. 监控日志 -检查身份验证尝试是否失败
  5. 使用自定义域 -专业外观,更易于更新
  6. 启用自动缩放 -自动处理流量峰值
  7. 保持依赖关系更新 -定期安全更新

成本优化

Fly.io定价优化提示:

# In fly.toml - auto-stop when idle
[http_service]
  auto_stop_machines = 'stop'        # Stop when idle
  auto_start_machines = true         # Start on request
  min_machines_running = 0           # No always-on instances

预期成本:

  • 免费层:3个共享cpu VM,256MB RAM
  • Redis:基本Upstash实例每月约2美元
  • 扩展:免费层后每个VM约0.02美元/小时

文档

例子

Hello World:作曲→ 草稿→ 预览URL

查看完整工作流程的最快方式(examples/hello_preview.py):

import asyncio
from chuk_mcp_linkedin.posts import ComposablePost
from chuk_mcp_linkedin.themes import ThemeManager
from chuk_mcp_linkedin.manager_factory import ManagerFactory, set_factory

async def main():
    # Initialize factory with memory-based artifacts
    factory = ManagerFactory(use_artifacts=True, artifact_provider="memory")
    set_factory(factory)
    mgr = factory.get_manager("demo_user")

    # Step 1: Compose a post
    theme = ThemeManager().get_theme("thought_leader")
    post = ComposablePost("text", theme=theme)
    post.add_hook("question", "What's the most underrated growth lever on LinkedIn in 2025?")
    post.add_body("Hint: documents. Short, skimmable, 5–10 pages. Try it this week.", structure="linear")
    post.add_cta("curiosity", "Tried docs vs text lately?")
    post.add_hashtags(["LinkedInTips", "B2B", "ContentStrategy"])
    text = post.compose()

    # Step 2: Create a draft
    draft = mgr.create_draft("Hello Preview Demo", "text")
    mgr.update_draft(draft.draft_id, content={"text": text})

    # Step 3: Generate preview URL
    preview_url = await mgr.generate_preview_url(
        draft_id=draft.draft_id,
        base_url="http://localhost:8000",
        expires_in=3600
    )
    print(f"Preview URL: {preview_url}")

if __name__ == "__main__":
    asyncio.run(main())

运行它:

# Run the example
uv run python examples/hello_preview.py

# Start HTTP server to view preview (separate terminal)
OAUTH_ENABLED=false uv run linkedin-mcp http --port 8000

# Open the preview URL in your browser

输出:

🚀 LinkedIn MCP Server - Hello Preview Demo

📝 Step 1: Composing post...
✓ Post composed (193 chars)

📋 Step 2: Creating draft...
✓ Draft created (ID: draft_2_1762129805)

🔗 Step 3: Generating preview URL...
✓ Preview URL generated

Preview URL: http://localhost:8000/preview/04a0c703...

更多示例

综合示例 examples/ 目录:

# OAuth flow demonstration (authentication)
python examples/oauth_linkedin_example.py

# Complete component showcase
python examples/showcase_all_components.py

# Charts and data visualization
python examples/demo_charts_preview.py

# Media types showcase
python examples/showcase_media_types.py

示例/README.md 获取完整列表和OAuth设置说明。

发展

设置

# Install dependencies
make install
make dev

# Install pre-commit hooks
make hooks-install

运行测试

# Run all tests
make test

# Run with coverage
make coverage

# Run specific test
uv run pytest tests/test_composition.py -v

代码质量

# Format code
make format

# Run linter
make lint

# Type checking
make typecheck

# Security check
make security

# All quality checks
make quality

CI/CD

# Run full CI pipeline locally
make ci

# Quick CI check
make ci-quick

# Pre-commit checks
make pre-commit

2025年领英业绩数据

基于对9000个公司页面上100多万个帖子的分析:

表现最佳的格式

  1. 文档帖子(PDF) -45.85%的参与度(最高)

- 最佳:5-10页 - 格式:1920x1920平方 - 最小字体:18pt手机

  1. 民意调查帖子 -200%以上的覆盖率(最不受信任)

- 机会:使用最少的格式 - 参与度:平均覆盖率的3倍 - 持续时间:3-7天最佳

  1. 视频帖子 -1.4倍参与度(增长)

- 使用量比2024年增长69% - 首选垂直格式 - 保持在3分钟以下

  1. 图片帖子 -评论比文本多2倍

- 方形格式(1080x1080)表现最佳 - 信息图表和数据,即趋势

  1. 旋转木马帖子 -递减格式

- 与2024年相比,覆盖率下降了18%,参与率下降了25% - 最多保留5-10张幻灯片

最佳岗位结构

  • 前210个字符 -临界钩窗
  • 理想长度:300-800个字符
  • 话题标签:3-5最佳(不是10+)
  • 换行符:用于可扫描性
  • 最佳时期:周二至周四,上午7点至9点/下午12点至2点/下午5点至6点

第一小时参与度

  • 最小10次参与(基线)
  • :50次交战(算法增强)
  • 病毒式:100+次参与(最大覆盖范围)

建筑

建立在 ChukMCP服务器 -模块化MCP服务器框架,提供:

  • 零配置部署:智能环境检测(本地、Docker、Fly.io)
  • 生产就绪默认值:优化了workers、连接池、日志记录
  • 内置OAuth 2.1:发现端点、令牌管理、会话处理
  • 多个传输:用于桌面客户端的STDIO,用于API访问的HTTP/SSE
chuk-mcp-linkedin/
├── src/chuk_mcp_linkedin/
│   ├── api/              # LinkedIn API client
│   ├── models/           # Data models (Pydantic)
│   ├── posts/            # Post composition
│   │   ├── composition.py    # ComposablePost class
│   │   └── components/       # Hook, Body, CTA, Hashtags
│   ├── preview/          # Preview system
│   │   ├── post_preview.py       # HTML preview generation
│   │   ├── artifact_preview.py   # Artifact storage & URLs
│   │   └── component_renderer.py # Component rendering
│   ├── themes/           # Theme system
│   ├── tokens/           # Design token system
│   ├── tools/            # MCP tools
│   ├── utils/            # Utilities
│   ├── manager.py        # Draft & session management
│   ├── cli.py            # CLI implementation
│   ├── server.py         # MCP server (legacy)
│   └── async_server.py   # ChukMCPServer-based async server
├── tests/                # Comprehensive test suite (96% coverage)
├── examples/             # Usage examples
├── docs/                 # Documentation
├── .github/workflows/    # CI/CD workflows
├── Dockerfile            # Multi-stage Docker build
├── docker-compose.yml    # Docker Compose config
├── Makefile              # Development automation
└── pyproject.toml        # Project configuration

贡献

欢迎投稿!请阅读 贡献.md 作为指导方针。

开发流程

  1. 克隆该仓库
  2. 创建特征分支(git checkout -b feature/amazing-feature)
  3. 进行更改并添加测试
  4. 进行质量检查(make check)
  5. 提交更改(git commit -m 'Add amazing feature')
  6. 推送到分支(git push origin feature/amazing-feature)
  7. 打开拉取请求

测试

  • 96%的测试覆盖率 -1058项测试通过
  • 多种测试类型 -单元、集成、组件测试
  • 工件系统测试 -会话隔离,预览URL
  • CI/CD -GitHub每次推送操作
  • 预提交挂钩 -自动质量检查
# Run all tests
make test

# Run with coverage
make coverage

# Open coverage report
make coverage-html

许可证

Apache许可证2.0-请参阅 许可证 了解详情。

这是一个为学习和测试目的而提供的演示项目。

学分

数据来源:

  • 2025年LinkedIn绩效数据来自对100多万条帖子的分析
  • 9K公司页面基准测试
  • LinkedIn API文档

灵感来源:

支持

如有疑问和问题,请参阅项目文档。

路线图

  • \[\]其他帖子类型(活动、通讯)
  • \[\]LinkedIn分析集成
  • \[\]A/B测试框架
  • \[\]多账户支持
  • \[\]调度和自动化
  • \[\]使用真实API数据增强预览
  • \[\]通知的Webhook支持

更新日志

更改日志.md 版本历史。

______________________________________________________________________

⬆ 返回顶部

目录标签

目录标签

PythonClaude设计社交媒体工具本地部署内容创作LinkedIn自动化数据驱动优化企业社交

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

oauth

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

1

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiooauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP