Skip to main content
Glama
jcnh74

linkedin-profile-manager-mcp

by jcnh74

linkedin-profile-manager-mcp

Node TypeScript MCP Tests License

Local-first MCP server for managing and improving your personal LinkedIn profile — safely.

This server drafts, audits, compares, and plans profile updates. It deliberately does not automate LinkedIn itself:

  • ❌ No scraping, no headless browsers, no anti-detection tricks

  • ❌ No LinkedIn credentials or session cookies — ever

  • ❌ No auto-clicking "Save" or auto-submitting profile edits

  • ✅ Human-in-the-loop approval (two-step token flow) for anything with a side effect

  • ✅ Official LinkedIn API only, and only for the one thing it actually supports for members: posting (OAuth + w_member_social), gated behind explicit config + per-post confirmation

  • ✅ For everything else (headline, About, experience, skills): generates polished drafts and a manual copy/paste plan with the exact LinkedIn edit URLs

Why no profile-edit automation? LinkedIn's public developer platform has no self-serve API for editing headline/About/experience/skills on personal profiles, and browser automation of those edits violates LinkedIn's User Agreement (§8.2 prohibits bots/scrapers/automation) and risks account restriction. Drafting locally + pasting manually is the only compliant workflow — so that's the workflow this server optimizes.

Why not an existing LinkedIn MCP server?

Before building this, five existing servers were evaluated (July 2026):

Project

Stars

Maintained

Transport

Method

Profile editing

stickerdaniel/linkedin-mcp-server

~2.7k

✅ active

stdio/HTTP

Browser-session scraping (your logged-in cookie)

❌ read-only

eliasbiondo/linkedin-mcp-server

~156

⚠️ sporadic

stdio

Patchright (anti-detection Playwright fork) scraping

❌ read-only

felipfr/linkedin-mcpserver

~74

❌ dead (Mar 2025)

stdio

Unofficial REST + stored credentials

❌ search/message

fredericbarthelet/linkedin-mcp-server

~38

❌ dead (Mar 2025)

SSE

✅ Official Community Management API (OAuth)

❌ post only

pegasusheavy → quinnjr/linkedin-mcp

~34

✅ active

stdio

Official OAuth/OIDC

⚠️ advertises 18 profile-edit tools against endpoints LinkedIn doesn't grant to self-serve apps

Conclusions that shaped this project:

  • The popular options are scraping-based — they operate your logged-in session with automation LinkedIn's User Agreement prohibits, and some use anti-detection tooling. That's account risk by design.

  • The official-API options are either unmaintained or claim member profile-edit capabilities the public API doesn't actually offer.

  • The only compliant, durable design is the one implemented here: you provide the profile data, the server does the intelligence locally, publishing goes through the official API only, and profile edits are prepared for manual application.

Related MCP server: linkedin-mcp

Tools

Tool

Risk level

What it does

get_profile_snapshot

local-write

Ingest your profile from pasted text, LinkedIn "Save to PDF" text, or JSON. Saved locally.

audit_profile

read-only

Scores: recruiter searchability, clarity, credibility, AI/engineering positioning, conversion.

generate_headline_variants

draft-only

Headline options (≤220 chars) for Senior Full Stack Engineer, Agentic AI Systems Engineer, AI Automation Consultant, React/Python/PHP Engineer.

rewrite_about_section

draft-only

About variants: concise, technical, founder-consultant, recruiter-friendly, ai-forward (≤2600 chars).

rewrite_experience

draft-only

Rewrites bullets: strong verbs, keywords, metric slots. Never invents metrics — you supply knownMetrics.

keyword_gap_analysis

read-only

Compares profile vs. target job descriptions; recommends missing keywords + natural placement.

generate_update_plan

draft-only

Step-by-step manual edit plan: field, edit URL, old text, new text, rationale.

export_profile_patch

local-write

Saves the plan as Markdown + JSON under ~/.linkedin-profile-manager/exports/. Never pushes.

create_linkedin_post

publishes-content ⚠️

Draft-first. Publishing requires preview→approval-token→confirm AND official OAuth AND enableOfficialPosting: true.

open_edit_page

opens-browser ⚠️

Opens a linkedin.com edit URL in your default browser (OS open only). You edit and save by hand.

scan_jobs

local-write

