harvestapi-mcp

harvestapi-mcp

MCP server providing read-only access to LinkedIn data (profiles, companies, posts, jobs, leads, ads, groups, and account info) via the HarvestAPI, exposing 25 tools over stdio.

Category
Visit Server

README

harvestapi-mcp

CI License: MIT Node >=20 MCP

MCP server for HarvestAPI — LinkedIn profiles, companies, posts, jobs, leads, ads, groups, and platform account data over the Model Context Protocol (stdio).

All 25 tools are read-only. No message sending, no connection automation, no billing mutations.

Legal / Ethical Notice

This server is a thin wrapper over the HarvestAPI LinkedIn-data API. You are responsible for complying with LinkedIn's Terms of Service, HarvestAPI's Terms, and applicable data-protection laws (GDPR, etc.) when using LinkedIn-sourced data. Do not use harvested data to spam, harass, or violate privacy. The maintainers provide no warranty and accept no liability for how you use the tool.

HarvestAPI is a third-party scraping/enrichment service — it is not affiliated with LinkedIn.

Prerequisites

  • Node.js 20+
  • A HarvestAPI key — get one at https://harvestapi.io/admin/api-keys

Install

git clone https://github.com/Hassan220022/harvestapi-mcp
cd harvestapi-mcp
npm ci
npm run build

Or run without cloning (after npm publish or via npx from the repo):

npx --yes github:Hassan220022/harvestapi-mcp

Environment

Variable Required Default Description
HARVESTAPI_KEY yes — Your HarvestAPI API key. Sent as X-API-Key.
HARVESTAPI_BASE_URL no https://api.harvestapi.io Override base URL (rarely needed).
HARVESTAPI_TIMEOUT_MS no 30000 Request timeout in ms.
HARVESTAPI_MAX_RETRIES no 2 Max retries for transient 5xx / 429 / timeout. Never retried for 401/403/422.

Copy .env.example to .env for local dev — but do not commit .env.

cp .env.example .env
# edit .env

Configure

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "harvestapi": {
      "command": "node",
      "args": ["/absolute/path/to/harvestapi-mcp/dist/index.js"],
      "env": {
        "HARVESTAPI_KEY": "your_key_here"
      }
    }
  }
}

Generic MCP (any stdio client)

{
  "command": "node",
  "args": ["/path/to/harvestapi-mcp/dist/index.js"],
  "env": { "HARVESTAPI_KEY": "your_key_here" }
}

Using npx (no local build)

{
  "mcpServers": {
    "harvestapi": {
      "command": "npx",
      "args": ["-y", "github:Hassan220022/harvestapi-mcp"],
      "env": { "HARVESTAPI_KEY": "your_key_here" }
    }
  }
}

Tools

25 tools, all harvest_*. Every tool maps to a verified HarvestAPI endpoint — see docs/tool-mapping.md and docs/harvestapi-endpoint-inventory.json.

Tool Description Required params
harvest_get_profile Get LinkedIn profile one of url, publicIdentifier, profileId
harvest_search_profiles Search LinkedIn profiles — (all filters optional)
harvest_get_profile_posts Get posts by a profile one of profile, profileId, profilePublicIdentifier
harvest_get_profile_comments Get comments by a profile one of profile, profileId, profilePublicIdentifier
harvest_get_profile_reactions Get reactions by a profile one of profile, profileId, profilePublicIdentifier
harvest_get_company Get LinkedIn company one of url, universalName, search
harvest_search_companies Search companies —
harvest_get_company_posts Get posts by a company one of company, companyId, companyUniversalName
harvest_get_group Get LinkedIn group one of url, groupId
harvest_search_groups Search groups —
harvest_search_geo_id Resolve LinkedIn Geo ID by text search
harvest_get_post Get a LinkedIn post url
harvest_search_posts Search LinkedIn posts —
harvest_get_post_comments Get comments on a post post
harvest_get_post_reactions Get reactions on a post post
harvest_get_comment_reactions Get reactions on a comment commentId or commentUrl
harvest_get_comment_replies Get replies to a comment commentId or commentUrl
harvest_get_job Get LinkedIn job one of jobId, url
harvest_search_jobs Search LinkedIn jobs —
harvest_search_leads Search leads (Sales Navigator) —
harvest_search_services Search LinkedIn services search
harvest_get_ad Get LinkedIn ad one of adId, url
harvest_search_ads Search LinkedIn ad library —
harvest_get_my_api_user Get your HarvestAPI user/account —
harvest_get_my_private_account_pools Get your private LinkedIn account pools —

Intentionally excluded (5 endpoints): accept-connection, send-connection, send-message, received-connections, sent-connections — they automate LinkedIn user actions. See tool-mapping.

Examples

Profile lookup

{ "tool": "harvest_get_profile", "arguments": { "publicIdentifier": "williamhgates" } }

Profile with enrichment flags

{ "tool": "harvest_get_profile", "arguments": { "url": "https://www.linkedin.com/in/williamhgates", "findEmail": "true", "skipSmtp": "true" } }

Company

{ "tool": "harvest_get_company", "arguments": { "universalName": "google" } }

Search profiles

{ "tool": "harvest_search_profiles", "arguments": { "search": "staff engineer", "currentCompany": "google", "page": "1" } }

Post comments

{ "tool": "harvest_get_post_comments", "arguments": { "post": "https://www.linkedin.com/posts/.../..." } }

Error & Rate-Limit Behavior

HTTP Behavior
401/403 HarvestApiError with hint — never retried. Check HARVESTAPI_KEY.
404/422 HarvestApiError — never retried.
429 HarvestApiError with Retry-After surfaced in message and retryAfter field. Retried with backoff respecting Retry-After up to HARVESTAPI_MAX_RETRIES.
5xx Retried with exponential backoff (400 ms × 2^attempt, max 5 s) up to HARVESTAPI_MAX_RETRIES.
timeout HarvestTimeoutError — retried with backoff up to HARVESTAPI_MAX_RETRIES.

HarvestAPI has no per-minute rate limit; concurrency limits are per plan (Free 1, Starter 5, Basic 10, Pro 20, Business 40) with queue size 10 — see https://docs.harvestapi.io/guides/concurrency.md. Exceeding queue returns an error; the client surfaces 429 with Retry-After when present.

Validation errors (missing required identifier, requireAtLeastOne) are local HarvestValidationError before any request.

Raw API payloads are preserved in responses. Email fields are only marked verified if the API says so.

Development

npm ci
npm run lint        # eslint
npm run typecheck   # tsc --noEmit
npm run build       # tsc
npm test            # vitest
npm run test:coverage
npm run check       # lint + typecheck + build + test

Needs Node 20+.

Project Docs

Security

  • HARVESTAPI_KEY is only read from env (HARVESTAPI_KEY). Never logged, never included in error bodies beyond redacted hints.
  • Never commit .env. .env.example contains placeholders only. .gitignore covers .env, node_modules, dist, coverage.
  • Report security issues via GitHub Issues (do not post keys in issues).

Contributing

PRs welcome. Run npm run check before submitting. See docs/research-notes.md for how endpoints are sourced and validated.

License

MIT — see LICENSE.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured