Skip to main content
Glama

LinkedIn Evidence MCP

一个独立的社区构建工具。与 LinkedIn Corporation 或 Microsoft 无关联,未获其认可或赞助。"LinkedIn" 是 LinkedIn Corporation 的商标,此处仅用于描述本软件所交互的服务。

一个本地优先的 LinkedIn 工作区,具有一个共享引擎和两种同步使用方式:

  • stdio MCP 服务器,是证据、个人资料、起草、分析和维护的主要工作流引擎;

  • 可选的回环仪表盘,是在相同工具和数据之上的可视化支持和人工审核界面。

该应用在此计算机上维护自己的 SQLite 数据库和工件存储。它不包含 LLM、托管服务、调度器、爬取、浏览器自动化、cookie 复用或自动互动。

这里没有任何内容按定时器刷新。LinkedIn 数据仅在您或代理调用执行此操作的工具时才会被拉取。这是关于可预测性的产品决策,而非 LinkedIn 条款施加的限制——请参阅读取最新的 LinkedIn 个人资料

用途

该应用将您掌控的证据——简历、文档、代码仓库、LinkedIn 导出以及手动导入的历史记录——转化为:

  • 经过验证的声明账本;

  • 有证据支撑的规范个人资料;

  • 用于手动复制/粘贴的精确个人资料变更补丁;

  • 具有确定性验证的 LinkedIn 帖子草稿;

  • 内容支柱、机会和规划日历;

  • 发布审批和仅追加的审计历史;

  • 本地备份、导出和保留控制。

外部 LinkedIn 功能是可选的。在相应的开发者应用凭据被存储、经 LinkedIn 验证并在需要时明确启用之前,这些功能保持不可用。产品的其余部分无需这些凭据即可工作。

Related MCP server: linkedin-mcp