Fetch matching jobs from public job APIs (Remotive, RemoteOK) and cache them locally. Also returns a pre-filtered LinkedIn job-search URL for manual browsing — LinkedIn listings are never scraped.

rank_job_fit

read-only

Score cached jobs against your profile snapshot (keyword overlap + title affinity, 0–100).

prepare_application

draft-only

For a chosen job: fit summary, talking points from your real experience, cover note draft, and the apply URL. You open it and submit — never auto-applies.

track_applications

local-write

Local application tracker: statuses, notes, follow-up dates, overdue follow-ups.

Job-hunting workflow (scan → rank → prepare → you apply)

scan_jobs("senior full stack ai agents")     # public APIs + LinkedIn search URL
rank_job_fit(minScore: 50)                   # fit-scored shortlist
prepare_application(jobId: "remotive-123")   # talking points + cover note + apply URL
→ you open the URL, personalize, click Apply
track_applications(update: applied)          # local tracker with follow-up reminders

Why no auto-apply? There is no official API for member job applications, and automating Easy Apply through your browser session is both against LinkedIn's User Agreement and one of the most aggressively detected bot behaviors on the platform. The server automates everything up to the click; the click is yours.

Daily scan watchdog (optional)

scripts/job-scan.mjs is a standalone scanner built for schedulers (cron, launchd, Hermes cron): it fetches from the same public APIs, scores against your saved snapshot, remembers what it's shown you, and prints only new jobs at/above the fit threshold — silence means no news.

npm run build
node scripts/job-scan.mjs 60 "senior full stack engineer" "ai agents"

Wire it to a daily schedule and pipe stdout to your notifier of choice. Requires a profile snapshot (run get_profile_snapshot once first). State lives in ~/.linkedin-profile-manager/cron-seen-jobs.json (override dir with JOB_SCAN_DATA_DIR).

Requirements

  • Node.js ≥ 20

  • An MCP client (Claude Desktop, Claude Code, MCP Inspector, …)

Install

git clone <your-fork-url> linkedin-profile-manager-mcp
cd linkedin-profile-manager-mcp
npm install
npm run build
npm test        # 30 tests
npm run smoke   # boots the server on stdio and lists the 10 tools

Claude Desktop setup

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "linkedin-profile-manager": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/linkedin-profile-manager-mcp/dist/index.js"]
    }
  }
}

Restart Claude Desktop. The 10 tools appear under the 🔌 icon.

Claude Code setup

claude mcp add linkedin-profile-manager -- node /ABSOLUTE/PATH/TO/linkedin-profile-manager-mcp/dist/index.js

Configuration (optional)

Config is looked up at $LINKEDIN_MCP_CONFIG, then ./linkedin-mcp.config.json, then ~/.linkedin-profile-manager/config.json:

{
  "dataDir": "/Users/you/.linkedin-profile-manager",
  "profileSlug": "your-linkedin-slug",
  "enableOfficialPosting": false
}

The config loader refuses to start if it finds credential-like keys (password, li_at, cookie, …) in the file.

Optional: official posting (OAuth)

Only needed if you want create_linkedin_post to actually publish (instead of just drafting):

  1. Create an app at https://www.linkedin.com/developers/ and add the Share on LinkedIn and Sign In with LinkedIn using OpenID Connect products.

  2. Complete the OAuth 2.0 authorization-code flow to obtain a member access token with scopes openid profile w_member_social (the LinkedIn token generator tool works for personal use).

  3. Provide the token via environment only — never in the config file:

{
  "mcpServers": {
    "linkedin-profile-manager": {
      "command": "node",
      "args": ["/ABS/PATH/dist/index.js"],
      "env": { "LINKEDIN_ACCESS_TOKEN": "AQV..." }
    }
  }
}
  1. Set "enableOfficialPosting": true in your config file.

  2. Even then, every post requires the two-step preview → approval-token → confirm flow.

Typical workflow

  1. Open your profile → "Save to PDF" (or select-all/copy the page text).

  2. get_profile_snapshot with the text.

  3. audit_profile → see scores + findings.

  4. keyword_gap_analysis with 1–3 job descriptions you're targeting.

  5. generate_headline_variants / rewrite_about_section / rewrite_experience → pick your favorites.

  6. generate_update_plan with the chosen changes → get old/new/rationale per field.

  7. export_profile_patch → keep a local Markdown record.

  8. open_edit_page per section → paste, review, click Save yourself.

