# FoundRole — AI Job Search & Application Tracker MCP for Claude & ChatGPT MCP server

MCP server for AI job search — find jobs, track applications, get alerts. Claude, ChatGPT, Cursor.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-foundrole-jobs-mcp-proxy
- Repository: https://github.com/foundrole/jobs-mcp-proxy
- Website: https://www.foundrole.com/ai-search-mcp

## Install
- Command: `npx -y @foundrole/ai-job-search-mcp`
- Endpoint: https://www.foundrole.com/mcp
- Auth: Not captured

## Setup notes
- Package: Npm @foundrole/ai-job-search-mcp v1.1.9
- Remote endpoint: https://www.foundrole.com/mcp

## Tools
- job_alert_list - Lists the authenticated user's job alerts across all subscription sources (regular, company page, MCP).

**Input:**
- `status`: Filter by status — one of pending, active, unsubscribed (optional, default: all statuses)
- `limit`: Number of results to return (default 20, max 50)
- `offset`: Number of results to skip (default 0)

**Output:**
Returns the user's job alerts with pagination info and a summary of the underlying job search
(query, location, company where available). Each response includes a system_instruction
describing how to present the results for the current client.
 Endpoint: https://www.foundrole.com/mcp
- job_alert_subscribe - Subscribes the authenticated user to job alerts for a specific saved job search.

**Input:**
- `job_search_id`: The job search identifier to subscribe to (required). Accepts either the job search UUID or the composite job ID returned by `jobs_search` / `jobs_details` (format: "seo_id--job_search_id").
- `frequency`: Alert frequency — one of daily, weekly, monthly (optional, defaults to "weekly")

**Output:**
Returns the created or updated job alert with id, status, and frequency.
Idempotent: calling this tool for an already-subscribed search updates the existing alert without creating a duplicate.
 Endpoint: https://www.foundrole.com/mcp
- job_alert_unsubscribe_all - Unsubscribes the authenticated user from ALL of their job alerts at once, across every
subscription source (regular, company page, MCP).

**Input:**
- `confirm`: Must be `true` to execute. The call is rejected when omitted or not true — this
  guards against an unintended bulk unsubscribe.

**Output:**
Confirms how many alerts were unsubscribed.
Idempotent: returns success even when the user has no active alerts.
 Endpoint: https://www.foundrole.com/mcp
- job_alert_unsubscribe - Unsubscribes the authenticated user from job alerts for a specific job search.

**Input:**
- `job_search_id`: The job search identifier to unsubscribe from (required). Accepts either the job search UUID or the composite job ID returned by `jobs_search` / `jobs_details` (format: "seo_id--job_search_id").

**Output:**
Confirms the alert has been unsubscribed.
Idempotent: returns success even when the user was not subscribed or is already unsubscribed.
 Endpoint: https://www.foundrole.com/mcp
- jobs_analyze_external - Analyzes one job found outside FoundRole using the authenticated user's FoundRole profile and the same
signals used for FoundRole jobs: resume match, missing skills, H-1B sponsorship history, E-Verify,
ghost-job risk, posted compensation, and market salary estimates. Use tracker_add_external only when
the user asks to save without analysis.

The input represents the direct posting URL and all job content already available in the conversation.
The five text identity fields and every structured field are required, with explicit null representing
a fact absent from the source. `client_extraction` carries evidence-backed skills, technology, benefits,
bonuses, seniority, industry, management, clearance, visa, and remote-scope labels. FoundRole validates
the evidence, stores the client extraction separately, derives missing deterministic facts, and reports
which values were provided, derived, accepted, rejected, or remain unknown.

The output includes `comparisonRef`; retain it exactly for a later jobs_compare call. The analysis is a
decision aid, not a guarantee about sponsorship, legitimacy, compensation, or hiring outcome.
 Endpoint: https://www.foundrole.com/mcp
