Trackly CLI
Search 250K+ jobs, 5,400+ companies. MCP for Claude, ChatGPT, Codex and Cursor.
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
claude mcp add --transport http trackly-cli 'https://mcp.usetrackly.app/api/mcp' --header 'Authorization: <Optional. Leave blank to sign in with OAuth (recommended). For headless clients that cannot complete OAuth, send Bearer trk_... with an API key from https://usetrackly.app/settings>'
{
"mcpServers": {
"trackly-cli": {
"type": "http",
"url": "https://mcp.usetrackly.app/api/mcp",
"headers": {
"Authorization": "<Optional. Leave blank to sign in with OAuth (recommended). For headless clients that cannot complete OAuth, send Bearer trk_... with an API key from https://usetrackly.app/settings>"
}
}
}
}
trackly-cliclaude mcp add trackly-cli -- npx -y trackly-cli@0.22.2 mcp
{
"mcpServers": {
"trackly-cli": {
"command": "npx",
"args": [
"-y",
"trackly-cli@0.22.2",
"mcp"
]
}
}
}
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
trackly-cli
The only job tracking CLI built for AI agents.
Search 250K+ jobs across 5,400+ companies and 40+ ATS types. Track applications, get AI-powered recommendations, and manage your job search -- from the terminal or through Claude, ChatGPT, Cursor, and other MCP-compatible AI agents.
Two ways to connect
🚀 Option 1: One-click in Claude co-work, Claude Desktop, ChatGPT (no install)
Use Trackly directly inside your AI — zero config:
- Open Settings → Connectors → Add custom connector
- URL:
https://mcp.usetrackly.app/api/mcp - Click Add → sign in with Google → done
Full setup guide with screenshots →
Works in: Claude co-work (web), Claude Desktop, ChatGPT Connectors, and any MCP client that supports remote/streamable-http connectors.
💻 Option 2: CLI install (for Cursor, Windsurf, or terminal use)
npm install -g trackly-cli # may need: sudo npm install -g trackly-cli
trackly login
trackly jobs --function product
Prerequisites: Node.js 20.20+ or 22.22+ (LTS recommended). On macOS with the official
.pkginstaller, global npm installs may requiresudo.
At a Glance
5,400+ companies | 250K+ jobs | 40+ ATS types | CLI + MCP | 58 local + 55 hosted MCP tools
CLI Commands
trackly jobs # List jobs
trackly jobs --remote # Filter remote jobs (sets usStates=REMOTE)
trackly jobs --region us # Filter by region (us, non_us, all, or a region tag: europe, canada, remote, ...)
trackly jobs --job-type internship # Filter by employment type (full_time, internship, all)
trackly jobs --work-arrangement hybrid,remote # Filter by work arrangement independently
trackly jobs --function product # Filter by function
trackly jobs --sponsorship exclude_no # Visa sponsorship filter (all, exclude_no, only_yes)
trackly jobs --company 243 # Filter by company ID
trackly job 1234 # Get job details
trackly jobs 1234 # Alias for job details
trackly companies # List companies
trackly companies search "fintech" # Semantic company search
trackly search "fintech" # Alias for semantic company search
trackly stats # Show metrics
trackly status # Alias for stats
trackly preferences # Show discovery preferences and experience limits
trackly preferences experience product=2 strategy=5 # Replace role-specific limits
trackly preferences experience clear # Turn role-specific experience filtering off
trackly apply 1234 # Mark as applied
trackly save 1234 # Save a job
trackly dismiss 1234 # Dismiss a job
trackly ask "PM jobs in SF" # Natural language search (20/day)
trackly contacts "Stripe" # Search contacts at a company
trackly brief 1234 # Get network brief for a job
trackly referral start 1234 # Start a referral campaign
trackly referral status 1234 # Check referral campaign status
trackly company-brief 243 # Get company brief (--refresh to regenerate)
trackly company-workspace 243 # Full company workspace view
trackly request-company "eBay" # Request a company be added (--url, --notes optional)
trackly api-key create # Generate API key
trackly api-key list # List API keys
trackly config # Show current CLI config
trackly config --api-key trk_xxx # Save an API key for future commands
trackly version # Show installed version
trackly whoami # Show current user
trackly logout # Clear credentials
trackly agent setup --client both # Install Trackly Apply for Codex + Claude Code
trackly agent doctor # Verify setup, profile, resume, and compatibility
trackly agent diagnose-path /path/to/upload.pdf --errno ENOSPC --json # Diagnose one exact local path
Add --json to any command for JSON output. Use --api-key <key> or --base-url <url> as one-off global flags when needed.
trackly preferences --json returns only success, experienceFilterV2Available, and preferences. The availability flag controls whether this client may edit role-specific limits; it does not claim that feed or alert enforcement is active. Every update checks that flag and the latest preference revision before writing.
MCP Server Setup
Hosted (Claude co-work, Claude Desktop, ChatGPT)
No install. In your AI tool, open Settings → Connectors → Add custom connector and enter:
https://mcp.usetrackly.app/api/mcp
Sign in with Google when prompted. Full visual guide →
Claude Code can use the same hosted server over OAuth:
claude mcp add --transport http trackly https://mcp.usetrackly.app/api/mcp
OAuth sign-in is the default for every client. An API key is optional and only
needed for headless clients that cannot complete an interactive sign-in: send
Authorization: Bearer trk_... with a key from Settings → API Keys.
Remote connections get 55 hosted tools. They share the search, company, status, and
Apply tools with the local server and add trackly_chat; the 4 local-only
tools listed below are not available remotely. Hosted setup and tool details
are at usetrackly.app/connector.
Local (CLI via stdio, for Cursor / Windsurf / Claude Code)
For agent-assisted form filling on macOS, install the public skill and local MCP together:
trackly agent setup --client codex # or claude / both
trackly agent doctor
For an existing MCP configuration or a Cloud harness, use trackly agent setup --client both --skills-only. This installs the same checksummed skill for both native clients without invoking their MCP commands or changing authentication. CLI 0.20.1 carries universal skill 4.9.1; its policy revision is the same numeric version, superseding the personal revisions. The policy accepts a documented markHandoff() guarantee with awaited calls, exact current tab checks, and revalidation on later turns. These observations are never reported as returned persistence receipts. Browser capabilities and manual Submit remain separate requirements; installation does not make a Linux browser supported. The separately installed trackly:trackly-apply plugin is updated through its plugin manager; plugin 1.1.1 carries the same browser and profile lookup policies. This setup command does not patch plugin caches.
The skill uses the profile and default resume in your Trackly account, asks only missing questions, fills user-approved saved jobs, and always stops before Submit. “Fill the next N” continues through the original recent-first Check Later snapshot until N unauthenticated forms are durably ready for your manual review; authentication walls and exclusions are reported separately and do not consume the target. An explicit “inspect the next N records” request still uses one fixed immutable batch. Support is fetched from Trackly at the start of every run: Greenhouse is full, Ashby and Lever are best effort, and 27 additional named ATS/provider classes use constrained guided mode. Employer-hosted unknown forms run only when Trackly binds them to a verified company domain. LinkedIn-hosted forms and unverified origins remain manual-only; a separately stored external application URL is evaluated under its own ATS and origin policy.
Guided mode is deliberately fail-closed. The agent stops on credential entry, OTP/email verification, CAPTCHA/human verification, an unexpected employer or origin, a submit-only transition, or any field whose committed state cannot be observed. trackly agent doctor checks the local skill, MCP registration, protocol compatibility, declared browser/computer-use configuration, profile completeness, and default-resume metadata. Live semantic browser capability and the exact resume bytes are verified at the start of a real run.
Claude Code one-liner
claude mcp add --scope user trackly -- trackly mcp
Or equivalently:
claude mcp add-json --scope user trackly '{"command":"trackly","args":["mcp"]}'
Claude Code manual config
Add to a project-scoped .mcp.json:
{
"mcpServers": {
"trackly": {
"command": "trackly",
"args": ["mcp"]
}
}
}
Cursor / Windsurf
Add to .cursor/mcp.json or ~/.cursor/mcp.json (same schema works for Windsurf):
{
"mcpServers": {
"trackly": {
"command": "trackly",
"args": ["mcp"]
}
}
}
Then use natural language in any of these clients:
- "Find me PM jobs at fintech companies"
- "What remote engineering roles are available?"
- "Mark job 1234 as applied"
Search filters and updates
trackly_search_jobs supports multiple roles and regions, US states and Canadian
provinces, internship education levels, favorite companies, posting windows,
annual USD salary floors, incremental sync, work arrangement, sponsorship and
pipeline status. Exact values and examples.
Search returns 20 jobs by default; request up to 100 and use offset to page.
For sponsorship, “exclude no” keeps yes and not mentioned. Use exclude_no;
only_yes excludes jobs with unknown sponsorship. Ask the user when intent is
ambiguous. Salary floors also keep unknown and non-comparable salaries visible.
Unsupported industry/specialization/literal-search controls are rejected.
For a local server without a global package install, run npx -y trackly-cli mcp.
For Codex, use codex mcp add trackly -- npx -y trackly-cli mcp; Cursor and
Windsurf can use "command": "npx", "args": ["-y", "trackly-cli", "mcp"].
Authenticate with npx -y trackly-cli login first, or configure TRACKLY_API_KEY.
Existing global installs require npm install --global trackly-cli@latest.
Restart the MCP process/client and refresh tool discovery after updating.
For native skills and marketplace plugin updates, follow the
release and update guide.
Hosted and local releases are separate: the current client schema is authoritative.
MCP Tools Reference
The local stdio server (trackly mcp) registers the 58 tools below. Four are
local-only because they run their checks on your machine:
trackly_diagnose_local_path, trackly_lint_application_text,
trackly_validate_apply_resume_upload, and trackly_validate_apply_tab_keep_set.
The hosted server omits those four and adds trackly_chat, for 55 hosted tools.
| Tool | Description |
|---|---|
| trackly_search_jobs | Search by roles, regions, states/provinces, internship level, favorites, recency, annual USD salary floor, sponsorship, work arrangement, and pipeline status |
| trackly_get_job | Get details by Trackly ID, with availability and retry guidance |
| trackly_search_companies | Semantic company search |
| trackly_list_companies | List all tracked companies |
| trackly_get_stats | Job tracker metrics and status counts |
| trackly_get_preferences | Read bounded discovery preferences, edit availability, and save revision |
| trackly_update_experience_limits | Atomically replace role-specific limits on a job's stated minimum years |
| trackly_update_status | Mark jobs as applied, saved, or dismissed |
| trackly_ask | Natural language job search (20/day) |
| trackly_get_job_brief | Get a network brief, with availability and retry guidance |
| trackly_contacts_at_company | Search contacts at a specific company |
| trackly_get_company_workspace | Full company workspace (jobs, contacts, hiring managers, campaigns) |
| trackly_request_company | Request a company be added to Trackly (rate-limited to 5 pending) |
| trackly_get_apply_queue | Get user-approved jobs ready for execution |
| trackly_get_application_profile | Get versioned profile answers and provenance |
| trackly_get_profile_onboarding | Get schema plus missing questions |
| trackly_update_application_profile | Save scoped answers with optimistic concurrency; revoking sensitive storage takes a two-step confirmation |
| trackly_start_apply_execution | Start a target-counted accessible Apply execution |
| trackly_get_active_apply_execution | Recover the active execution before legacy batch recovery |
| trackly_get_apply_execution | Read the authoritative progress funnel and immutable child waves |
| trackly_list_recoverable_apply_executions | List bounded exact-member recovery candidates after context loss |
| trackly_recover_exact_apply_members | Recover only one explicitly confirmed candidate set without substitutes |
| trackly_list_apply_review_handoffs | Rediscover active, value-free review-handoff receipts for one execution |
| trackly_claim_apply_review_handoff | Claim and classify one exact review-handoff group before reconciliation |
| trackly_get_apply_execution_snapshot | Fetch a compact bounded projection for current execution members and required profile keys |
| trackly_resume_parked_apply_member | Explicitly resume one parked member for a fresh non-mutating access probe |
| trackly_approve_apply_execution_resume | Approve one exact resume identity for an unchanged execution snapshot |
| trackly_advance_apply_execution | Transactionally create the next eligible immutable wave with frozen accessKnowledge |
| trackly_list_apply_access_deferments | List persistent user access deferments |
| trackly_defer_apply_access | Persist a job or company deferment from a Trackly jobId |
| trackly_clear_apply_access_deferment | Clear one discovered user access deferment |
| trackly_record_apply_execution_dispositions | Record typed, value-free access classifications |
| trackly_stop_apply_execution | Stop an execution without changing saved-job state |
| trackly_create_apply_batch | Freeze an exact recent-first approved batch |
| trackly_cancel_apply_batch | Retire a legacy fixed batch after explicit user confirmation |
| trackly_get_active_apply_batch | Recover the newest unexpired active batch after context loss |
| trackly_get_apply_batch | Read frozen membership with opaque pagination |
| trackly_claim_apply_batch | Acquire or renew a batch mutation lease |
| trackly_checkpoint_apply_batch | Bulk-record redacted inspection checkpoints and human actions |
| trackly_bind_apply_surface | Bind an initial or recovered browser surface to the existing run and exact requisition URL |
| trackly_record_apply_surface_evidence | Record current-epoch inventory, missing-tab, close-receipt, and post-close absence evidence |
| trackly_record_apply_submission_evidence | Record redacted submit-request, success-page, user-confirmation, or provider-receipt evidence |
| trackly_approve_apply_batch_resume | Approve one exact default resume for the current frozen run set |
| trackly_certify_apply_batch_truth | Certify final answer and wording fingerprints after every other review-readiness gate |
| trackly_start_apply_run | Start or reuse a manual-submit browser run |
| trackly_get_apply_evidence | Get aggregate, value-free beta evidence and release readiness |
| trackly_get_apply_protocol | Get current workflow and compatibility rules |
| trackly_report_apply_observation | Send redacted ATS mechanics feedback |
| trackly_lint_application_text | Locally lint application writing and return only value-free violations plus a draft hash |
| trackly_diagnose_local_path | Locally diagnose the exact implicated filesystem path without deleting files |
| trackly_validate_apply_tab_keep_set | Locally validate an exact expected/keep tab set against complete caller-supplied inventories without controlling the browser or sending tab IDs remotely |
| trackly_validate_apply_resume_upload | Locally validate adapter capability and ordered value-free attachment proof stages |
| trackly_report_apply_observations | Bulk-send up to 20 leased, batch-bound redacted observations |
| trackly_record_application_outcome | Record review or confirmed submission outcome |
| trackly_record_application_outcomes | Bulk-record up to 20 leased batch outcomes with per-member conflicts |
| trackly_prepare_resume | Prepare a private expiring resume file for upload |
| trackly_verify_prepared_resume | Recheck the confirmed resume immediately before attachment |
| get_more_tools | Report a missing capability so Trackly can improve its MCP surface |
Authentication
Option 1: Google OAuth (recommended)
trackly login
Opens your browser for Google sign-in. Tokens are stored locally at ~/.trackly/config.json.
Trackly is currently opening new memberships through a limited, invite-based rollout. Existing members can keep using OAuth and API keys normally. If a new account is not yet eligible, the CLI returns an invitation-specific message instead of suggesting repeated login attempts; request a future seat at usetrackly.app/early-access.
Option 2: API Key
Existing members can use an API key for firewalls, headless servers, or CI:
- Sign in at usetrackly.app
- Go to Settings → API Keys → Create
- Save the key:
trackly config --api-key trk_xxxxxxxxxxxxxxxxxxxx
Or pass it per-command:
trackly --api-key trk_xxxxxxxxxxxxxxxxxxxx jobs --json
Or set it as an environment variable:
export TRACKLY_API_KEY=trk_xxxxxxxxxxxxxxxxxxxx
trackly jobs
Generate a key from the CLI
If you're already logged in via OAuth, you can create a key without visiting the web app:
trackly api-key create --name "my-script"
trackly api-key list
Other config
trackly config --clear-api-key # Clear stored API key
trackly config --base-url http://127.0.0.1:3000 # Point at a different backend
Comparison
| Feature | CLI | Web App | Public API |
|---|---|---|---|
| Job search + filters | Yes | Yes | Yes |
| Apply/save/dismiss | Yes | Yes | Yes |
| AI-powered search | Yes (trackly ask) | Yes | Yes |
| MCP integration | Yes (58 local tools) | -- | -- |
| Browser required | No | Yes | No |
| Best for | Terminal + AI agents | Visual browsing | Custom integrations |
Web: usetrackly.app | API docs: usetrackly.app/developers
Frequently Asked Questions
How do I track job applications from the terminal?
Install trackly-cli (npm install -g trackly-cli), authenticate with trackly login or configure an API key, then use trackly jobs to browse openings and trackly apply <id> to mark applications. All data syncs with the Trackly web app at usetrackly.app.
What MCP servers exist for job searching?
trackly-cli includes a built-in MCP server with 58 tools: the complete Trackly
job-search and application set plus get_more_tools, which lets agents report
a missing capability. Run trackly mcp or use
trackly agent setup --client claude.
MCP usage analytics are on by default and relay through Trackly so the free
service can be debugged and improved. They exclude résumé text, profile answers,
demographic or work-authorization answers, and application notes. Client attribution
uses a fixed family label; errors use categories, and search text is retained only
as length. Raw queries and conversation text are excluded. Turn off future
collection with Share usage analytics in Account Settings. Operators may also
disable local MCP instrumentation with TRACKLY_MCP_ANALYTICS_DISABLED=1 (or
TRACKLY_MCP_ANALYTICS_ENABLED=0); the account setting remains authoritative
for authenticated backend capture.
How do I use Claude Code for job hunting?
Add trackly as an MCP server in Claude Code. Then ask questions naturally: "Find PM jobs at fintech companies in SF", "What companies are hiring for engineering?", or "Mark job 1234 as applied." Claude will use trackly's MCP tools to search and manage your applications.
What are the best CLI tools for job search?
trackly-cli is the first dedicated job tracking CLI. It provides direct terminal access to 250K+ jobs across 5,400+ companies, with filters for job function, location, and work modality. It also integrates with AI agents via the Model Context Protocol (MCP).
Security
- OAuth tokens stored in
~/.trackly/config.jsonwith 0600 permissions - API keys can be stored in the same config file or passed per-command
- OAuth callback bound to 127.0.0.1 only
- Authenticated requests require HTTPS unless you are pointing at localhost
- HTTP requests time out instead of hanging indefinitely
- CSRF protection on login flow
- See SECURITY.md for vulnerability reporting
License
MIT -- see LICENSE
Frequently asked questions
What is Trackly CLI?
Search 250K+ jobs, 5,400+ companies. MCP for Claude, ChatGPT, Codex and Cursor.
How do I install Trackly CLI?
It runs as a remote server. In Claude Code: claude mcp add --transport http trackly-cli 'https://mcp.usetrackly.app/api/mcp' --header 'Authorization: <Optional. Leave blank to sign in with OAuth (recommended). For headless clients that cannot complete OAuth, send Bearer trk_... with an API key from https://usetrackly.app/settings>'. For other clients, paste the JSON configuration from this page into their MCP settings.
Does Trackly CLI need an API key?
Yes. It expects Authorization, which you set in its configuration.
Is Trackly CLI open source?
Yes. Its code is on GitHub under the MIT license.
Who maintains Trackly CLI?
It is published by trackly-app. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.