Skip to main content
Glama
mcp-linkedin-post-engager-capture

mcp-linkedin-post-engager-capture

LinkedIn Post Tracker and Comment Capture MCP Server

Smithery Glama score MCP Registry npm version npm downloads license mcpservers.org

MCP 服务器,用于 Apify 上的 Mamba Labs LinkedIn Post Tracker and Comment Capture actor。

将其指向 LinkedIn 个人资料或公司页面。它会以扁平行形式返回这些页面的近期帖子,并带有每个帖子的真实反应数和评论数,以及 LinkedIn 公开显示的评论者。无需 cookie、无需 LinkedIn 账户、无需任何凭据。

安装

npx -y @mambalabsdev/mcp-linkedin-post-engager-capture

Claude Desktop

{
  "mcpServers": {
    "mamba-linkedin-post-engager-capture": {
      "command": "npx",
      "args": ["-y", "@mambalabsdev/mcp-linkedin-post-engager-capture"],
      "env": { "APIFY_TOKEN": "your-apify-token" }
    }
  }
}

在 console.apify.com/account/integrations 获取 Apify 令牌。

Related MCP server: LinkedIn Data API MCP Server

工具

capture_linkedin_posts_and_commenters

输入 LinkedIn 个人资料和公司页面,输出其近期帖子和公开评论者。

输入

类型

必填

备注

profile_urls

数组

否

个人资料,例如 https://www.linkedin.com/in/williamhgates。国家子域名也可以。提供此项、company_urls 或两者。

company_urls

数组

否

公司页面,例如 https://www.linkedin.com/company/microsoft。提供此项、profile_urls 或两者。

posted_since

字符串

否

ISO 日期,例如 2026-08-01。早于此日期的帖子会被跳过 在收取任何费用之前。

collect_commenters

布尔

否

每个公开评论者一行。关闭它则仅收集帖子。默认 true。

collect_reactors

布尔

否

无论你设置什么,都不会返回反应行,因为 LinkedIn 不会向未登录访客提供反应者身份。此处提供该选项是为了让限制可见而非静默。默认 true。

max_engagers_per_post

整数

否

0 到 100。10 是 LinkedIn 对未登录访客的上限,因此将其提高到 10 以上没有作用。将其设置为 0 则仅支付帖子费用。默认 10。

use_residential_proxy

布尔

否

默认关闭,这是定价所假设的。Apify 会在此 actor 的事件之外额外收取住宅带宽费用。默认 false。

没有必填项。如果调用时两个 URL 列表都没有提供,则会返回一个 no_input 通知行而不是错误,这与 actor 的行为完全一致。

读取输出

一个数据集包含三种行类型,通过 row_type 区分。在加载表格之前先对其进行过滤。

  • post 是每个 LinkedIn 帖子一行。

  • engager 是每个公开评论者一行,通过 post_id 与帖子关联。

  • notice 是运行级或源级消息。

post_id 是 LinkedIn 活动 URN 的数字部分。它在不同运行、不同国家子域名以及两种永久链接拼写之间都是稳定的,因此可以安全地用作主键,也可以安全地用作“我是否已经将此发布到 Slack”的检查。

评论者限制是真实存在的,而且并不小。 LinkedIn 向未登录访客显示大约十条顶级评论,无论真实总数是多少。实测整个运行覆盖率为 4,857 个评论者中的 178 个,即 3.7%。大约 30% 的评论行没有时间戳。每个帖子行都带有 commenters_collected 和 commenters_available,因此任何给定帖子的覆盖率都是一个你可以读取的数字,而不是推断出来的。

反应者身份对未登录访客完全不可用。 每个帖子行仍然带有真实的 reaction_count,并且 reactors_status 显示 unavailable_without_login。

每一行都带有 degraded 和 degradation_reason。false 表示 actor 已查看;字段上的 null 表示它无法查看。在信任缺失之前,先对 degraded 进行过滤。有两件看似失败的事情故意不被标记为降级,因为两者都是测量结果:reactors_unavailable 是未登录 LinkedIn 的工作方式,而 no_posts_found 在已加载的页面上是真正的缺失。

计费

你按收集的每个帖子和每个评论者付费,外加少量 actor 启动费。通知行是免费的。posted_since 在任何费用产生之前进行过滤,因此定时运行如果找不到新内容,则只需支付 actor 启动费用,没有其他费用。

没有结果缓存:每次运行都会重新获取,这对于负责发现新帖子的 actor 来说是正确行为。定价见 actor 的 Apify 页面。运行此服务器会消耗 Apify 积分。

此服务器做什么和不做什么

它是 Apify actor 的轻量客户端。它传递你的输入并原样返回 actor 的输出。上述所有行为都存在于 actor 中,而不是这里。

它只读取 LinkedIn 向未登录访客提供的内容。它不持有会话 cookie,不使用 LinkedIn 账户,也不读取登录后的任何内容。

评论者行是具名的人。 当你运行此服务器时,你是其返回的个人数据的数据控制者,Apify 是处理者。你的合法依据由你自己确定;这里不构成法律建议。

此 actor 是非官方的,与 LinkedIn 或 Microsoft 无关联、无赞助、无认可关系。

错误会被暴露,绝不会被吞掉。无效输入、无效令牌、余额耗尽、超时或返回非数据集的运行,都会以明确的工具错误形式返回,而不是空结果。

来源

actor 位于 Apify Store。此包装器采用 MIT 许可证。

由 Mamba Labs 构建。

Available Tools

1 tool
capture_linkedin_posts_and_commentersCapture LinkedIn Posts and CommentersA
Idempotent

Point it at LinkedIn person profiles or company pages and it returns the posts a search engine has indexed for each one, as flat rows: permalink, author, a text excerpt, and the publish date decoded from the post id. No request is sent to LinkedIn and no cookie or account is used. A result counts only when its permalink names the source, so posts are never attributed to the wrong author. Coverage is what the search index holds: posts appear days or weeks after publishing and many never appear. Commenters, reaction counts, comment counts and media are no longer returned (removed 2026-10-12, they came only from LinkedIn pages). Rows carry row_type post or notice; filter on row_type before loading a table. post_id is the activity URN and is stable across runs. Every row carries degraded and degradation_reason. Requires an APIFY_TOKEN and consumes Apify credits. Read only.

