JM

juanasp/mercury

Developer tools
0 stars Quality 62 Trend 4Unlicense

Mercury — AI-powered job search companion. LinkedIn profile optimization, job scouting, resume tailoring, and recruiter outreach as agent skills.

Overview

Your AI-powered job search companion Profile Optimizer • Job Scout • Experience Bank • Resume Tailor • Recruiter Outreach Audit and fix your LinkedIn profile, scout roles, tailor your resume, and reach recruiters — with a local dashboard to run it all. Runs your skills via opencode or Claude Code over ACP Installation · Dashboard · Skills · How it works Mercury is a collection of that automate your LinkedIn job search end-to-end, plus a local dashboard to run and track it all. It works with any AI coding assistant that supports skill files (opencode, Cursor, Claude Code, Cline, …) paired with a LinkedIn MCP Server and Chrome MCP. Re-run the . See Installation for prebuilt targets, env overrides, and the source-build fallback. See .github/assets/diagram.html for a visual of how the skills work together. Mercury ships a local web dashboard — a central hub for your whole job search.

README

Your AI-powered job search companion Profile Optimizer • Job Scout • Experience Bank • Resume Tailor • Recruiter Outreach Audit and fix your LinkedIn profile, scout roles, tailor your resume, and reach recruiters — with a local dashboard to run it all.

   

Runs your skills via opencode or Claude Code over ACP

Installation · Dashboard · Skills · How it works


Mercury is a collection of AI agent skills that automate your LinkedIn job search end-to-end, plus a local dashboard to run and track it all. It works with any AI coding assistant that supports skill files (opencode, Cursor, Claude Code, Cline, …) paired with a LinkedIn MCP Server and Chrome MCP.

Quick Start

# install (or update) — downloads a prebuilt binary and installs the skills
curl -fsSL https://raw.githubusercontent.com/Daniel-Boll/mercury/main/bootstrap.sh | bash

mercury setup        # copy skills into your detected agents (opencode, Claude Code, …)
mercury dashboard    # open the hub in your browser

Re-run the same curl command any time to update. See Installation for prebuilt targets, env overrides, and the source-build fallback.

The Pipeline

                         experience-bank  (periodic, occasional)
                                │ read-only achievement pool
                                ▼
profile-optimizer → job-scout → resume-tailor → recruiter-outreach
     fix your         find the      tailor your      reach the
     profile          roles          resume          recruiters
                                │
                                └──→ portal-filler
                                     autofill the
                                     ATS application

Skills

Skill What It Does
profile-optimizer Audits your LinkedIn profile against recruiter-search signals and fixes gaps (Open to Work, headline, location, skills, languages, projects, About, experience)
job-scout Searches LinkedIn Jobs by company/location/work-type, pulls full details, and presents a prioritized shortlist with fit assessment
experience-bank “Grill me” — periodically interviews you about new achievements and stores them as a tagged, reusable pool in .mercury/experience/ that resume-tailor draws from. Run occasionally, not per application
resume-tailor Takes your base resume + experience bank + scouted roles and produces role-tailored versions with gap analysis, ATS keyword alignment, and cover letters
recruiter-outreach Finds technical recruiters at target companies, prioritizes by proximity/mutuals, and sends tailored connection requests
portal-filler Autofills an external ATS application form (Greenhouse / Lever / Ashby + generic) from your stored answers and tailored resume, then pauses for you to review and submit — it never submits for you

See .github/assets/diagram.html for a visual of how the skills work together.

The Dashboard

Mercury ships a local web dashboard — a central hub for your whole job search. Run one command and it opens in your browser:

mercury dashboard

What it gives you:

  • Overview — profile score, recruiters contacted/accepted/replied, interviews, jobs
  • Profile — recruiter-search metrics charted over time (views, search appearances, connections)
  • Search — instant LinkedIn job/people search (hybrid: raw results via the LinkedIn MCP)
  • Launch — run any Mercury skill through your agent (opencode or Claude Code) over ACP, with a live agent activity stream
  • Recruiters — kanban pipeline (pending → accepted → replied → interviewing → closed)
  • Jobs / Applications / Interviews / Activity — everything tracked

The dashboard is a single Bun-compiled binary with the UI embedded. It binds to 127.0.0.1 on a random port with a URL token, and stores everything in a local SQLite database at ~/.mercury/mercury.db.

The mercury CLI is both the dashboard launcher and the write API the skills call (mercury recruiter add, mercury job save, …) — one schema, one source of truth.

The .mercury/ Directory