Example prompts

  • "Take this pasted LinkedIn profile and audit it for an Agentic AI Systems Engineer role."

  • "Generate 5 headline variants for AI Automation Consultant, then compare them against my current headline."

  • "Here are two job descriptions I want. Run a keyword gap analysis and tell me where to put the missing terms."

  • "Rewrite my Acme Corp experience bullets. Real metrics: cut deploy time 40min→6min, portal served 40k users."

  • "Build an update plan for the headline + About changes we agreed on, export it, and open the headline edit page."

  • "Draft a LinkedIn post about shipping an MCP server. Don't publish — just draft."

Safety notes

  • ToS compliance: LinkedIn's User Agreement prohibits scraping and automation of the site. This project touches LinkedIn servers only through the official, versioned REST API, and only for posting, and only when you've configured OAuth and confirmed each post.

  • Approval tokens: every side-effecting call is two-step. The first call returns a preview + single-use token (10-min TTL, payload-hashed). If the content changes between preview and confirm, the action is blocked — the human always sees exactly what will happen.

  • No secrets on disk: the access token lives in an env var. The config loader rejects files containing credential keys. .gitignore covers config and data dirs.

  • Metric honesty: rewrite_experience flags bullets that need metrics but never fabricates numbers.

  • Pacing: apply manual edits gradually; consider disabling "Share profile updates with your network" in LinkedIn settings before a big revamp.

Development

npm run dev        # run from source (tsx)
npm test           # vitest, 30 tests
npm run inspector  # MCP Inspector UI against the built server

Project structure

src/
  index.ts                     # MCP server, 10 tool registrations (stdio)
  types.ts                     # Profile domain types + Zod schemas
  config.ts                    # local config, credential-key rejection
  keywords.ts                  # role keyword banks, JD keyword extraction
  tools/                       # one module per tool (pure, testable)
  linkedin/
    officialApiClient.ts       # ONLY code that talks to LinkedIn (OIDC userinfo + Posts API)
    browserOpenOnly.ts         # OS-level "open URL" — the only browser interaction
  storage/localProfileStore.ts # local snapshots + exports
  safety/
    approvals.ts               # two-step HITL approval tokens
    riskLabels.ts              # risk taxonomy shown in every tool description
tests/                         # vitest suites: snapshot, analysis, safety
scripts/smoke.mjs              # stdio boot + tools/list smoke test

License

MIT

Available Tools

10 tools
audit_profileAudit profileA

[risk: read-only] Reads/analyzes locally stored profile data. No network calls to LinkedIn. Score the saved profile snapshot for recruiter searchability, clarity, credibility, AI/engineering positioning, and conversion.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetRoleNoagentic-ai-systems-engineer

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description includes '[risk: read-only]' and 'No network calls to LinkedIn', clearly indicating a safe, non-destructive operation. Since no annotations are present, the description fully carries the burden and does so effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and front-loaded with a risk annotation. However, it could include the parameter and output expectations without added length, so it loses a point for missing relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose and behavior well, but lacks the optional parameter targetRole and does not detail the output format (e.g., score ranges). Given no output schema, this additional context would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one optional enum parameter (targetRole) with 0% description coverage, but the description does not mention it at all. For a tool with a single parameter, this omission is a significant gap in usability.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads and analyzes locally stored profile data and scores it for multiple dimensions. It distinguishes from sibling tools like get_profile_snapshot (retrieve) and export_profile_patch (export) by focusing on analysis and scoring.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use after obtaining a profile snapshot, noted by 'Score the saved profile snapshot'. It explicitly states no network calls, but it does not provide explicit when-not-to-use or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_linkedin_postCreate LinkedIn post (draft-first)A

