FoundRole Jobs - AI Job Search & Application Tracker
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tracker_listB | Lists the user's tracked jobs with optional filtering and pagination. Input:
Output: Returns a list of tracked jobs grouped by status with pagination info. |
| tracker_addA | 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:
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. |
| tracker_add_externalA | 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.
Fields:
Returns the tracked job. Repeated saves return the existing tracked job. |
| tracker_updateA | Updates details of a tracked job (notes, deadline, salary, tags). Input:
Output: Returns the updated tracked job. |
| tracker_update_statusC | Updates the status of a tracked job. Input:
Output: Returns the updated tracked job. |
| tracker_removeA | Removes a job from the user's job tracker. Input:
Output: Confirms the job was removed from tracking. |
| reminder_setA | Sets a reminder for a tracked job. Sends a confirmation email with .ics calendar attachment. Input:
Output: Returns the updated tracked job with reminderAt field. |
| reminder_listB | Lists tracked jobs that have reminders set, ordered by reminder time (soonest first). Input:
Output: Returns a list of tracked jobs with active reminders. |
| reminder_deleteB | Deletes a reminder from a tracked job. Input:
Output: Returns the updated tracked job with reminderAt cleared. |
| job_alert_subscribeA | Subscribes the authenticated user to job alerts for a specific saved job search. Input:
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. An existing active alert with the same query text, location, company and filters, and at least the same radius, is returned instead of a new one, with the requested frequency applied to it.
A user keeps one alert per query and place. When they already have an active alert for the same query and place with other filters, radius or sort, this tool changes that alert to the new search instead of adding a second one: the returned Delivery:
Digest alerts arrive together in one email, one section per query and place. Opted-in fast alerts are sent separately while the account has them: matches found overnight arrive in one morning email at the hour the user usually starts the day, and later matches follow at least 3 hours after the previous email, up to 3 emails per local day. A fast email carries only jobs found since the previous one, never a job already sent to the user, a role from the same employer sent in the last 30 days, or a job in the user's tracker. When the account no longer has fast alerts they return to the ordinary digest and retain the saved fast preference. Each section applies every filter and the sort of its saved search, the same way |
| job_alert_unsubscribeA | Unsubscribes the authenticated user from job alerts for a specific job search. Input:
Output: Confirms the alert has been unsubscribed. Idempotent: returns success even when the user was not subscribed or is already unsubscribed. |
| job_alert_unsubscribe_allA | Unsubscribes the authenticated user from ALL of their job alerts at once, across every subscription source (regular, company page, MCP). Input:
Output: Confirms how many alerts were unsubscribed. Idempotent: returns success even when the user has no active alerts. |
| job_alert_listA | Lists the authenticated user's job alerts across all subscription sources (regular, company page, MCP). Input:
Output: Returns the user's job alerts with pagination info and a summary of the underlying job search (query, location, company where available). |
| jobs_searchA | Searches a database for real-time job listings matching the user's criteria. The query is the full job title or role: "Ruby Developer" rather than a bare keyword like "Ruby", which is too broad and matches unrelated fields. roles_lookup turns words that name no exact role into FoundRole roles with their job counts. Results may be filtered by location, company, and how recently a job was posted. Each result carries an With a ready profile, a query for the profile's target profession or an omitted query uses the same personalized feed as jobs_recommendations and the website; alternative titles of that same role return that same feed. An account's saved role is reported in every response as savedRole; an omitted query or the saved role's title searches exactly that role. A different or unrecognized profession uses general job search, preserving the explicit query and filters, and leaves the saved role unchanged. A search without a location runs in the place saved on the account, widened to its country when few jobs are posted near that city; an account with no saved place searches where the user is now when the client reports it, otherwise the default country. Such a response names the place searched as searchedPlace. A response for a request that names no exact role can carry a guide question the widget shows to the user. 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. Constraints in the user's request — remote-only work, H1B sponsorship, a minimum salary, a minimum match grade — are the search parameters remote, h1b_sponsors_only, salary_floor, and min_match; sort orders the results by relevance, newest, salary or personal match. The search enforces only constraints passed as parameters; a constraint left out of the call is not applied to the result set. Job type, work mode, required education, experience level, benefits, bonuses, employers to include or exclude, and the search radius are the parameters employment_types, work_modes, education, experience_levels, benefits, bonuses_only, companies, exclude_companies and radius. Remote and hybrid are independent work modes: a remote search never returns hybrid jobs. A job that does not state the filtered attribute is left out while that filter is set. One brand inside a company is hiring_brand next to company. A company name that several employers share covers all of them, and the response names each with its domain; an employer's domain in place of a name (company, companies or exclude_companies) means that employer alone. When nothing matches, a city search is repeated within 100 miles and the response says so; a search limited by posted_days_ago keeps that limit and reports how many jobs match over a longer period instead of listing them. Advanced filters (sort, min_match, h1b_sponsors_only, salary_floor, remote, work_modes, benefits, bonuses_only, companies, exclude_companies; sort only when ordering by salary or match, companies only when it names more than one employer) apply for every account. One answer lists the first matching jobs and states how many further jobs match. |
| roles_lookupA | Matches the user's own words for the work they want against FoundRole's role list and returns up to 5 roles with open jobs, each with its number of open jobs in the place's state or country, most jobs first, plus the role already saved on the account. It runs no job search and changes nothing on the account. jobs_search returns the jobs for a role. |
| profile_role_setA | Saves the one role the user said they are looking for on an account that has no role yet, creating its profile when it has none. Recommendations then show that role's newest jobs in the account's place, and later searches with no title search exactly that role. The FoundRole search panel calls it when the user picks a role there; a role the user names in the chat is saved the same way. It saves only a role the user chose, not a guess from their words. On an account that already has another role it changes nothing and names the saved role; profile_role_replace replaces it. |
| profile_role_replaceA | Replaces the roles saved on the user's FoundRole account with the one role the user chose. The previous roles are removed from the account, including a role taken from the user's resume. Recommendations then show the new role's newest jobs in the account's place, and later searches with no title search exactly that role. For an account with no role yet, profile_role_set saves one without removing anything. |
| jobs_recommendationsA | 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. The search filters and sort parameters apply to this personalized feed too. One call returns one answer: there is no next page, and the response links to the same feed on the FoundRole website. An explicit query for a different or unrecognized profession uses the same general job search as jobs_search, preserving the query and filters instead of substituting the profile's target roles. Without a location the feed covers the place saved on the account, and the response names that place as searchedPlace. A processing status means the personalized feed is still being prepared; a later call returns the completed feed. |
| jobs_detailsA | Fetches full details for one job by the Input:
Output:
Complete job details: description, skills, benefits, requirements, salary benchmark, resume match,
H-1B and E-Verify signals, job-trust analysis, and application link. A posting that passed the
fully-remote check carries |
| jobs_analyze_externalA | 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 are required; every structured fact field is optional, with a fact the
source does not state simply omitted (or null). The optional The output includes |
| jobs_compareA | 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.
|
| resume_checkA | Checks resume text for machine-readable sections, recognized skills, contact channels, a headline, and experience date ranges using FoundRole's deterministic parser. Pass resume_text to check plain text supplied in the conversation. If resume_text is omitted, the tool reads the previously extracted text of the primary resume in the authenticated user's FoundRole account. It returns a readability band (strong, good, partial) and the single biggest loss. Depending on the account it also returns additional findings and the parsed facts (headline, years of experience, sections, contact channels, recognized skill count). Each finding includes a suggested fix. A saved report link is returned only when the account already has access to that report. This is FoundRole's text-readability assessment, not a test against a named ATS, a hiring prediction, or a file-layout check. Pasted text does not preserve the original PDF or DOCX layout. The tool does not upload a file, create a saved resume or report, change the user's profile, submit an application, or fetch URLs found in the text. It may return a FoundRole website link; opening that link and uploading or editing a resume are separate user actions. Operational request records and diagnostics may retain tool inputs; this tool does not promise that submitted text is never stored. |
| knowledge_searchA | Searches FoundRole's published content by semantic similarity and returns the most relevant sources for a job-search question: career-guidance blog articles plus FoundRole site pages that describe the product's features (job tracker, H1B salary data, AI job search) and industry/sector career landings. Each article carries a title, url, summary, a content excerpt, publication date, and tags; each page carries a title, url, description, and its FAQ entries — enough material to answer the question and link the source. Two optional facets add further result groups: company returns FoundRole's employer profile pages matching that company name; location returns the market landing page for that city, state, or country — an analytical page about that labour market, not a list of openings. The facets describe what the user is asking about — a company mentioned only in passing does not need the company facet. Returns empty groups when nothing is relevant rather than padding with off-topic content. Results are the closest matches to the given question, not an index of the site's full coverage; questions about overall topic coverage are answered by knowledge_topics, which lists the blog's categories and tags with article counts. It does not search job listings and reports no open-job counts — jobs_search covers live roles, including questions about openings for a particular job title. |
| knowledge_topicsA | Lists what FoundRole's published career-guidance blog covers: every category and the most-used tags, each with its published-article count and url, plus the total number of published articles. This is the factual source for questions about the blog's topics or overall coverage. It takes no parameters and reflects the live published corpus. It does not retrieve articles for a specific question; knowledge_search does that. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze_external_job | Analyze a job found outside FoundRole for resume fit, missing skills, salary, H-1B history, E-Verify, and ghost-job signals from its posting details. |
| check_my_resume | Check how well hiring software reads the user's resume and what a typical parser loses. |
| compare_jobs | Compare two to four FoundRole or previously analyzed jobs by fit, compensation, sponsorship signals, location, and risk, and recommend where to apply first. |
| create_job_alert | Create a recurring FoundRole email job alert for a role, location, and frequency so new matching roles arrive over time. |
| explore_career_knowledge | Answer a career or job-search question (visa, resume, salary, interview, relocation) from FoundRole's published guidance articles. |
| find_jobs_for_me | Search FoundRole for jobs matching a role, location, and seniority, rendered as a ranked shortlist. |
| learn_about_foundrole | Explain a FoundRole capability (job tracker, H1B salary data, AI job search) from the site's own feature pages. |
| prepare_for_interview | Build an interview-prep brief for a company and role: compensation expectations, company facts, sponsorship signals, and questions to ask. |
| research_company | Research an employer using FoundRole's company profile page, related guidance articles, and its live openings. |
| review_my_applications | Review the user's tracked job applications with their deadlines and reminders, and turn them into a prioritised action plan. |
| save_and_track_job | Save a job to the FoundRole tracker and optionally set an application-deadline reminder, resolving the job from the current result context. |
| what_can_foundrole_do | Quick-start overview for a new user: what the FoundRole connector can do and what to try first. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| about | What FoundRole is, the tools it exposes, and how to use them effectively. |
| tracker | Snapshot of the authenticated user's tracked job applications as Markdown. |
| jobs_search_ui | MCP Apps widget that renders job-search results as a card grid. |
| jobs_recommendations_ui | MCP Apps widget that renders personalized FoundRole recommendations as a card grid. |
| jobs_details_ui | MCP Apps widget that renders a single job detail as a card. |
| jobs_analysis_ui | MCP Apps widget that renders external-job analysis and side-by-side job comparisons. |
| tracker_list_ui | MCP Apps widget that renders the user's tracked jobs as a status-grouped list. |
| job_alerts_list_ui | MCP Apps widget that renders the user's job alerts with frequency and unsubscribe controls. |
| resume_check_ui | MCP Apps widget that renders the resume ATS-readability check: band, parsed facts, findings, and the Resume Studio link. |
| skill://foundrole-job-search/SKILL.md | |
| skill://foundrole-job-search/agents/openai.yaml | |
| skill://foundrole-job-search/references/app-capabilities.md | |
| skill://foundrole-job-search/references/application-management.md | |
| skill://foundrole-job-search/references/monitoring.md | |
| skill://foundrole-resume-check/SKILL.md | |
| skill://foundrole-resume-check/agents/openai.yaml |
TDQS
Scored across 24 tools
Most tools target a clearly distinct resource+action, and closely related pairs (tracker_add vs tracker_add_external, jobs_search vs jobs_recommendations vs roles_lookup, profile_role_set vs profile_role_replace) are explicitly cross-referenced in their descriptions. The main soft spot is reminder handling: reminders can be set/cleared both via reminder_set/reminder_delete and via the reminder_at field on tracker_update, which an agent could reasonably confuse.
The server follows a consistent resource-prefix convention (tracker_*, reminder_*, job_alert_*, jobs_*, knowledge_*, profile_role_*) with snake_case throughout, so grouping is predictable. A few names break the verb suffix pattern (jobs_details, jobs_recommendations, knowledge_topics are noun-only or noun_noun), which is a minor deviation rather than a real inconsistency.
At 24 tools this sits at the heavy end of the scale for what is essentially a job-search plus tracker product. Each sub-domain (resume check, tracker CRUD, reminders, alerts, search/details/analysis, knowledge) is coherent, but some consolidation is plausible — for example folding the three reminder tools into the tracker tools and merging the two unsubscribe variants into one with an optional flag.
Coverage is strong across the stated domain: search, detail fetch, personalized recommendations, external job analysis and comparison, full tracker lifecycle, reminders, alerts, profile role management, resume readability, and knowledge/content lookup. Minor gaps exist — there is no tool to list or manage saved searches directly (only via job_alert_list), no resume ingestion/update, and no application-material generation — but these are workable around.