From c0f1e7398fa73fe3b8f0d7b87a0934ef3b8ddf6d Mon Sep 17 00:00:00 2001 From: musaddiq08 <137469745+musaddiq-dev@users.noreply.github.com> Date: Thu, 18 Jun 2026 21:33:38 +0530 Subject: [PATCH] docs(skill): correct and expand LinkedIn MCP tool reference The career.md reference listed 4 LinkedIn tools with outdated signatures (keyword/limit params, full-URL identifiers, and a linkedin-scraper.* call prefix). The current linkedin-scraper-mcp exposes 17 tools, uses keywords (plural), and identifies entities by username / URL slug / job_id. Rewrite the reference against the live API: add login + mcporter stdio setup, document all read tools (people, companies, jobs, feed, messaging) with correct parameters and filter enums, keep the Jina fallback, and note that the MCP's write tools are out of scope for this read/search skill. Co-Authored-By: Claude Opus 4.8 --- agent_reach/skill/references/career.md | 96 ++++++++++++++++++++++---- 1 file changed, 81 insertions(+), 15 deletions(-) diff --git a/agent_reach/skill/references/career.md b/agent_reach/skill/references/career.md index f1b46fe7..c09124ae 100644 --- a/agent_reach/skill/references/career.md +++ b/agent_reach/skill/references/career.md @@ -1,29 +1,95 @@ -# 职场招聘 +# 职场招聘 / Career -LinkedIn。 +LinkedIn — via the `linkedin-scraper-mcp` server (browser automation), invoked +through mcporter. It is registered as the mcporter server `linkedin`, so every +call is `mcporter call 'linkedin.(...)'`. -## LinkedIn +## Setup ```bash -# 获取个人资料 -mcporter call 'linkedin-scraper.get_person_profile(linkedin_url: "https://linkedin.com/in/username")' +# One-time interactive login (opens a browser; session saved to ~/.linkedin-mcp/profile) +linkedin-scraper-mcp --login --no-headless +linkedin-scraper-mcp --status # verify the session is valid -# 搜索人才 -mcporter call 'linkedin-scraper.search_people(keyword: "AI engineer", limit: 10)' +# Register with mcporter (stdio transport; no long-running server needed) +mcporter config add linkedin --command linkedin-scraper-mcp --arg --transport --arg stdio +``` + +> Requires a valid login. Without it, only the Jina fallback (public pages) works. +> Run `mcporter list linkedin` to see the live tool signatures. + +Conventions: people are identified by **username** (`"williamhgates"`, not a URL), +companies by their **URL slug** (`"anthropicresearch"`, not the display name), jobs +by **`job_id`**. Search params are `keywords` (plural). + +## People + +```bash +# A person's profile. sections (comma-separated, optional): experience, education, +# interests, honors, languages, certifications, skills, projects, contact_info, posts +mcporter call 'linkedin.get_person_profile(linkedin_username: "williamhgates", sections: "experience,education")' -# 获取公司资料 -mcporter call 'linkedin-scraper.get_company_profile(linkedin_url: "https://linkedin.com/company/xxx")' +# The authenticated user's own profile +mcporter call 'linkedin.get_my_profile(sections: "experience,skills")' -# 搜索职位 -mcporter call 'linkedin-scraper.search_jobs(keyword: "software engineer", limit: 10)' +# Search people. network: ["F"]=1st, ["S"]=2nd, ["O"]=3rd+. current_company takes a +# numeric company URN id (from get_company_profile), not a plain company name. +mcporter call 'linkedin.search_people(keywords: "AI engineer", location: "Remote", network: ["F"])' + +# Profiles from the "people you may know" sidebar of a profile page +mcporter call 'linkedin.get_sidebar_profiles(linkedin_username: "williamhgates")' ``` -> **需要登录**: LinkedIn scraper 需要有效的登录态。 +## Companies + +```bash +# Company "about" page. sections (optional): posts, jobs +mcporter call 'linkedin.get_company_profile(company_name: "anthropic", sections: "posts")' + +# Recent posts from a company feed +mcporter call 'linkedin.get_company_posts(company_name: "docker")' + +# Search companies +mcporter call 'linkedin.search_companies(keywords: "fintech")' -### Fallback 方案 +# Employees + demographics (location / education / function breakdown). +# company_name MUST be the exact URL slug, e.g. "anthropicresearch" not "anthropic". +mcporter call 'linkedin.get_company_employees(company_name: "anthropicresearch", keywords: "engineer")' +``` -如果 MCP 不可用,可以用 Jina Reader: +## Jobs ```bash -curl -s "https://r.jina.ai/https://linkedin.com/in/username" +# Search jobs -> returns job_ids. Optional filters: +# max_pages 1-10 (default 3) | date_posted: past_hour|past_24_hours|past_week|past_month +# job_type: full_time,part_time,contract,temporary,volunteer,internship,other +# experience_level: internship,entry,associate,mid_senior,director,executive +# work_type: on_site,remote,hybrid | easy_apply: true|false | sort_by: date|relevance +mcporter call 'linkedin.search_jobs(keywords: "software engineer", location: "Remote", max_pages: 1, work_type: "remote")' + +# Full detail for one posting (job_id from search_jobs) +mcporter call 'linkedin.get_job_details(job_id: "4252026496")' +``` + +## Feed & messaging (read) + +```bash +mcporter call 'linkedin.get_feed(num_posts: 10)' # authenticated home feed +mcporter call 'linkedin.get_inbox(limit: 20)' # messaging inbox +mcporter call 'linkedin.get_conversation(linkedin_username: "williamhgates")' +mcporter call 'linkedin.search_conversations(keywords: "interview", limit: 10)' ``` + +> The MCP also exposes write tools (`connect_with_person`, `send_message`) plus +> `close_session`. Writes are out of scope for this read/search skill — only use +> them on explicit user instruction. + +## Fallback (no login, public pages only) + +```bash +curl -s "https://r.jina.ai/https://linkedin.com/in/williamhgates" +``` + +--- +Note: the pip package now prints a rename notice — it is `mcp-server-linkedin` +(`uvx mcp-server-linkedin@latest`); the `linkedin-scraper-mcp` entrypoint still works.