[risk: publishes-content | confirmation required] Can publish via the OFFICIAL LinkedIn API (OAuth, w_member_social). Requires confirm=true AND enableOfficialPosting in config. Draft a post. Publishing requires: preview call → human approval → confirm=true with approvalToken, AND official OAuth (LINKEDIN_ACCESS_TOKEN, w_member_social) AND enableOfficialPosting=true in config.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesPost body (LinkedIn cap: 3000 chars).
confirmNofalse = draft/preview only. true = publish (requires approvalToken from the preview step).
visibilityNoPUBLIC
approvalTokenNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description fully carries the burden. It explicitly lists risks (publishes-content, confirmation required), required OAuth scopes, the need for human approval, and the confirm flag with approvalToken. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose and repetitive, restating the publishing requirements. It could be condensed into a more structured format, e.g., bullet points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description covers the core workflow adequately. However, it does not specify what the tool returns (e.g., post ID or URL), leaving a gap for agents needing return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, and the description adds context for confirm and approvalToken in the workflow. However, it does not elaborate on the other parameters (text, visibility) beyond the schema, so baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description clearly state the tool creates LinkedIn posts with a draft-first workflow. It distinguishes itself from siblings by being the only post-creation tool in the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the required configuration (enableOfficialPosting, OAuth) and the two-step process (preview then confirm). It does not explicitly exclude use cases, but as the sole posting tool, differentiation is not necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_profile_patchExport profile patchA

[risk: local-write] Writes files to the local data directory. Nothing is sent to LinkedIn. Save the most recent update plan as local Markdown + JSON files. Never pushes anywhere.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoprofile-patch

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses critical behavior: [risk: local-write], nothing sent to LinkedIn, never pushes. This is transparent about safety and scope, though it could mention file overwrite behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—three short sentences. It front-loads the risk warning and gets to the point without extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers purpose, behavior, and constraints. It may be missing context about dependency on generate_update_plan, but the sibling list provides that implicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter 'name' with 0% description coverage. The description does not explain what the parameter controls (e.g., file name, path), leaving the agent to infer from the default value 'profile-patch'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes files to the local data directory, saving an update plan as Markdown+JSON. It distinguishes from siblings like generate_update_plan by emphasizing local export and no external push.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says to save the most recent update plan locally and never push anywhere, implying local-only usage. However, it does not explicitly state when to use this versus generate_update_plan or other alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_headline_variantsGenerate headline variantsA

[risk: draft-only] Generates draft text locally. Nothing is sent to LinkedIn. Generate LinkedIn headline options (max 220 chars) for a target role.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
targetRoleYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description discloses key behavioral traits: it is draft-only and nothing is sent to LinkedIn. This clarifies non-destructive behavior, though auth or rate limits are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the risk and purpose. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description omits the output format (e.g., list of strings) and does not mention the count parameter. Given no output schema, this gap reduces completeness for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%. The description does not explain the 'count' or 'targetRole' parameters, despite the schema providing defaults, enums, and constraints. The agent lacks guidance on parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it generates LinkedIn headline options with a character limit for a target role. This distinguishes it from sibling tools like rewrite_about_section or keyword_gap_analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly notes it is draft-only and local, indicating safe use for drafting. However, it does not specify when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_update_planGenerate manual update planA

[risk: draft-only] Generates draft text locally. Nothing is sent to LinkedIn. Build a step-by-step MANUAL LinkedIn editing plan: field, edit URL, old text, new text, rationale. You apply changes by hand.

ParametersJSON Schema
NameRequiredDescriptionDefault
changesYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the tool is local and draft-only, indicating no data is sent and no changes are applied. This provides good transparency for a non-destructive tool, though it does not elaborate on rate limits or auth needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences that front-load the risk and local nature. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the plan format (field, edit URL, old text, new text, rationale). It covers the main input parameter and output behavior, though it could briefly mention the return format explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter 'changes' with a description for the 'field' property. The description adds context about the output plan containing 'edit URL' and 'old text', but does not significantly enhance understanding of the input structure beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a manual editing plan locally without sending data to LinkedIn. It distinguishes from siblings like rewrite_* or create_linkedin_post by emphasizing the manual, draft-only nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for drafting manual plans, with phrases like 'You apply changes by hand' and 'Nothing is sent to LinkedIn.' However, it does not explicitly state when to use this tool versus automated alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profile_snapshotGet profile snapshotA