- jobs_compare - Compares 2 to 4 jobs side by side using the same FoundRole analysis fields: resume match, missing skills,
H-1B and E-Verify signals, ghost-job risk, posted pay, and market salary estimates.

`comparison_refs` accepts exact FoundRole job IDs returned by jobs_search and exact external
`comparisonRef` URLs returned by jobs_analyze_external. Analyze each outside job first; a bare URL that
has not been analyzed cannot be compared because FoundRole does not have its posting facts. Preserve
every reference exactly, keep the user's requested order, and do not send duplicates.
 Endpoint: https://www.foundrole.com/mcp
- jobs_details - Fetches full details for one job by the `id` returned from jobs_search — the deeper view behind a search result.

**Input:**
- `job_id`: The exact ID string from the `id` field of a `jobs_search` result.

**Output:**
Complete job details: description, skills, benefits, requirements, salary benchmark, resume match,
H-1B and E-Verify signals, job-trust analysis, and application link. Personalized and extended
insight fields follow the authenticated user's current entitlements.
 Endpoint: https://www.foundrole.com/mcp
- jobs_recommendations - Returns the authenticated user's personalized job recommendations built from their resume, skills,
target roles, and preferred location. Results are ranked by fit, may include related roles, and carry
the same salary, match, H-1B, and job-trust insight payload used by job search.

A processing status means the personalized feed is still being prepared; a later call returns the
completed feed. Page numbers fetch additional recommendations from the same feed.
 Endpoint: https://www.foundrole.com/mcp
- jobs_search - Searches a database for real-time job listings matching the user's criteria.

The query is the full job title or role: "Ruby Developer" or "Ruby on Rails Engineer" rather than
a bare keyword like "Ruby", which is too broad and matches unrelated fields. Results may be
filtered by location, company, and how recently a job was posted.

Each result carries an `id`; jobs_details takes that `id` and returns the job's full description,
requirements, and benefits. The response also carries a `nextCursor` for the next page of
results; a follow-up page is fetched by passing only that cursor, with no other search parameters.

Authenticated results include resume match data when a profile is available. Job details include
FoundRole salary benchmarks, H-1B sponsorship signals, E-Verify status, and job-trust analysis;
list-level employer signals follow the user's current entitlements.

Each response includes a system_instruction describing how to present the results for the current
client.
 Endpoint: https://www.foundrole.com/mcp
- reminder_delete - Deletes a reminder from a tracked job.

**Input:**
- `tracked_job_id`: The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required)

**Output:**
Returns the updated tracked job with reminderAt cleared.
 Endpoint: https://www.foundrole.com/mcp
- reminder_list - Lists tracked jobs that have reminders set, ordered by reminder time (soonest first).

**Input:**
- `limit`: Number of results to return (default 20, max 50)

**Output:**
Returns a list of tracked jobs with active reminders.
 Endpoint: https://www.foundrole.com/mcp
- reminder_set - Sets a reminder for a tracked job. Sends a confirmation email with .ics calendar attachment.

**Input:**
- `tracked_job_id`: The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required)
- `remind_at`: Reminder date/time in ISO 8601 format, e.g. "2025-03-15T10:00:00Z" (required, must be in the future)

**Output:**
Returns the updated tracked job with reminderAt field.
 Endpoint: https://www.foundrole.com/mcp
- tracker_add_external - Saves a job posting found anywhere on the open web into the user's tracker. For jobs that came
from jobs_search results, tracker_add (which takes a job_id) is the right tool instead. A job
seen elsewhere in the conversation needs no prior jobs_search call — its URL and details from
the conversation are sufficient input.

`url`, `company_name`, `title_name`, `location_name`, and `description` identify the posting.
The full job content available in the conversation forms the input. Every structured fact field
is required, with explicit null representing a fact absent from the source. `client_extraction`
carries evidence-backed skills, technology, benefits, bonuses, seniority, industry, management,
clearance, visa, and remote-scope labels. FoundRole validates and stores those labels separately;
missing canonical salary, employment, work-arrangement, education, experience, skills, benefits,
and bonuses are still derived by FoundRole's own extractors.