Mercury stores all job search artifacts in a .mercury/ folder in your workspace:

.mercury/
├── base/
│   └── resume.typ              # Your canonical base resume
├── experience/
│   ├── {slug}.md               # One tagged achievement per entry (experience-bank)
│   └── index.md                # Rollup for quick scanning
├── tailored/
│   ├── airbnb-4393940374.typ   # Tailored per role (company-jobId)
│   ├── doordash-3969556398.typ
│   └── uber-4380982336.typ
├── cover-letters/
│   ├── airbnb-4393940374.md    # Full cover letter per role
│   └── ...
├── reports/
│   ├── airbnb-4393940374.md    # Gap/match analysis per role
│   └── ...
├── logs/
│   ├── 2026-06-26T14:30:00.md  # Run history, diffs, keyword scores
│   └── ...
└── config.toml                 # Preferences (base resume path, format, targets)

Everything is tracked — you get full traceability of every tailoring run, outreach wave, and profile change.

Requirements

MCP Servers

  1. LinkedIn MCP Server — Profile reading, job search, people search, connection requests
  2. Chrome MCP — For profile edits that LinkedIn doesn’t expose via API (browser automation)

Windows gotcha (LinkedIn MCP login): don’t run the LinkedIn MCP login/setup (uvx mcp-server-linkedin@latest --login) from an Administrator/elevated terminal. It creates %USERPROFILE%\.linkedin-mcp\{profile,trace-runs}\ with admin-only ACLs; your agent then runs the MCP at normal integrity, can’t write trace-runs\, and it crashes on startup (PermissionError: [WinError 5] Access is denied, shows as failed in /mcp). Run the login from a normal terminal. If you already hit it, fix the ACLs (preserves cookies/login — no re-login needed) from an elevated PowerShell:

takeown /F "$env:USERPROFILE\.linkedin-mcp" /R /D Y
icacls  "$env:USERPROFILE\.linkedin-mcp" /reset /T /C /Q

Thanks to @juanASP for confirming this on Win11.

Browser Setup

Chrome MCP auto-starts a Chrome session on its first tool call — no manual --remote-debugging-port launch flags required. Just make sure you’re logged into LinkedIn in that session.

Tip: For multi-step edit flows the skills use Chrome MCP’s pipeline tool (navigate → snapshot → click/fill in one call), which is faster and more reliable than individual round-trips.

Installation

curl -fsSL https://raw.githubusercontent.com/Daniel-Boll/mercury/main/bootstrap.sh | bash

The one-liner installs (or updates) Mercury and copies the skills:

  • detects your OS/arch and downloads a prebuilt binary from the latest GitHub Release (SHA256-verified) → ~/.local/bin/mercury — no build, just curl;
  • copies the skills into detected agent dirs (~/.config/opencode/skills, ~/.claude/skills);
  • falls back to a source build with Bun if no prebuilt binary matches your platform.

Prebuilt targets: linux-x64, linux-arm64, darwin-x64, darwin-arm64, windows-x64.

Windows: run the one-liner from Git Bash (or WSL) — it installs mercury.exe. There’s no windows-arm64 prebuilt (Bun doesn’t compile it); on Windows-arm64 the installer falls back to a source build with Bun.

Make sure ~/.local/bin is on your PATH (the installer prints a hint if not). Re-run the same command any time to update — mercury also prints a one-line notice when a newer release is available.

Env overrides: MERCURY_VERSION (pin a tag, e.g. v0.2.0), MERCURY_FROM_SOURCE=1, MERCURY_BIN_DIR, MERCURY_SKILLS_DIR, MERCURY_NO_SKILLS=1, MERCURY_NO_UPDATE_CHECK=1.

Installing the skills (mercury setup)

The bootstrap copies skills for you. To (re)install them into your agents at any time — e.g. after adding a new agent:

mercury setup                 # every detected agent (opencode, Claude Code, Cursor, Codex, …)
mercury setup --agent opencode   # just one
mercury setup --all              # include agents that aren't detected yet
mercury setup --skills-dir # an explicit directory

For the Launch tab you also need an ACP-capable agent on PATH: opencode (native opencode acp) or claude (Claude Code, via @zed-industries/claude-code-acp).

Contributing or running from a clone? See AGENTS.md for the build and dev workflow.

Usage