[risk: local-write] Writes files to the local data directory. Nothing is sent to LinkedIn. Ingest your current LinkedIn profile from pasted text, exported PDF text, or structured JSON. No scraping; you provide the data.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonNoStructured profile (for json source)
textNoProfile text (for pasted_text / pdf_text)
sourceYespasted_text: raw copy/paste from your profile page. pdf_text: text extracted from LinkedIn's 'Save to PDF'. json: structured Profile JSON. load_saved: reload the last saved snapshot.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that files are written locally and nothing is sent to LinkedIn (risk: local-write). However, it lacks details on what exactly is written (e.g., file format, location, overwrite behavior) and whether the tool returns a status or path. This is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph, front-loaded with risk and purpose. It efficiently conveys essential information without extraneous text. Every sentence contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, nested JSON, no output schema), the description is incomplete. It does not explain what the tool returns after processing (e.g., a confirmation, file path, or snapshot ID). For a file-writing tool, this is a notable gap. The behavior for different sources is described, but the output is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing a baseline of 3. The description adds value beyond the schema by explaining each source enum value (e.g., 'raw copy/paste from your profile page' for pasted_text) and clarifying that the json parameter expects a 'Structured profile' and text parameter is for pasted/PDF text. This enhances understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes files locally to ingest LinkedIn profile data from various sources (pasted text, PDF text, structured JSON, or load saved). It distinguishes from siblings like audit_profile or rewrite_experience, which modify or analyze data, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists four source types and explicitly says 'No scraping; you provide the data,' implying it should be used when a user has profile data to import. Although it doesn't directly contrast with siblings, the context suggests using this before other profile-related tools. No explicit 'when not to use,' but still clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keyword_gap_analysisKeyword gap analysisA

[risk: read-only] Reads/analyzes locally stored profile data. No network calls to LinkedIn. Compare the saved profile against target job descriptions (or a role keyword bank) and recommend missing keywords + natural placement.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetRoleNo
jobDescriptionsNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description includes '[risk: read-only]' and explicitly states 'No network calls to LinkedIn,' which clearly indicates the tool is safe and has no side effects. Since no annotations are provided, these statements effectively compensate. However, it does not mention any potential constraints like data volume limits or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences plus a bracketed risk tag. Every sentence adds value, and the risk indicator is front-loaded. No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, the description adequately outlines what the tool does and roughly what it returns. It covers the core functionality and safety. However, it does not specify the format or structure of the recommendations (e.g., list of keywords with scores), which would be helpful for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the schema by linking the two parameters: it explains that jobDescriptions can be used directly, or targetRole serves as a keyword bank. It also hints at the output (missing keywords + natural placement). With 0% schema description coverage, this is essential context. However, it could elaborate on default behavior when jobDescriptions is empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads/analyzes locally stored profile data and compares against job descriptions to recommend missing keywords. The verb 'compare' and 'recommend' specify the action, and it distinguishes from siblings like audit_profile or rewrite_about_section by focusing on keyword gaps. However, the purpose could be more explicit about the output being a list of keywords with placement suggestions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a user wants to identify missing keywords for a target role. However, it does not explicitly state when not to use it, nor does it mention alternatives among siblings (e.g., audit_profile for a different type of analysis). Guidance is implicit but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_edit_pageOpen LinkedIn edit pageA

[risk: opens-browser | confirmation required] Opens a LinkedIn edit page in your default browser for MANUAL editing. No automation, no auto-save. Open a LinkedIn profile edit URL in your default browser for MANUAL editing. Two-step confirmation; no clicks, no auto-save.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
sectionYesWhich edit page to open: profile, headline, about, experience, skills, featured, education, public-profile-settings
approvalTokenNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly discloses that the tool opens a browser, requires confirmation, and does not auto-save. This provides important behavioral context beyond what structure provides, especially given no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat repetitive, stating the same opening action twice. It could be more concise, though the risk and confirmation notes are helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose and key behavioral traits but lacks parameter details, usage guidelines, and return information. Given no output schema and no annotations, it is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 33% coverage (only section described), and the description adds no additional meaning to parameters. The 'two-step confirmation' hint relates to confirm but is not explicit. Parameters like approvalToken remain unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool opens a LinkedIn edit page for manual editing, specifying the action and resource. This distinguishes it from sibling tools like rewrite_about_section or create_linkedin_post, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for manual editing by stating 'no automation, no auto-save,' but does not explicitly state when to use it over alternatives or provide exclusions. No sibling tools are mentioned for comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rewrite_about_sectionRewrite About sectionA

[risk: draft-only] Generates draft text locally. Nothing is sent to LinkedIn. Produce polished About section variants: concise, technical, founder-consultant, recruiter-friendly, ai-forward.

