# alexey-pelykh/lhremote [Health: Active]

**Category:** 🎯 Marketing  
**Repository:** https://github.com/alexey-pelykh/lhremote  
**GitHub Stars:** 13  
**npm Downloads (last month):** 201  
**Views:** 3  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/alexey-pelykh-lhremote

## Description
Open-source CLI and MCP server for LinkedHelper automation — 32 tools for campaign management, messaging, and profile queries via Chrome DevTools Protocol.

## Tools
Capabilities this server exposes over MCP:

- **find-app** — Detect running LinkedHelper application instances and their CDP connection details.
- **launch-app** — Launch the LinkedHelper application with remote debugging enabled.
- **quit-app** — Quit the LinkedHelper application.
- **list-accounts** — List available LinkedHelper accounts. Returns account ID, LinkedIn ID, name, and email for each account.
- **start-instance** — Start a LinkedHelper instance for a LinkedIn account.
- **stop-instance** — Stop a running LinkedHelper instance.
- **check-status** — Check LinkedHelper connection status, running instances, and database health.
- **campaign-list** — List existing campaigns with summary statistics.
- **campaign-create** — Create a new campaign from YAML or JSON configuration.
- **campaign-get** — Get detailed campaign information including action chain.
- **campaign-export** — Export campaign configuration as YAML or JSON.
- **campaign-update** — Update a campaign's name and/or description.
- **campaign-delete** — Delete (archive) a campaign.
- **campaign-erase** — Permanently erase a campaign and all related data from the database. This is irreversible — unlike `campaign-delete` (which archives), this removes all campaign data permanently.
- **campaign-start** — Start a campaign with specified target persons. Returns immediately (async execution).
- **campaign-stop** — Stop a running campaign.
- **campaign-status** — Check campaign execution status and results.
- **campaign-statistics** — Get per-action statistics for a campaign.
- **campaign-retry** — Reset specified people for re-run in a campaign.
- **campaign-add-action** — Add a new action to a campaign's action chain. Use `describe-actions` to explore available action types.
- **campaign-remove-action** — Remove an action from a campaign's action chain.
- **campaign-update-action** — Update an existing action's configuration in a campaign. Only provided fields are changed.
- **campaign-reorder-actions** — Reorder actions in a campaign's action chain.
- **campaign-move-next** — Move people from one action to the next in a campaign.
- **campaign-exclude-list** — View the exclude list for a campaign or action.
- **campaign-exclude-add** — Add people to a campaign or action exclude list.
- **campaign-exclude-remove** — Remove people from a campaign or action exclude list.
- **campaign-list-people** — List people assigned to a campaign with their processing status.
- **campaign-remove-people** — Remove people from a campaign's target list entirely. This is the inverse of `import-people-from-urls`.
- **import-people-from-urls** — Import LinkedIn profile URLs into a campaign action target list. Idempotent — previously imported URLs are skipped.
- **collect-people** — Collect people from a LinkedIn page into a campaign. Detects the source type from the URL automatically.
- **list-collections** — List all LinkedHelper collections (Lists) with people counts.
- **create-collection** — Create a new named LinkedHelper collection (List).
- **delete-collection** — Delete a LinkedHelper collection (List) and all its people associations.
- **add-people-to-collection** — Add people to a LinkedHelper collection. Idempotent — adding an already-present person is a no-op.
- **remove-people-from-collection** — Remove people from a LinkedHelper collection.
- **import-people-from-collection** — Import all people from a LinkedHelper collection into a campaign. Large sets are automatically chunked.
- **query-profile** — Look up a cached LinkedIn profile from the local database by person ID or public ID.
- **query-profiles** — Search for profiles in the local database with name, headline, or company filters.
- **query-profiles-bulk** — Look up multiple cached LinkedIn profiles in a single call.
- **query-messages** — Query messaging history from the local database.
- **check-replies** — Check for new message replies from LinkedIn.
- **scrape-messaging-history** — Scrape messaging history from LinkedIn for specified people into the local database. This is a long-running operation that may take several minutes.
- **visit-profile** — Visit a LinkedIn profile via LinkedHelper's VisitAndExtract action and return the extracted profile data. Deducts from the daily action budget.
- **endorse-skills** — Endorse skills on a LinkedIn profile via an ephemeral campaign. Deducts from the daily action budget.
- **enrich-profile** — Enrich a LinkedIn profile by extracting additional data (emails, phones, socials, company info) via an ephemeral campaign. Deducts from the daily action budget.
- **follow-person** — Follow or unfollow a LinkedIn profile via an ephemeral campaign. Deducts from the daily action budget.
- **like-person-posts** — Like and optionally comment on posts and articles by a LinkedIn profile via an ephemeral campaign. Deducts from the daily action budget.
- **message-person** — Send a direct message to a 1st-degree LinkedIn connection via an ephemeral campaign. Deducts from the daily action budget.
- **send-invite** — Send a LinkedIn connection request via an ephemeral campaign. Deducts from the daily action budget.
- **send-inmail** — Send an InMail message to a LinkedIn member (no connection required) via an ephemeral campaign. Deducts from the daily action budget.
- **remove-connection** — Remove a person from 1st-degree LinkedIn connections (unfriend) via an ephemeral campaign. Deducts from the daily action budget.
- **get-feed** — Read the LinkedIn home feed. Returns structured post data with cursor-based pagination.
- **get-post** — Get detailed data for a single LinkedIn post including its comment thread.
- **get-post-stats** — Get engagement statistics for a LinkedIn post: reaction count (broken down by type), comment count, and share count.
- **get-post-engagers** — List people who engaged with a LinkedIn post (reacted, etc.) with their profile info and engagement type. Supports pagination. *MCP tool only — no CLI command.*
- **get-profile-activity** — Get recent posts/activity from a LinkedIn profile with cursor-based pagination.
- **search-posts** — Search LinkedIn for posts by keyword or hashtag. Returns structured post data with cursor-based pagination.
- **comment-on-post** — Post a comment on a LinkedIn post. Checks action budget before attempting.
- **react-to-post** — React to a LinkedIn post with a specific reaction type.
- **react-to-comment** — React to a specific LinkedIn comment with a specific reaction type. Use this for the organic-engagement pattern of acknowledging a reply (e.g., the post author replied to your comment) without extending the thread. Mirrors `react-to-post` semantics scoped to one comment via its URN (as returned by…
- **build-linkedin-url** — Build a LinkedIn URL for any supported source type. Supports SearchPage (basic search with faceted filters), SNSearchPage (Sales Navigator), and parameterised templates for company, school, group, and event pages. CLI command: `build-url`.
- **resolve-linkedin-entity** — Resolve human-readable names (company names, locations, schools) to LinkedIn entity IDs via LinkedIn's public typeahead endpoint. No authentication and no running LinkedHelper instance required. CLI command: `resolve-entity`.
- **list-linkedin-reference-data** — List LinkedIn reference data for finite enumerations (industries, seniority levels, functions, company sizes, connection degrees, profile languages). Use this to discover valid IDs for search filters. CLI command: `list-reference-data`.
- **describe-actions** — List available LinkedHelper action types with descriptions and configuration schemas.
- **get-errors** — Query current LinkedHelper UI errors, dialogs, and blocking popups.
- **dismiss-errors** — Dismiss closable error popups in the LinkedHelper instance UI by clicking their close/OK buttons. Recommended after `UIBlockedError`.
- **get-action-budget** — Get daily action budget showing limit types, thresholds, and today's usage from LH campaigns and CDP-direct actions.
- **get-throttle-status** — Check if LinkedIn is currently throttling the account.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "lhremote": {
    "command": "npx",
    "args": ["-y","lhremote"]
  }
}
```

## Documentation

## What alexey-pelykh/lhremote MCP server does

alexey-pelykh/lhremote MCP server exposes LinkedHelper automation through both MCP tools and a command-line interface. It can find a running LinkedHelper application, launch or quit it, list available LinkedIn accounts, start or stop account instances, and report connection or database status.

Campaign workflows include creating campaigns from YAML or JSON, reading and exporting configurations, changing metadata, archiving or permanently erasing campaigns, and starting or stopping execution. Agents can inspect campaign status and statistics, retry selected people, manage action chains, move people between actions, and maintain campaign or action exclusion lists. LinkedIn profile URLs can be imported into campaign target lists, and assigned people can be listed or removed.

The README also documents capabilities beyond the supplied campaign tool list, including cached profile queries, messaging history and reply checks, LinkedIn actions such as profile visits and engagement, feed and post queries, profile enrichment, search-related helpers, action discovery, and throttle or budget monitoring.

## How it works

alexey-pelykh/lhremote MCP server communicates with the local LinkedHelper desktop application using Chrome DevTools Protocol connection details. The workflow starts by finding an existing application or launching one with remote debugging enabled. After an account is selected, an instance can be started before campaign or LinkedIn actions are used.

The MCP entry point runs as the `mcp` subcommand. The CLI exposes corresponding commands for the documented MCP operations, with JSON output options on many commands. Campaign creation accepts a file or inline YAML/JSON configuration. Starting a campaign is asynchronous, so status and statistics commands are used to monitor execution.

## Setup and configuration

The project requires Node.js 24 or newer and the LinkedHelper desktop application. LinkedHelper requires a paid subscription. Install the npm package globally or run it through `npx`; for Claude Desktop, configure a local command using `npx`, the `lhremote` package, and the `mcp` subcommand.

A typical operating sequence is to detect or launch LinkedHelper, list accounts, start an account instance, inspect available action types, create a campaign, import profile URLs, start the campaign, and monitor its status. Campaign and targeting commands accept IDs, URLs, files, or inline values depending on the operation.

## Tools and capabilities

- Manage the LinkedHelper application and account instances.
- Create, inspect, export, update, archive, or erase campaigns.
- Configure, reorder, remove, and advance campaign actions.
- Import, exclude, list, retry, and remove campaign people.
- Query cached LinkedIn profiles and messaging data.
- Perform documented LinkedIn engagement, enrichment, feed, post, and search operations.
- Inspect available action types and campaign execution results.

## Limitations and notes

alexey-pelykh/lhremote MCP server depends on a locally installed LinkedHelper application rather than operating as a standalone LinkedIn client. Its documented prerequisites include a paid LinkedHelper subscription. LinkedIn monitors automated activity, so the project points users to its rate-limiting guidance. Permanently erasing a campaign removes its related database data and cannot be undone; campaign deletion is described as an archival operation instead.

_Full upstream README: https://allmcps.com/mcp/alexey-pelykh-lhremote/readme_

