How to Configure LinkedIn Access in Agent Reach Using linkedin-mcp or Jina Reader
Agent Reach supports two backends for LinkedIn access: the full-featured linkedin-scraper-mcp server requiring mcporter configuration, or the zero-install Jina Reader fallback for public pages.
The Panniantong/Agent-Reach repository treats LinkedIn as a tier-2 channel, meaning you can configure LinkedIn access in Agent Reach through either a dedicated MCP server for rich data extraction or a simple HTTP fallback for basic page rendering. According to the source code in agent_reach/channels/linkedin.py, the system automatically detects which backend is available and prefers the MCP implementation when present.
Understanding LinkedIn Backend Options
Agent Reach implements a dual-backend strategy for LinkedIn integration. The LinkedInChannel.check() method (lines 22-41 in agent_reach/channels/linkedin.py) probes for available services and sets the active_backend attribute accordingly.
Full Access with linkedin-scraper-mcp
The linkedin-scraper-mcp backend provides API-like access to LinkedIn profiles, companies, and job searches. This requires installing the Python package linkedin-scraper-mcp and running the mcporter MCP server runtime. When properly configured, LinkedInChannel.check() returns status: "ok" and enables structured data extraction.
Fallback with Jina Reader
The Jina Reader backend requires no installation and renders public LinkedIn pages as Markdown via https://r.jina.ai/. If the mcporter probe fails, the channel automatically falls back to this method, setting active_backend = "Jina Reader" and returning status: "off" (but remaining usable).
Installing the linkedin-scraper-mcp Backend
To enable full LinkedIn functionality including structured profile and company data, follow these steps:
-
Install the Python package
pip install linkedin-scraper-mcp -
Install the MCP server runner
Agent Reach requires
mcporterto host the LinkedIn MCP server. Install it globally via npm:npm install -g mcporter -
Start the LinkedIn MCP server
Run the server using Docker (default port 3000):
docker run -d --name linkedin-mcp -p 3000:3000 stickerdaniel/linkedin-mcp-serverAlternatively, start it locally if you have the source:
mcporter serve linkedin -
Register the backend with mcporter
Agent Reach expects the service under the name
linkedin:mcporter config add linkedin http://localhost:3000/mcpVerify registration with:
mcporter config listYou should see output containing:
linkedin http://localhost:3000/mcp -
Verify Agent Reach detection
Run the health check to confirm the channel detects your MCP server:
agent-reach doctor --json | jq .linkedinExpected output:
{ "status": "ok", "message": "完整可用(Profile、公司、职位搜索)" }
The probing logic in agent_reach/probe.py (lines 46-77) executes mcporter config list and searches for the string "linkedin" to determine availability.
Using the Jina Reader Backend (No Installation)
If you prefer not to run an MCP server, Agent Reach automatically uses Jina Reader for any public LinkedIn URL:
agent-reach read https://www.linkedin.com/in/example-profile
This command invokes LinkedInChannel.read(), which forwards to the selected backend. With Jina Reader active, the output is a Markdown rendering of the HTML page suitable for LLM consumption or quick browsing. No additional configuration is required; simply ensure the mcporter service is not running or registered.
Verifying and Troubleshooting Configuration
The agent-reach doctor command runs LinkedInChannel.check() to report which backend is active. The check logic in linkedin.py executes probe_command("mcporter", ["config", "list"]) and parses the output:
- If the command succeeds and contains "linkedin", the channel marks
active_backend = "linkedin-scraper-mcp"and reports ok - If the probe fails, it falls back to Jina Reader and reports off
To force a specific backend, control the mcporter service availability:
- Enable MCP: Ensure
mcporter config listshows the LinkedIn entry and the Docker container is running - Disable MCP: Stop the container (
docker stop linkedin-mcp) or remove the config (mcporter config remove linkedin)
How Backend Selection Works in the Source Code
The channel implementation in agent_reach/channels/linkedin.py defines the discovery logic:
LinkedInChannel.check()(lines 22-41): Probes formcporterand sets backend priorityagent_reach/probe.py: Contains theprobe_commandutility that classifies command execution as missing, broken, ok, timeout, or erroragent_reach/cli.py: Lines 96-106 defineCHANNEL_INSTALLERS, noting LinkedIn as "manual setup, no auto-install"
The CLI entry points _cmd_install and _cmd_doctor in cli.py handle the installation guidance and health check reporting.
Summary
- Agent Reach detects LinkedIn backends automatically through the
LinkedInChannel.check()method inagent_reach/channels/linkedin.py - Full functionality requires installing
linkedin-scraper-mcp, running themcporterserver, and registering the service viamcporter config add linkedin - Zero-config fallback uses Jina Reader for public LinkedIn pages when the MCP server is unavailable
- Verification uses
agent-reach doctor --jsonto check which backend is active based onmcporterprobe results - Backend switching is controlled by starting or stopping the MCP Docker container
Frequently Asked Questions
Do I need a LinkedIn API key to use Agent Reach?
No. Agent Reach does not use the official LinkedIn API. The linkedin-scraper-mcp backend uses web scraping techniques through the MCP server, while the Jina Reader backend fetches public HTML pages and converts them to Markdown. Neither method requires API credentials, though you should respect LinkedIn's robots.txt and terms of service.
Can I switch between backends without reinstalling Agent Reach?
Yes. Simply start or stop the mcporter service. When mcporter is running and configured with mcporter config add linkedin, Agent Reach automatically selects the full MCP backend. When the service is stopped or unregistered, the LinkedInChannel.check() method falls back to Jina Reader. No changes to Agent Reach configuration files are needed.
Is Jina Reader sufficient for scraping company data?
Jina Reader only renders public HTML pages as Markdown, so it works for publicly visible LinkedIn profiles and company pages. However, it cannot access structured data like connection lists, job applicant details, or private profile sections. For programmatic access to LinkedIn data fields, you must configure the linkedin-scraper-mcp backend.
Where does Agent Reach store the backend configuration?
Agent Reach itself does not store LinkedIn credentials. The linkedin-scraper-mcp backend stores its configuration in mcporter's config file (typically ~/.mcporter.yaml), which Agent Reach probes at runtime using mcporter config list. The Jina Reader backend requires no local storage and operates statelessly via HTTP requests to https://r.jina.ai/.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →