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:

  1. Install the Python package

    pip install linkedin-scraper-mcp
  2. Install the MCP server runner

    Agent Reach requires mcporter to host the LinkedIn MCP server. Install it globally via npm:

    npm install -g mcporter
  3. 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-server

    Alternatively, start it locally if you have the source:

    mcporter serve linkedin
  4. Register the backend with mcporter

    Agent Reach expects the service under the name linkedin:

    mcporter config add linkedin http://localhost:3000/mcp

    Verify registration with:

    mcporter config list

    You should see output containing:

    
    linkedin  http://localhost:3000/mcp
    
  5. Verify Agent Reach detection

    Run the health check to confirm the channel detects your MCP server:

    agent-reach doctor --json | jq .linkedin

    Expected 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 list shows 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 for mcporter and sets backend priority
  • agent_reach/probe.py: Contains the probe_command utility that classifies command execution as missing, broken, ok, timeout, or error
  • agent_reach/cli.py: Lines 96-106 define CHANNEL_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 in agent_reach/channels/linkedin.py
  • Full functionality requires installing linkedin-scraper-mcp, running the mcporter server, and registering the service via mcporter config add linkedin
  • Zero-config fallback uses Jina Reader for public LinkedIn pages when the MCP server is unavailable
  • Verification uses agent-reach doctor --json to check which backend is active based on mcporter probe 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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →