Linkedin Ads

io.github.mharnett由 GitHub 账号 mharnett 发布v1.0.2更新于 Oct 24, 2026

MCP server for LinkedIn Campaign Manager — campaigns, creatives, and analytics

已验证STDIO仅桌面数据与分析商业与电商

概览

AI 生成的概览

一个本地 MCP 服务器,让助手读取 LinkedIn Campaign Manager 的广告账户、广告系列、创意和效果分析数据。

可以做什么
列出广告账户,并通过客户端上下文工具在多个 LinkedIn 广告账户之间切换,借助工作目录定位配置和凭据。列出某个账户下的广告系列和广告系列组。按日期范围获取账户和广告系列效果,可选择时间粒度。运行灵活的透视分析,按人群属性、设备或创意细分。默认只读;未来的写入类工具在未显式开启写入模式时保持隐藏并被拒绝调用。
适用场景
适合管理 LinkedIn 广告、希望助手在对话中直接拉取广告系列列表、效果数据和人群属性或设备细分用于报告与分析的场景。也适合代理机构或内部团队管理多个广告账户。
运行要求
以 npm 包(mcp-linkedin-ads)形式在本地 Node.js 上运行,用 npm start 启动并通过本地 HTTP 端点连接。需要一个开通 Marketing Developer Platform 权限的 LinkedIn 开发者应用及 OAuth 凭据:LINKEDIN_ADS_CLIENT_ID、LINKEDIN_ADS_CLIENT_SECRET 和 LINKEDIN_ADS_ACCESS_TOKEN,以及至少包含一个广告账户 ID 的 config.json。可选 LINKEDIN_ADS_REFRESH_TOKEN 和 LINKEDIN_ADS_MCP_WRITE。需要访问 LinkedIn API 的网络。
安装前请注意
需要 LinkedIn OAuth 客户端凭据和访问令牌,可访问广告账户;README 提醒不要分享或提交配置文件,并将其加入 gitignore。令牌会过期,需要刷新。写入模式默认关闭;设置 LINKEDIN_ADS_MCP_WRITE=true 会向生产广告账户暴露写入类工具。LinkedIn 有严格的速率限制。广告效果数据会经由助手发送给模型提供方。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Linkedin Ads,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

LinkedIn Ads MCP Server

[npm version] [npm downloads] [GitHub stars] [License: MIT]

Production-grade MCP server for LinkedIn Campaign Manager API. Enables Claude to manage LinkedIn ad accounts, campaigns, ad sets, and creatives with full read/write support.

Features:

  • 7 tools -- production-tested
  • Multi-account management (multiple LinkedIn ad accounts)
  • Campaign and campaign group listing
  • Account and campaign performance analytics
  • Flexible pivot-based reporting (demographics, device, creative breakdowns)
  • Landing page click-based CTR (not total clicks)

Stats:

  • ⭐ Production-proven: active campaigns under management
  • 📊 Multi-client: per-client config, no client data in repo
  • 🔄 CTR accuracy: Uses landingPageClicks (not total clicks with engagement)
  • ✅ Full test coverage: 40+ contract tests

Installation

bash
npm install mcp-linkedin-ads

Configuration

Security: Never share your .mcp.json file or commit it to git -- it may contain API credentials. Add .mcp.json to your .gitignore.

  1. Get OAuth credentials:

    • Go to LinkedIn Developer Portal
    • Create a new app with "Sign In with LinkedIn" + "Marketing Developer Platform"
    • Scopes: r_ads, rw_ads, w_member_social, r_organization_social, w_organization_social
  2. Create config.json:

    bash
    cp config.example.json config.json
  3. Fill in your credentials:

    json
    {
      "oauth": {
        "client_id": "YOUR_CLIENT_ID",
        "client_secret": "YOUR_CLIENT_SECRET"
      },
      "clients": {
        "default": {
          "account_id": "YOUR_AD_ACCOUNT_ID",
          "name": "My Account"
        }
      }
    }
  4. Set environment variables (recommended for production):

    bash
    export LINKEDIN_ADS_CLIENT_ID="your_client_id"
    export LINKEDIN_ADS_CLIENT_SECRET="your_client_secret"
    export LINKEDIN_ADS_ACCESS_TOKEN="your_access_token"

Environment variables

VariableRequiredDefaultPurpose
LINKEDIN_ADS_CLIENT_IDyes--OAuth client ID
LINKEDIN_ADS_CLIENT_SECRETyes--OAuth client secret
LINKEDIN_ADS_ACCESS_TOKENyes--OAuth access token
LINKEDIN_ADS_REFRESH_TOKENoptional--OAuth refresh token (rotated automatically when set)
LINKEDIN_ADS_MCP_WRITEoptionalfalseSet to true to expose mutating tools. Read-only by default.

