使用说明
LinkedIn MCP服务器
一个生产就绪的模型上下文协议(MCP)服务器,用于LinkedIn与人工智能驱动的内容生成和高级屏幕截图功能的集成。通过统一的MCP界面自动发布LinkedIn帖子、生成引人入胜的内容并捕获精美的屏幕截图。
特性
- 🤖 人工智能驱动的内容生成 -使用OpenAI、Google Gemini或OpenRouter生成引人入胜的LinkedIn帖子
- 📸 高级屏幕截图 -捕获网站、代码片段和项目演示
- 🔄 审批工作流程 -发布前预览和批准帖子
- 📊 分析 -跟踪岗位绩效和敬业度
- 🎨 图像处理 -创建拼贴画,针对LinkedIn进行优化,并将代码格式化为精美的格式
- 🔐 OAuth 2.0身份验证 -安全的LinkedIn API集成
- 📝 项目分析 -自动分析项目并生成上下文帖子
安装
先决条件
- 包子 运行时(最新稳定版本)
- Linux 环境(在Ubuntu/Debian上测试)
- 铬 截图浏览器
- LinkedIn API证书 (请参阅LinkedIn API设置)
系统相关性
# Install Chromium and required libraries for Puppeteer
sudo apt-get update
sudo apt-get install -y chromium-browser libgbm1 libasound2
# Optional: Native screenshot tools
sudo apt-get install -y imagemagick
安装项目
# Clone the repository
git clone <your-repo-url>
cd linkedin-mcpserver
# Install dependencies
bun install
# Copy environment template
cp .env.example .env
# Edit .env with your credentials
nano .env
LinkedIn API设置
1.创建LinkedIn应用程序
- 首选 LinkedIn开发者
- 点击 创建应用程序
- 填写应用程序详细信息:
- 应用程序名称:您的MCP服务器
- LinkedIn页面:选择或创建页面
- 应用程序徽标:上传图标
- 隐私政策URL:您的隐私政策
- 点击 创建应用程序
2.获取API凭据
- 导航至 认证 标签
- 复制 客户端ID 和 客户端密钥
- 添加重定向URL:
http://localhost:3000/callback - 请求必要的权限:
w_member_social-创建帖子r_liteprofile-读取个人资料r_organization_social-组织分析
3.获取访问令牌
有两种方法:
方法A:AuthFlow(推荐)
import { LinkedInAuth } from './src/linkedin/auth.js';
const auth = new LinkedInAuth();
const authUrl = auth.getAuthorizationUrl();
console.log('Visit:', authUrl);
// After authorization, exchange code for token
const tokens = await auth.exchangeCodeForToken(code);
// Save tokens to .env
方法B:LinkedIn令牌检查器
- 首选 LinkedIn令牌工具
- 选择您的应用程序
- 选择所需范围
- 点击 请求访问令牌
- 将访问令牌复制到
.env
4.配置环境
更新 .env 文件:
LINKEDIN_CLIENT_ID=your_client_id_here
LINKEDIN_CLIENT_SECRET=your_client_secret_here
LINKEDIN_ACCESS_TOKEN=your_access_token_here
LINKEDIN_REDIRECT_URI=http://localhost:3000/callback
AI_PROVIDER=openai
OPENAI_API_KEY=your_openai_key_here
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
LINKEDIN_CLIENT_ID |
LinkedIn应用程序客户端ID | 必填 |
LINKEDIN_CLIENT_SECRET |
LinkedIn应用程序客户端机密 | 必填 |
LINKEDIN_ACCESS_TOKEN |
LinkedIn访问令牌 | 必填 |
LINKEDIN_REFRESH_TOKEN |
LinkedIn刷新令牌 | 可选 |
AI_PROVIDER |
人工智能提供商:openai、gemini、openrouter | openai |
OPENAI_API_KEY |
OpenAI API密钥 | 如果使用OpenAI,则为必需项 |
GEMINI_API_KEY |
Google Gemini API密钥 | 如果使用Gemini,则需要 |
OPENROUTER_API_KEY |
OpenRouter API密钥 | 如果使用OpenRouter,则为必需项 |
AI_MODEL |
AI模型名称 | gpt-4 |
SCREENSHOT_OUTPUT_DIR |
屏幕截图输出目录 | 。/屏幕截图 |
SCREENSHOT_DEFAULT_WIDTH |
默认视口宽度 | 1920 |
SCREENSHOT_DEFAULT_HEIGHT |
默认视口高度 | 1080 |
SCREENSHOT_QUALITY |
图像质量(1-100) | 90 |
用法
运行服务器
# Development mode
bun run dev
# Production mode
bun run start
与MCP客户端一起使用
VS代码/临床配置
添加到您的MCP设置中(例如。, ~/.cline/mcp_settings.json):
{
"mcpServers": {
"linkedin": {
"command": "bun",
"args": ["run", "/path/to/linkedin-mcpserver/src/index.ts"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret",
"LINKEDIN_ACCESS_TOKEN": "your_access_token",
"OPENAI_API_KEY": "your_openai_key"
}
}
}
}
可用工具
1. analyze_project
分析项目并生成LinkedIn帖子内容。
{
"name": "analyze_project",
"arguments": {
"project_path": "./my-project",
"include_commits": true,
"commit_count": 5,
"tone": "professional",
"length": "medium",
"capture_screenshots": true,
"screenshot_config": {
"include_demo": true,
"localhost_url": "http://localhost:3000",
"pages_to_demo": ["/", "/dashboard", "/settings"]
}
}
}
2. create_linkedin_post
创建并发布LinkedIn帖子。
{
"name": "create_linkedin_post",
"arguments": {
"content": "Excited to share my new project! 🚀\n\nBuilt with React, TypeScript, and Tailwind CSS...",
"visibility": "PUBLIC",
"media_urls": ["/path/to/screenshot.png"],
"require_approval": true
}
}
3. confirm_post
确认或拒绝待处理的帖子。
{
"name": "confirm_post",
"arguments": {
"request_id": "preview-1234567890",
"approved": true
}
}
4. preview_post
发布前预览帖子。
{
"name": "preview_post",
"arguments": {
"content": "My post content...",
"visibility": "PUBLIC"
}
}
5. capture_screenshot
从URL捕获屏幕截图。
{
"name": "capture_screenshot",
"arguments": {
"source_type": "url",
"source": "https://example.com",
"viewport_width": 1920,
"viewport_height": 1080,
"full_page": false
}
}
6. capture_project_demo
为项目演示捕获多个页面。
{
"name": "capture_project_demo",
"arguments": {
"project_url": "http://localhost:3000",
"pages_to_capture": ["/", "/features", "/pricing"],
"include_mobile_view": true,
"create_collage": true
}
}
7. capture_code_snippet
捕获格式精美的代码。
{
"name": "capture_code_snippet",
"arguments": {
"file_path": "./src/components/Hero.tsx",
"line_start": 10,
"line_end": 30,
"theme": "github-dark",
"show_line_numbers": true
}
}
8. create_screenshot_collage
合并多个屏幕截图。
{
"name": "create_screenshot_collage",
"arguments": {
"screenshot_paths": ["./img1.png", "./img2.png"],
"layout": "horizontal",
"spacing": 20
}
}
9. get_profile_info
获取LinkedIn个人资料信息。
{
"name": "get_profile_info",
"arguments": {}
}
10. get_post_analytics
获取参与后指标。
{
"name": "get_post_analytics",
"arguments": {
"post_id": "urn:li:share:1234567890"
}
}
示例工作流程
示例1:完整项目公告
// 1. Analyze project and generate content
const analysis = await analyzedProject({
project_path: "./my-app",
capture_screenshots: true,
screenshot_config: {
include_demo: true,
localhost_url: "http://localhost:3000",
pages_to_demo: ["/", "/dashboard"]
},
tone: "professional",
length: "medium"
});
// 2. Create post with preview
const post = await createLinkedInPost({
content: analysis.generated_content,
media_urls: analysis.screenshots,
visibility: "PUBLIC",
require_approval: true
});
// 3. Confirm after review
await confirmPost({
request_id: post.preview_id,
approved: true
});
示例2:代码段共享
// 1. Capture code screenshot
const code = await captureCodeSnippet({
file_path: "./src/auth/oauth.ts",
line_start: 45,
line_end: 75,
theme: "github-dark"
});
// 2. Post with manual content
await createLinkedInPost({
content: "Just implemented OAuth 2.0 authentication! 🔐\n\nHere's the core logic...",
media_urls: [code.path],
require_approval: false
});
示例3:每周进度更新
// Analyze recent commits
const analysis = await analyzeProject({
include_commits: true,
commit_count: 20,
tone: "casual",
length: "short"
});
// Post update
await createLinkedInPost({
content: analysis.generated_content,
visibility: "PUBLIC"
});
故障排除
身份验证问题
错误:“访问令牌无效”
- 验证令牌是否正确
.env - 检查令牌是否已过期(LinkedIn令牌过期)
- 从LinkedIn开发者门户申请新令牌
错误:“权限不足”
- 验证您的应用程序是否具有所需的作用域:
w_member_social,r_liteprofile - 使用正确的权限重新授权
屏幕截图问题
错误:“启动浏览器失败”
# Install Chromium
sudo apt-get install chromium-browser
# If on WSL, you may need:
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
export PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
错误:“页面加载超时”
- 增加代码或使用的超时时间
delay_ms参数 - 检查本地主机服务器是否正在运行
- 验证URL是否可访问
API费率限制
LinkedIn有费率限制:
- 帖子:每天100
- API调用:因端点而异
服务器实施速率限制,并将抛出 RateLimitError 当超过。
内存问题
如果浏览器实例未被清理:
// The server automatically cleans up, but you can force cleanup
import { puppeteerService } from './src/screenshots/puppeteer-service.js';
await puppeteerService.cleanup();
发展
项目结构
linkedin-mcpserver/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── config.ts # Configuration management
│ ├── linkedin/ # LinkedIn API integration
│ │ ├── auth.ts
│ │ ├── client.ts
│ │ ├── posts.ts
│ │ ├── media.ts
│ │ └── types.ts
│ ├── project-analysis/ # Project analysis & AI
│ │ ├── file-reader.ts
│ │ ├── git-analyzer.ts
│ │ ├── content-generator.ts
│ │ ├── context-builder.ts
│ │ └── ai-providers/
│ ├── screenshots/ # Screenshot system
│ │ ├── capturer.ts
│ │ ├── puppeteer-service.ts
│ │ ├── code-formatter.ts
│ │ ├── image-processor.ts
│ │ └── types.ts
│ ├── tools/ # MCP tools
│ │ ├── analyze-project.ts
│ │ ├── create-post.ts
│ │ ├── capture-screenshot.ts
│ │ └── ...
│ └── utils/ # Utilities
│ ├── logger.ts
│ ├── error-handler.ts
│ └── rate-limiter.ts
├── .env.example
├── package.json
├── tsconfig.json
└── README.md
运行测试
bun test
建筑
bun run build
安全考虑
- 永不承诺
.env文件 有证书 - 验证所有输入 在发布到LinkedIn之前
- 小心截图 -不要捕获敏感数据
- 使用审批工作流 对于重要职位
- 监控API使用情况 避免利率限制
- 审查生成的内容 发布前
速率限制
领英API限制:
- 帖子:每天100条
- 简介上写着:更宽容
- 分析:每小时有限
服务器实施速率限制以防止超过这些限制。
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件
支持
对于问题和疑问:
- GitHub问题:[您的仓库问题页面]
- 文档:此自述文件
- LinkedIn API文档:https://docs.microsoft.com/en-us/linkedin/
致谢
快乐发帖! 🚀