The agent loads these skills automatically when your request matches their description. Examples:

  • “Audit my LinkedIn profile and help me get more recruiter messages” → loads profile-optimizer
  • “Find backend engineer roles at DoorDash and Airbnb in São Paulo” → loads job-scout
  • “Tailor my resume for these 3 roles I scouted” → loads resume-tailor
  • “Find recruiters at Uber who hire in Brazil and connect with them” → loads recruiter-outreach
  • “Fill out this Greenhouse application for me” (with a job URL) → loads portal-filler

What Mercury Can Do

Profile Optimizer

  • Pull full profile analytics (search appearances, views, impressions)
  • Identify specific pitfalls ranked by recruiter-search impact
  • Edit via browser automation: Open to Work (recruiter-only), headline, location, top skills, languages, projects, About section, experience descriptions
  • Remove internal-mobility cards that signal “not looking”

Job Scout

  • Search by company + location + work type + seniority
  • Get full job descriptions with requirements and compensation
  • Assess fit (Strong / Good / Stretch) based on your profile
  • Flag diversity-scoped roles, staffing aggregators, and external ATS friction

Experience Bank

  • “Grill me” — STAR-style interview that probes for impact, metrics, scope, and tech
  • Seeds from your existing bank + base resume + LinkedIn profile, so it only asks about gaps and new material
  • Stores tagged entries in .mercury/experience/ (skills, tech, domain, role-type, metrics)
  • Incremental + idempotent — run periodically (quarterly/after shipping), never re-grills what it already has
  • Truthful by construction — structures real stories, never invents

Resume Tailor

  • Parse your base resume (Typst/MD/PDF/txt) + experience bank + LinkedIn profile data
  • Pulls role-relevant experience-bank entries even when they aren’t on the short base resume
  • Batch-tailor to N scouted roles in one pass
  • Produce ATS-keyword-aligned Typst output per role
  • Generate full cover letters per role
  • Gap/match analysis showing what’s strong, what’s a stretch, what’s in your bank, what’s missing
  • All outputs stored in .mercury/ with full run logs

Recruiter Outreach

  • Look up company URN IDs (required for LinkedIn’s people search filter)
  • Find technical recruiters/sourcers at target companies in your region
  • Prioritize by: same city > 2nd-degree > mutual connections > relevant title
  • Send connection requests with short, specific notes (<300 chars)
  • Provide follow-up templates for post-acceptance

Portal Filler

  • Detects the ATS from the job URL (mercury detect-portal) and loads its known field selectors — Greenhouse, Lever, Ashby, or a generic snapshot-driven fallback
  • Fills your contact / eligibility / links from a reusable answer store (mercury answer set), maps the rest of the form’s labels with mercury match, and uploads your compiled resume PDF (mercury export)
  • Pauses for human review and never clicks Submit — you verify the open browser and submit yourself (mirrors recruiter-outreach’s confirm step)
  • Never auto-fills EEO/demographic fields, and surfaces anything it couldn’t confidently map instead of guessing
  • Edit your stored answers and watch application status (draft → filled → submitted) in the dashboard’s Answers and Applications tabs

Application CLI (used by portal-filler)

mercury answer set --key phone --value "+1 555 ..." --category contact
mercury answer list
mercury detect-portal --url "https://job-boards.greenhouse.io/acme/jobs/123"
mercury match --labels '["Email *","Phone","LinkedIn Profile"]'
mercury export --typ resume.typ --out resume.pdf
mercury application update --id 1 --status filled --portal greenhouse --unfilled '["work_authorization"]'

Known Quirks & Limitations

  • Auto-apply is fill-then-pause, not fully autonomous — portal-filler fills external ATS forms (Greenhouse/Lever/Ashby) but stops before Submit so you review and send. Workday, Taleo, and iCIMS (multi-step, iframe-heavy, account-gated) and opt-in auto-submit are not yet supported; CAPTCHA/SSO are left to the human.
  • LinkedIn rate limits — don’t send >10-15 connection requests per session
  • Top Skills are managed inside the About editor (/add-edit/SUMMARY/), not the Skills detail page
  • Company URN IDs are required for people search filters — plain names are silently ignored
  • Typeahead fields (language, skills) require ArrowDown + Enter after typing
  • “Notify network” toggle — always verify it’s OFF before saving experience edits

Keywords

LinkedIn automation, job search AI, recruiter outreach, resume tailoring, profile optimization, experience bank, achievement tracking, ATS optimization, LinkedIn MCP, AI job hunting, career toolkit, LinkedIn bot, job scout, cover letter generator, LinkedIn skills for AI agents

License

The Unlicense — public domain. Do whatever you want with it.

View the full README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add juanasp/mercury
New to MCP? Start with the mcpskill.org guide →