Read-only by default

The LinkedIn Ads MCP currently ships with read-only tools only. The write-mode gate is already in place so that any future create/update/pause/enable/remove tool is hidden from ListTools and refused at call time unless LINKEDIN_ADS_MCP_WRITE=true is set in the MCP server environment. This mirrors the Google Ads MCP gate and matches the pattern being rolled out to Bing / Reddit / Meta. Motivation: prevent a casual LLM request from mutating production ad accounts without the operator explicitly opting in.

Usage

Start the server

bash
npm start

Use with Claude Code

Add to ~/.claude.json:

json
{
  "mcpServers": {
    "linkedin-ads": {
      "type": "http",
      "url": "http://localhost:3001"
    }
  }
}

Claude Desktop: Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).

Example API Calls

typescript
// Get client context
linkedin_ads_get_client_context({ working_directory: "/path/to/project" })

// List campaigns
linkedin_ads_list_campaigns({ account_id: "511664399" })

// Get campaign performance
linkedin_ads_campaign_performance({
  start_date: "2026-01-01",
  end_date: "2026-03-31",
  time_granularity: "MONTHLY"
})

// Flexible analytics (e.g. by seniority)
linkedin_ads_analytics({
  start_date: "2026-03-01",
  end_date: "2026-03-31",
  pivot: "MEMBER_SENIORITY"
})

Key Data Conventions

CTR Calculation

  • Always use landingPageClicks (LP clicks), NOT clicks (total clicks)
  • Total clicks include social engagement (likes, comments, shares) which inflates CTR
  • This is critical for accurate campaign analysis

Campaign Status

  • DRAFT — Not yet active
  • ACTIVE — Actively serving
  • PAUSED — Paused manually
  • ARCHIVED — Historical record

Audience Targeting

  • Flexible targeting: flexible_spec array (OR logic between items)
  • Exclude targeting: exclude_spec array
  • Job titles, seniority levels, functions, locations all supported

CLI Tools

bash
npm run dev                 # Run in dev mode (tsx)
npm run build             # Compile TypeScript
npm test                  # Run contract tests

Architecture

Files:

  • src/index.ts — MCP server, OAuth flow, tool handlers
  • src/tools.ts — Tool schema definitions
  • src/errors.ts — Error handling & classification
  • config.json — Credentials & client mapping

Error Handling:

  • OAuth errors: Clear messages for token refresh needed
  • Rate limits: Automatic retry with backoff (recommended by LinkedIn)
  • Invalid campaigns: Validation before creation (save API quota)

Development

Adding a New Tool

  1. Define schema in src/tools.ts
  2. Add handler in src/index.ts tool dispatch
  3. Test with contract test in .contract.test.ts
  4. Document in here

Testing

bash
npm test -- --run        # Single run
npm test -- --watch      # Watch mode

Troubleshooting

Config file not found

bash
cp config.example.json config.json
# Fill in your OAuth credentials and account IDs

Missing required credentials

Check that:

  • LINKEDIN_ADS_CLIENT_ID and LINKEDIN_ADS_CLIENT_SECRET are set (or in config.json)
  • config.json exists and contains at least one client with account_id
  • OAuth tokens are valid (they expire)

Rate limit exceeded

LinkedIn enforces strict rate limits. The server includes automatic retry with exponential backoff. If you hit limits:

  • Wait before retrying
  • Batch operations when possible
  • Reduce query frequency

CTR seems too low

Verify you're using landingPageClicks (LP clicks), not clicks (all interactions). The latter includes social engagement and will inflate CTR incorrectly.

License

MIT

Contributing

Contributions welcome! Please:

  1. Add tests for new tools
  2. Update README with new features
  3. Follow existing code style
  4. Tag release with version

Support

  • Issues: GitHub issues for bugs/feature requests
  • Docs: See docs/ folder for detailed API reference
  • Community: Discussions in GitHub

Built By

Mark Harnett — Demand generation leader and paid media practitioner building AI-powered ad management tools. This server was born from managing LinkedIn campaigns across multiple clients and wanting Claude to handle campaign ops, performance analysis, and bulk creative updates autonomously.

Built with production workloads in mind: resilient API calls (circuit breakers, retry with backoff, response truncation), accurate CTR calculation (landing page clicks, not total clicks), and multi-account support.

Also by Mark: mcp-bing-ads -- Bing/Microsoft Ads MCP server with 10 tools.

Last Updated: 2026-03-13

来源:README.md,提交 05dcb5b

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.0.2最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分