ParametersJSON Schema
NameRequiredDescriptionDefault
stylesNo
extraContextNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool generates drafts locally without sending data to LinkedIn, which is critical safety information. It does not mention authentication or rate limits, but the local-only guarantee suffices.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded with essential info: risk/draft/local first, then purpose and styles. No fluff; every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, no output schema, and no annotations, the description covers the main purpose and styles. It lacks explanation of 'extraContext' and return values, but the safety info and variant list make it fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It lists the enum values for 'styles' (e.g., 'concise', 'technical'), adding meaning beyond the raw schema. However, the 'extraContext' parameter is not described, leaving a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Generates' with the resource 'draft text' for the About section, clearly specifying the output. It lists five distinct styles, making the tool's purpose unambiguous. This differentiates it from sibling tools like 'rewrite_experience' and 'generate_headline_variants'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states '[risk: draft-only]' and 'Nothing is sent to LinkedIn,' implying safe experimentation. This guides when to use: for local drafts without risk. However, it does not mention when not to use or compare to alternatives like 'rewrite_experience'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rewrite_experienceRewrite experience bulletsA

[risk: draft-only] Generates draft text locally. Nothing is sent to LinkedIn. Rewrite job experience bullets with strong verbs, technical keywords, and measurable impact. Never invents metrics — supply knownMetrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
experienceYesThe role to rewrite (from your snapshot or pasted fresh).
knownMetricsNoReal metrics you remember, e.g. 'cut deploy time from 40min to 6min'. NEVER invent metrics.
targetKeywordsNoKeywords to weave in naturally.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral disclosure. It clearly states the tool is 'draft-only', generates text locally, and does not send data to LinkedIn. It also warns against inventing metrics, which is a critical behavioral constraint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with no wasted words. It front-loads the risk warning and then efficiently states purpose, behavior, and constraints. Every sentence provides essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, one required nested object, and no output schema, the description adequately covers purpose, risk, parameter usage constraints, and behavioral traits. It could be more explicit about output characteristics, but the local draft nature is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds value with warnings and clarifications, such as 'Real metrics you remember... NEVER invent metrics' for knownMetrics, and 'The role to rewrite' for the experience object. This enhances meaning beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool rewrites job experience bullets with specific improvements (strong verbs, technical keywords, measurable impact), and the name and title reinforce this. It distinguishes itself from sibling tools like 'rewrite_about_section' by targeting experience bullets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Rewrite job experience bullets' and includes important constraints like 'Never invents metrics — supply knownMetrics' and 'Generates draft text locally. Nothing is sent to LinkedIn.' While it doesn't explicitly list alternatives, the sibling tools list provides context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv0.1.0
    • First observedaudit_profile
    • First observedcreate_linkedin_post
    • First observedexport_profile_patch
    • First observedgenerate_headline_variants
    • First observedgenerate_update_plan
    • First observedget_profile_snapshot
    • First observedkeyword_gap_analysis
    • First observedopen_edit_page
    • First observedrewrite_about_section
    • First observedrewrite_experience

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct aspect of LinkedIn profile management: auditing, posting, exporting, generating variants, analyzing keywords, and editing. No overlapping purposes.

Naming Consistency5/5

All tools follow a clear verb_noun snake_case pattern (e.g., audit_profile, create_linkedin_post). Convention is consistent across all 10 tools.

Tool Count5/5

10 tools is well-scoped for a profile manager. Covers key operations without redundancy or deficiency.

Completeness4/5

Covers core workflows: analysis, content generation, posting, exporting, and manual editing. Missing direct API-based profile updates, but manual editing via open_edit_page compensates.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first MCP server for research on AI-assisted browsing of a user-owned professional-network account (e.g., LinkedIn), providing read-focused tools such as profile, company, search, and feed reads.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A personal-use remote MCP server that lets you post to LinkedIn, queue/schedule drafts, and pull your own post analytics from Claude.
    29
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Local-first MCP server using LinkedIn's official OAuth and REST APIs to connect a member account, read profile, and publish text posts.
    4
    214
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for LinkedIn that lets Claude and ChatGPT read your profile, post updates, and generate a resume PDF pre-formatted for LinkedIn's Import Resume feature.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jcnh74/linkedin-profile-manager-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server