要求

  • Windows 10 或更高版本、Linux 或 macOS。 三个平台均受支持,并且每次推送时都会在三个平台上运行完整的测试套件。

  • Node.js 24 或更高版本(数据库使用内置的 node:sqlite

  • npm

证据导入接受每个平台自身的绝对路径形式:Windows 上的盘符路径,Linux 和 macOS 上的 / 根路径。这些规则确实不同——Windows 还拒绝 UNC 路径、备用数据流和保留设备名称,而 POSIX 规则拒绝嵌入的 NUL 字节和歧义的 // 根——因为危险的形态不同,而不是因为某个平台更受信任。

凭据保险库也不同,在依赖它之前值得了解这些差异。三者都提供相同的实际保证——复制到另一台机器或另一个账户的数据主目录无法被打开——但它们的强度并不相同:

平台

主密钥的密封方式

macOS

登录钥匙串中的随机密钥,由操作系统通过访问控制列表持有

最强

Windows

DPAPI,绑定到您的 Windows 账户

Linux

从主机机器 ID 和您的用户 ID 派生,从不写入磁盘

最弱——/etc/machine-id 是全局可读的,因此任何本地进程都可以派生相同的密钥

它们都无法防御以您的身份运行的软件,SECURITY.md 一直将其列为范围之外。该排名仅在本地攻击者属于您的威胁模型时才重要;如果是这样,请优先选择 macOS 或 Windows,或者完全不存储 LinkedIn 凭据——其他一切无需它们即可工作。

交互式设置助手仅限 Windows,因为它是 PowerShell。在 Linux 和 macOS 上,您需要手动配置 MCP 客户端,这只是一个 JSON 块——请参阅 MCP 服务器设置npm run setup:mcp 会打印出该块,并带有适合您平台的数据主目录,而不是失败。

可选的 LinkedIn 读取通道有第二个独立限制:LinkedIn 仅向位于欧洲经济区或瑞士的成员发放成员数据可移植性令牌。所有不涉及 LinkedIn 的功能均不受影响。

快速开始

从仓库根目录:

npm run setup:mcp

在 Windows 上,这将运行下面描述的交互式助手。在 Linux 和 macOS 上,该助手不适用——它是 PowerShell 并写入 Windows 客户端路径——因此 npm run setup:mcp 改为打印您手动添加到 MCP 客户端的那个 JSON 块,并带有适合您平台的数据主目录,本节的其余部分(PowerShell 命令)仅限 Windows。各客户端的示例请参阅 MCP 服务器设置;简版请参阅下面的不使用仪表盘使用 MCP,该部分在所有平台上完全相同。

先查看它将执行什么操作(Windows):

powershell -NoProfile -ExecutionPolicy Bypass -File .\setup-mcp.ps1 -All -NonInteractive -DryRun

Windows 在其默认的 Restricted 执行策略下拒绝运行未签名的 .ps1,因此裸的 .\setup-mcp.ps1 在未执行任何操作之前就会失败。-ExecutionPolicy Bypass 仅适用于该次调用,不会对机器做任何更改——这也正是 npm run setup:mcp 所做的。如果您不想仅凭信任,请先阅读脚本;-DryRun 会打印它将触及的每个文件,而不会以写入模式打开其中任何一个。

该助手会编辑属于其他应用程序的配置文件,因此在让它运行之前值得了解是哪些文件。根据您选择的客户端,它可能写入 ~/.codex/config.toml~/.claude.json%APPDATA%\Claude\claude_desktop_config.json%APPDATA%\Code\User\mcp.json~/.copilot/mcp-config.json~/.cursor/mcp.json~/.gemini/config/mcp_config.json。除非您传递 -NoPersistUserEnvironment,否则它还会将 LINKEDIN_MCP_HOME 保存为用户范围的环境变量。

它触及的每个文件都会先创建带时间戳的备份副本,仅替换 linkedin 条目,不是严格 JSON 的文件会被拒绝而不是重写,失败时会恢复原文件。

交互式助手会检查 Node.js,在需要时安装依赖项,构建 MCP 服务器,询问要配置哪些 AI 客户端,并将每个选择指向一个共享的数据主目录。它支持 Codex、Claude Code、Claude Desktop、VS Code/Copilot Chat、GitHub Copilot CLI、Cursor 和 Google Antigravity。现有的 JSON 配置会被合并并备份;仅替换 linkedin MCP 条目。

重启已配置的客户端,然后选择两个界面中的一个或两个:

# MCP server: normally started automatically by your AI client
npm run mcp:start

# Optional human review dashboard
npm run dashboard

mcp:start 通过 stdin/stdout 使用 JSON-RPC 通信,因此在普通终端中运行时看起来像是在等待。这是预期行为。请配置一个 MCP 客户端来启动它;请参阅 MCP 服务器设置

仪表盘会为 http://127.0.0.1:4780 打印一个一次性 URL。请参阅仪表盘用法

对于可重复或无人值守的设置:

powershell -NoProfile -ExecutionPolicy Bypass -File .\setup-mcp.ps1 -Clients Codex,Cursor,VSCode -NonInteractive
powershell -NoProfile -ExecutionPolicy Bypass -File .\setup-mcp.ps1 -All -NonInteractive

使用 -DataHome "C:\absolute\path" 选择不同的共享主目录。助手会将该绝对路径保存为当前用户的 LINKEDIN_MCP_HOME;在启动仪表盘之前打开一个新终端,以便它继承新保存的自定义值。如果您只想更改选定的客户端条目,请传递 -NoPersistUserEnvironment。助手从不询问或写入 LinkedIn 凭据。

MCP 与仪表盘之间的共享状态

仪表盘和每个已配置的 MCP 进程都打开相同的本地应用程序主目录。您可以在仪表盘中工作、关闭它、通过 AI 代理继续,然后稍后返回,无需手动导入或对账任何内容。

以下所有路径均位于数据主目录下(请参阅数据位置)。

共享状态

存储位置

证据、声明、个人资料状态、决策、草稿、修订、审批、发布历史、审计事件、设置和进度

data/linkedin.sqlite3

导入的工作副本和生成的工件

artifacts/

加密的 LinkedIn 凭据

SQLite 中的密文加上 secrets/ 中密封的主密钥——Windows 上为 DPAPI,macOS 上为钥匙串密封,Linux 上为机器派生

备份

backups/

SQLite WAL 模式和有限的重试写入允许仪表盘和 MCP 客户端同时运行。仪表盘在重新获得焦点时以及可见时定期刷新当前屏幕,因此代理端的更改无需重启即可显示。

这是单个用户账户上的本地同步,而非云或多机器同步。密钥对两个进程都可用,但绝不会被复制到 AI 客户端配置中、返回给模型、导出、记录或包含在备份中。

不使用仪表盘使用 MCP

仪表盘和 MCP 服务器是独立的进程。您无需在连接 Codex、Claude、Copilot、Cursor、Antigravity、VS Code 或其他 stdio MCP 主机之前启动仪表盘。

构建后,配置客户端以使用绝对路径启动编译后的入口点(Windows 上为反斜杠,Linux 和 macOS 上为 /):

node <absolute-path-to-repo>/linkedin-mcp-server/dist/index.js

要从人工操作的终端添加并导入第一个证据源——该路径仅为示例,请使用您平台接受的形态的绝对路径:

npm run evidence:add -- "C:\path\to\cv.pdf" document personal_doc "Current CV"
# Linux / macOS:  npm run evidence:add -- "/home/you/cv.pdf" document personal_doc "Current CV"

该命令显式注册、启用并导入源,而无需打开仪表盘。源类型为 repodocumentfolderlinkedin_exportmanual;信任级别为 personal_docown_repolocal_clone_reference

然后您可以要求已连接的代理:

Use the LinkedIn MCP capability-status tool, then list my evidence sources and candidate claims.

MCP 驱动正常的工作流。仪表盘包含专门构建的审核屏幕以及系统 → 所有 MCP 工具,后者暴露完全相同的经过验证的工具注册表——不存在仅限仪表盘的业务逻辑副本。密钥输入是唯一有意通过聊天不可用的操作。其他重要操作需要绑定到该操作的显式确认:

操作

无需仪表板的选项

注册、启用并导入证据

MCP(启用需要 ENABLE <source_id>)、npm run evidence:add -- ... 或仪表板/CLI

更改非机密设置

linkedin_settings_set MCP 工具

存储 LinkedIn 访问令牌

`npm run control -- lane configure read

write --client-id `(掩码提示)

授予、拒绝或修改发布审批

告知连接的代理您的决定,并确认其绑定命令 linkedin_approval_decide,或使用仪表板/控制 CLI

启用真实发布

linkedin_feature_control、仪表板功能,或 npm run control -- feature enable live_publishing --confirm,在写入通道验证之后

发布到账户

授予后使用 linkedin_publish_execute 配合 PUBLISH <approval_id>;此版本仅支持文本帖子

仅删除 LinkedIn 可移植性数据

linkedin_purge_run 模式 purge_dma,或 npm run control -- purge dma --confirm "DELETE LINKEDIN PORTABILITY DATA"prune_dma / --before <ISO> 删除较旧的历史记录并保留当前个人资料

永久清除所有本地数据

已确认的 linkedin_purge_run、仪表板,或 npm run control -- purge all --confirm "DELETE ALL LOCAL DATA"

运行 npm run control(不带参数)可进入交互式菜单。CLI 也是无需仪表板的机密输入界面;访问令牌会被掩码,且绝不会进入 MCP 负载。

共享功能控制

九个功能组存储在共享 SQLite 数据库中,并由 MCP 处理器和仪表板路由共同强制执行:evidenceprofilecontentpublication_workflowanalyticslinkedin_syncmaintenanceconfigurationlive_publishing。前八个默认启用,只有 live_publishing 默认禁用。

使用 linkedin_feature_control系统 → 功能 或以下方式列出描述和当前值:

npm run control -- feature list
npm run control -- feature disable analytics --confirm
npm run control -- feature enable analytics --confirm

功能策略与 LinkedIn 凭据/API 就绪状态是分开的。因此,启用 live_publishing 仍需要经过验证的写入通道,并且每次真实发布仍需要已授予的修订绑定审批以及精确的发布命令。

证据工作流与决策

预期流程以 MCP 优先:

  1. 使用 MCP 注册证据路径,然后通过代理、仪表板或控制 CLI 明确确认 ENABLE <source_id>

  2. 让代理导入证据,验证存储字节完整性,检查提取的工件,并提出带有引用的窄范围声明。

  3. 审查确切的陈述。非冲突声明仅在明确的人工确认后才成为已验证状态。

  4. 将冲突、模糊措辞和夸大陈述升级为人工审查。通过 MCP 对话或仪表板解决;两者调用相同的声明和冲突服务。

声明陈述是不可变的历史记录。“修改”会创建更正措辞作为新声明,然后拒绝或合并旧声明。这使先前的决策可审计,而不是静默重写证据。

数据位置

默认主目录遵循各平台自身的约定:

平台

默认主目录

Windows

%LOCALAPPDATA%\linkedin-mcp

macOS

~/Library/Application Support/linkedin-mcp(或 $XDG_DATA_HOME/linkedin-mcp(若已设置))

Linux

$XDG_DATA_HOME/linkedin-mcp,否则为 ~/.local/share/linkedin-mcp

设置 LINKEDIN_MCP_HOME 为绝对目录可使用不同的主目录或隔离的测试语料库;它在所有平台上覆盖默认值。相对路径会被拒绝,因为不同的客户端工作目录可能创建单独的数据库——在 Windows 上,类似 \linkedin-data 的驱动器相对路径也会因相同原因被拒绝,因为它会根据进程所在的驱动器进行解析。设置助手会在所有位置配置相同的绝对值。

请勿将实时主目录放在 OneDrive、Dropbox、Google Drive、iCloud Drive 或其他同步文件夹中。SQLite 使用实时 WAL 数据库,打开时不应复制。请改用内置备份命令。

仓库结构

路径

职责

linkedin-mcp-server/

主引擎:44 个 MCP 工具、5 个资源、5 个工作流提示、stdio 传输

linkedin-dashboard/

可选的环回视觉支持、人工审查和精确 MCP 工具控制台

packages/domain/

证据、个人资料、草稿、审批、发布、审计、保留

packages/db/

SQLite 驱动、迁移、乐观并发、工件存储

packages/importers/

路径安全的 ZIP、CSV、PDF、DOCX、仓库扫描和编辑

packages/linkedin/

故障关闭的 LinkedIn OIDC、DMA 和发布适配器

packages/shared/

规范 JSON、标识符和错误契约

scripts/

人工操作的入门、维护和评估命令

安全模型

  • 只有已验证的声明才能支持公开个人资料文本或草稿。

  • 导入的内容始终视为不可信数据,而非指令。

  • MCP 只能在用户明确确认确切审批命令后授予、拒绝或修改发布请求;授予绑定到修订哈希。

  • 审批绑定到一个确切的草稿修订,并在发布前消耗。

  • 不确定的网络结果变为 ambiguous;绝不会自动重试。

  • 审计日志是哈希链式的;链断裂会阻止审批和发布。

  • 导入将内容复制到工件存储中,绝不修改原始文件。

  • 机密被排除在 MCP 负载、日志、导出和备份之外。

开发与验证

npm ci
npm run typecheck
npm run build
npm test
npm run inspect:list
npm run test:visual

先构建再测试。 协议清洁度套件驱动编译后的 stdio 服务器,因此 npm test 需要 linkedin-mcp-server/dist/index.js 存在。按上述顺序执行步骤即可;无需单独设置。

inspect:list 通过 MCP Inspector 启动编译后的 stdio 服务器并请求其工具目录。视觉测试需要安装 Playwright 浏览器。

如需可选的 LinkedIn 开发者应用配置,请参阅 docs/linkedin-app-setup.md

文档

文档

涵盖内容

docs/architecture.md

两个界面,一个引擎;不明显的接缝

docs/compatibility.md

支持的平台、运行时、MCP 客户端以及已知的验证差距

docs/known-limitations.md

此项目不做什么,以及哪些限制是有意为之

docs/privacy-and-local-data.md

存储了什么、什么会离开机器、如何删除

docs/threat-model.md

资产、信任边界以及保护停止的位置

docs/releases.md

版本控制、升级以及为何不支持降级

docs/linkedin-app-setup.md

创建两个 LinkedIn 开发者应用

docs/dashboard-design.md

仪表板设计系统

docs/dashboard-manual-checks.md

手动可访问性和视口检查清单

SECURITY.md

报告漏洞;非目标

CONTRIBUTING.md

获得绿色构建;不可协商的规则

SUPPORT.md

在哪里提问,以及哪些内容超出范围

许可证

MIT — 请参阅 LICENSE。第三方依赖许可证列于 THIRD-PARTY-NOTICES.md;商标和关联措辞见 NOTICE

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first MCP server for research on AI-assisted browsing of a user-owned professional-network account (e.g., LinkedIn), providing read-focused tools such as profile, company, search, and feed reads.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A personal-use remote MCP server that lets you post to LinkedIn, queue/schedule drafts, and pull your own post analytics from Claude.
    24
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Local-first MCP server using LinkedIn's official OAuth and REST APIs to connect a member account, read profile, and publish text posts.
    4
    177
    MIT

View all related MCP servers

Related MCP Connectors

  • Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.

  • Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.

  • Search, label and export your LinkedIn saved posts, then draft, schedule and publish from them.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/victoryotzev/linkedin-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server