lhremote is a CLI and MCP server for LinkedHelper automation. The project is provided by Alexey Pelykh, and its goal is to let AI assistants (such as Claude) control LinkedIn outreach workflows through the Model Context Protocol.
Purpose It wraps common LinkedHelper operations as tools or command-line commands that AI can invoke, covering multiple stages from app management to LinkedIn interaction, making it easy to integrate LinkedIn outreach workflows into an AI assistant's workflow.
Main capabilities
- App management: detect, launch, and quit LinkedHelper instances.
- Account and instance control: list accounts, start/stop instances, check status.
- Campaign automation: create, configure, start, stop, and monitor campaigns, and manage complete action chains.
- People import: import LinkedIn profile URLs into campaign target lists.
- Profile lookup: find and search cached LinkedIn profiles from the local database.
- Messages: send direct messages, InMail, and connection requests, query message history, and check replies.
- LinkedIn interaction: visit profiles, endorse skills, follow/unfollow, like posts, comment, and react.
- Feed and post intelligence: read the LinkedIn feed, search posts, get post details, interaction statistics, and reactor lists.
- Profile enrichment: extract email, phone, social media, and company data from LinkedIn profiles.
- LinkedIn search: build search URLs, resolve entity IDs, and query reference data for search filters.
- Budget and rate-limit monitoring: check daily operation limits and LinkedIn rate-limit status.
- Action discovery: list available LinkedHelper action types and their configuration schemas.
Usage lhremote requires the LinkedHelper desktop app (paid subscription required). It can be run directly via npx. When using it in Claude Desktop, add the configuration to claude_desktop_config.json, after which Claude can directly use each registered tool. Typical workflow: find-app detects a running LinkedHelper instance (or use launch-app to start one); list-accounts to view available LinkedIn accounts; start-instance starts an instance for an account; describe-actions explores available action types; campaign-create creates a campaign from a YAML/JSON configuration; import-people-from-urls imports target LinkedIn profiles into a campaign; campaign-start runs the campaign; campaign-status / campaign-statistics monitor progress; query-messages / check-replies view message results.
The lhremote command provides the same functionality as the MCP server. Unless otherwise noted in the reference section, every MCP tool has a corresponding CLI command.
Regarding connection parameters, most tools and CLI commands connect to LinkedHelper through the Chrome DevTools Protocol (CDP). cdpPort is auto-discovered, not a default value: when omitted, lhremote finds the running LinkedHelper port on its own, whatever that port is; when no reachable instance exists, it throws LinkedHelperNotRunningError or LinkedHelperUnreachableError. Pass a port only when you need to target a specific instance. Two exceptions: quit-app only accepts cdpPort (it does not accept cdpHost, allowRemote, or accountId), and it defaults to 9222; when cdpHost is a non-loopback address, a port must be provided, because the discovery process only scans local processes.
accountId is required after multiple accounts are configured. With only one account, MCP tools resolve it on their own; with multiple accounts they cannot resolve it, and the call fails—most throw AccountResolutionError, while start-instance and stop-instance return their own messages. In either case, list-accounts can provide the ID. Every tool that connects to a running LinkedHelper accepts accountId; the ones that do not are the app management tools (find-app, launch-app, quit-app, whichapplies to the application rather than the account), reference tools (build-linkedin-url, resolve-linkedin-entity, list-linkedin-reference-data, describe-actions, which do not open a connection), and profile cache readers (query-profile, query-profiles, query-profiles-bulk, which search the local database of all accounts and cannot be scoped to a single account). The CLI does not automatically resolve for any number of accounts: start-instance / stop-instance accept the required positional parameter <accountId>, comment-on-post / react-to-post accept --account-id, and other commands do not expose this parameter.
Security warning: enabling allowRemote will allow CDP to connect to a remote host. CDP is a protocol not restricted by a sandbox and grants full control over the target browser—equivalent to remote code execution. Enable it only when the network path between your machine and the target host is completely secure (for example, an SSH tunnel, VPN, or trusted LAN).
Use cases Suitable for scenarios that require an AI assistant to perform LinkedIn outreach, activity management, profile queries, and interaction operations in batches or semi-automatically, and also suitable for invoking the same capabilities in scripts via the CLI.
Limitations LinkedIn monitors automation activity, and it is recommended to set the pace with reference to the Rate Limiting guide. Some operations consume a daily action budget. lhremote requires the LinkedHelper desktop application and a paid subscription. Regarding specific pricing, plan details, platform support scope, etc., the information is not yet available.