Fields:
- `url`: the job posting's direct URL (required; not a company homepage)
- `company_name`: company name
- `title_name`: job title
- `location_name`: location, e.g. "New York, NY"
- `description`: the posting's description from the source result; a short summary is acceptable (required)
- `salary_min_value` / `salary_max_value`: salary range bounds (numbers)
- `salary_value`: a single salary figure when there is no range (number)
- `posted_at`: ISO 8601 posting date or null
- `salary_currency`: ISO 4217 currency code or null
- `salary_type`: one of year, month, week, day, hour or null
- `employment_type`: array of full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other or null
- `work_location_type`: one of on_site, remote, hybrid or null
- `education_requirements`: array of no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree or null
- `experience_months`: minimum required experience in months (number)
- `client_extraction`: complete evidence-backed extraction object; every nested field is present and nullable
- `status`: initial tracking status (saved, applied, interviewing, offered, archived); defaults to "saved"
- `sub_status`: sub-status within the main status
- `notes`: notes about the job

Returns the tracked job. Repeated saves return the existing tracked job.
 Endpoint: https://www.foundrole.com/mcp
- tracker_add - Tracks a job from jobs_search results in the user's job tracker, identified by its job_id. For a
job found elsewhere on the open web (with a URL but no jobs_search job_id), tracker_add_external
is the right tool instead.

Fields:
- `job_id`: the job ID from jobs_search results (required)
- `status`: initial status (saved, applied, interviewing, offered, archived); defaults to "saved"
- `sub_status`: sub-status within the main status
- `notes`: notes about the job

Returns the tracked job with its details. Repeated saves return the existing tracked job. A job
that was previously removed from the tracker is restored with its earlier status and notes.
 Endpoint: https://www.foundrole.com/mcp
- tracker_list - Lists the user's tracked jobs with optional filtering and pagination.

**Input:**
- `status`: Filter by status (saved, applied, interviewing, offered, archived)
- `limit`: Number of results per page (default 20, max 50)
- `offset`: Number of results to skip (default 0)

**Output:**
Returns a list of tracked jobs grouped by status with pagination info. Each response
includes a system_instruction describing how to present the results for the current client.
 Endpoint: https://www.foundrole.com/mcp
- tracker_remove - Removes a job from the user's job tracker.

**Input:**
- `tracked_job_id`: The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required)

**Output:**
Confirms the job was removed from tracking.
 Endpoint: https://www.foundrole.com/mcp
- tracker_update_status - Updates the status of a tracked job.

**Input:**
- `tracked_job_id`: The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required)
- `status`: New status: saved, applied, interviewing, offered, archived (required)
- `sub_status`: Sub-status within the main status (optional)

**Output:**
Returns the updated tracked job.
 Endpoint: https://www.foundrole.com/mcp
- tracker_update - Updates details of a tracked job (notes, deadline, salary, tags).

**Input:**
- `tracked_job_id`: The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required)
- `notes`: Updated notes
- `deadline`: Deadline date (ISO 8601 format)
- `salary_offered`: Salary amount
- `salary_offered_type`: Salary type: year, month, week, day, hour
- `tags`: Comma-separated tags (e.g., "remote,startup,tech")
- `reminder_at`: Reminder date/time in ISO 8601 format, e.g. "2025-03-15T10:00:00Z" (must be in the future, or empty to clear)

**Output:**
Returns the updated tracked job.
 Endpoint: https://www.foundrole.com/mcp

## Resources
Not captured

## Prompts
- find_jobs_for_me - Search FoundRole for jobs matching a role, location, and seniority, rendered as a ranked shortlist. Arguments: role, location, seniority, remote
- review_my_applications - Review the user's tracked job applications and suggest next actions for each.

## Metadata
- Owner: io.github.foundrole
- Version: 1.1.9
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 3, 2026
- Source: https://registry.modelcontextprotocol.io
