Skip to main content
Glama
foundrole

FoundRole MCP

Official
by foundrole

tracker_add_external

Save a job posting from any website into your job tracker. Provide the URL and key details; optional fields like salary, employment type, and requirements are extracted automatically.

Instructions

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 and are the only required fields. Every structured fact field (salary, dates, employment type, education, experience) is optional: a fact the source does not state is simply omitted (or null), and FoundRole's own extractors derive missing salary, employment, work-arrangement, education, experience, skills, benefits, and bonuses from the description. A save never waits on facts the source did not provide. The optional client_extraction object carries evidence-backed skills, technology, benefits, bonuses, seniority, industry, management, clearance, visa, and remote-scope labels when source excerpts for them exist; FoundRole validates and stores those labels separately.

Fields:

  • url: the job posting's direct URL (required; not a company homepage)

  • company_name: company name (required)

  • title_name: job title (required)

  • location_name: location, e.g. "New York, NY" (required)

  • 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

  • salary_currency: ISO 4217 currency code

  • salary_type: one of year, month, week, day, hour

  • employment_type: array of full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other

  • work_location_type: one of on_site, remote, hybrid

  • education_requirements: array of no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree

  • experience_months: minimum required experience in months (number)

  • client_extraction: evidence-backed extraction object; fields without source evidence are omitted

  • status: initial tracking status (saved, applied, interviewing, offered, archived); defaults to "saved"

  • sub_status: sub-status within the main status: saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company

  • notes: notes about the job

Returns the tracked job. Repeated saves return the existing tracked job.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesDirect URL of the specific job posting; a company homepage is invalid
notesNoNotes about this job
statusNoInitial tracking status: saved, applied, interviewing, offered, archived
posted_atNoPosting date as ISO 8601, when the source states it
sub_statusNoSub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company
title_nameYesJob title from the posting
descriptionYesComplete posting text available in the conversation; a source summary is valid only when no fuller posting text is available
salary_typeNoSalary period: year, month, week, day, hour
company_nameYesCompany name from the posting
salary_valueNoSingle salary amount, when the posting gives one figure instead of a range
location_nameYesLocation text from the posting, including Remote when stated
employment_typeNoEmployment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other
salary_currencyNoISO 4217 salary currency code, when stated
salary_max_valueNoSalary range maximum, when stated
salary_min_valueNoSalary range minimum, when stated
client_extractionNoEvidence-backed facts extracted by the client model from the posting; non-null evidence is a short source excerpt rather than an inference. Fields absent from the source are omitted or null.
experience_monthsNoMinimum required experience in months, when stated
work_location_typeNoWork arrangement: on_site, remote, hybrid
education_requirementsNoEducation requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hasMoreNo
totalCountNo
trackedJobNo
statusOrderNo
trackedJobsNo
trackerWebUrlNo
subStatusOrderNo
Behavior5/5

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

The description discloses key behaviors beyond the annotations: 'Repeated saves return the existing tracked job' (idempotency), 'A save never waits on facts the source did not provide,' and that FoundRole's extractors derive missing fields from the description. It also explains the validation and separate storage of client_extraction labels. The annotations provide only false hints, so the description carries the full burden and meets it well.

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 overly verbose, largely because the 'Fields:' bullet list duplicates the input schema's property descriptions almost verbatim, including all enum values and constraints. The first two paragraphs are valuable, but the lengthy list adds little beyond the schema and bloats the description. It is structured but not appropriately sized.

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

Completeness5/5

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

The description covers purpose, sibling differentiation, parameter semantics, extraction behavior, and return behavior. It states that the tool returns the tracked job and that repeated saves return the existing one. For a complex tool with 19 parameters and an output schema, this is sufficient for an agent to select and invoke it correctly without significant gaps.

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 input schema has 100% description coverage, but the tool description adds important semantics. It clarifies that all non-required fields are optional and that 'a fact the source does not state is simply omitted (or null)' and explains that FoundRole's extractors derive missing facts like salary and skills from the description. It also clarifies that a short summary is acceptable for the description field and that client_extraction contains evidence-backed labels.

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's function: 'Saves a job posting found anywhere on the open web into the user's tracker.' It also distinguishes from sibling tracker_add by noting that tracker_add 'takes a job_id' and is for jobs from jobs_search results. This specific verb+resource+scope and differentiation earns a top score.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'For jobs that came from jobs_search results, tracker_add (which takes a job_id) is the right tool instead.' It also explains that a job seen elsewhere needs no prior jobs_search call, and that fields not stated by the source can be omitted. This clearly defines when to use the tool and names the alternative.

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

Install Server

Other Tools

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/foundrole/jobs-mcp-proxy'

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