NameRequiredDescriptionDefault
company_urlsNoLinkedIn company page URLs, for example https://www.linkedin.com/company/microsoft. Supply this, profile_urls, or both.
posted_sinceNoISO date or timestamp, for example 2026-08-01. Posts published before this are skipped BEFORE anything is charged. Leave empty to take everything the index holds.
profile_urlsNoLinkedIn person profile URLs, for example https://www.linkedin.com/in/williamhgates. Country subdomains such as uk.linkedin.com are fine. Supply this, company_urls, or both.
max_charge_usdNoOptional. The actor's own spend cap for this run, in USD. The run stops before a charge would take its total past this amount, writes one notice row saying so, and keeps every row already charged. Leave it empty for no cap of your own; the maximum cost per run set in Apify is honored either way.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: no request is sent to LinkedIn, no cookie or account is used, results only count when the permalink names the source, coverage is bounded by the search index, and commenters/reactions/media were removed on 2026-10-12. It also discloses the APIFY_TOKEN requirement, credit consumption, degraded/degradation_reason flags, and that post_id is a stable activity URN.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior, then layered with caveats, each of which carries real decision value (coverage limits, row_type, removed features, credits). It is long, but nearly every sentence prevents a specific failure mode; only minor tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully describes the return shape (permalink, author, text excerpt, decoded publish date, row_type, post_id, degraded flags). Combined with the cost, auth, and coverage disclosures, an agent has everything needed to invoke and interpret this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (company_urls, profile_urls, posted_since, max_charge_usd) are already fully documented in the schema, including the charge-cap behavior. The description adds no parameter-level detail beyond that, which is the correct baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — it returns search-indexed LinkedIn posts for supplied person profiles or company pages as flat rows — and names the exact fields returned. It also proactively corrects the misleading tool name by stating that commenters are no longer returned. An agent knows precisely what comes back without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operating guidance: filter on row_type before loading a table, use posted_since to avoid charges, and expect posts to appear days or weeks after publishing with many never indexed. There are no sibling tools to route against, so explicit alternatives cannot be named, but the coverage caveats make the appropriate context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.4.0
    • Changedcapture_linkedin_posts_and_commenters1 field changed
      • addedInput schema / properties / max_charge_usd
        Added value: +{
        +  "description": "Optional. The actor's own spend cap for this run, in USD. The run stops before a charge would take its total past this amount, writes one notice row saying so, and keeps every row already charged. Leave it empty for no cap of your own; the maximum cost per run set in Apify is honored either way.",
        +  "minimum": 0,
        +  "type": "number"
        +}
  2. 1 tool updatev1.3.0
    • Changedcapture_linkedin_posts_and_commenters8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / collect_commenters
        Removed value: -{
        -  "description": "Return one row per person who commented, with name, profile URL, comment text and comment likes. Turn it off to collect posts only, in which case commenters_collected comes back null rather than 0, because the actor did not look. Default: true.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / collect_reactors
        Removed value: -{
        -  "description": "LinkedIn serves no reactor identities to a logged-out visitor, so this returns no reaction rows whatever you set. It exists so the limit is visible rather than silent, and it adds one notice row per run. Set it to false to suppress that row. Default: true.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / company_urls / description
        Previous value: -"LinkedIn company page URLs whose recent posts you want, for example https://www.linkedin.com/company/microsoft. Supply this, profile_urls, or both."New value: +"LinkedIn company page URLs, for example https://www.linkedin.com/company/microsoft. Supply this, profile_urls, or both."
      • removedInput schema / properties / max_engagers_per_post
        Removed value: -{
        -  "description": "Caps the engager rows charged per post. LinkedIn shows about ten comments to a logged-out visitor, so ten is the platform ceiling and raising this above ten does nothing. Set it to 0 to pay for posts only. Default: 10.",
        -  "maximum": 100,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • changedInput schema / properties / posted_since / description
        Previous value: -"ISO date or timestamp, for example 2026-08-01. Posts published before this are skipped BEFORE anything is charged, so a scheduled run that finds nothing new costs the actor start and nothing else. Leave empty to take everything the page advertises."New value: +"ISO date or timestamp, for example 2026-08-01. Posts published before this are skipped BEFORE anything is charged. Leave empty to take everything the index holds."
      • changedInput schema / properties / profile_urls / description
        Previous value: -"LinkedIn person profile URLs whose recent posts you want, for example https://www.linkedin.com/in/williamhgates. Country subdomains such as uk.linkedin.com are fine. Supply this, company_urls, or both."New value: +"LinkedIn person profile URLs, for example https://www.linkedin.com/in/williamhgates. Country subdomains such as uk.linkedin.com are fine. Supply this, company_urls, or both."
      • removedInput schema / properties / use_residential_proxy
        Removed value: -{
        -  "description": "Off by default, which is what the pricing assumes and what was measured. Turn it on only if LinkedIn starts refusing the platform's datacenter addresses. Apify bills residential bandwidth on top of this actor's events. Default: false.",
        -  "type": "boolean"
        -}
  3. 1 tool updatev1.0.1
    • First observedcapture_linkedin_posts_and_commenters

TDQS

A4.3/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no possibility of selecting the wrong one. Its purpose (capture indexed LinkedIn posts for given profiles/pages) is stated unambiguously.

Naming Consistency4/5

The single name uses a clear snake_case verb_noun form, which is internally consistent. However, it still advertises 'commenters' even though the description says commenter data was removed, making the name stale and slightly misleading.

Tool Count3/5

The server exposes exactly one tool for a very narrow, read-only capture operation, so the count is defensible but thin. An agent gets no separate means to list sources, filter row types, or fetch metadata without parsing the single flat output.

Completeness4/5

For a read-only 'capture posts from a search index' domain, one tool covers the whole lifecycle and returns stable post_id, row_type, and degradation flags. Gaps are minor: no dedicated source-validation or post-filtering operation, and the name's promise of commenters is no longer fulfilled.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables extraction of comprehensive LinkedIn profile data including experience, education, skills, and contact information through browser automation. Requires manual LinkedIn credentials input and uses anti-detection measures for reliable scraping.
    5
    -
  • A
    license
    C
    quality
    D
    maintenance
    Enables access to comprehensive LinkedIn data, including professional profile details, company information, and social engagement metrics. It supports searching for people, retrieving posts and comments, and fetching detailed experience, skills, and recommendations.
    52
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to discover and fetch LinkedIn posts with engagement metrics (reactions, comments, shares) and author details, returning structured JSON per post.
    -