Skip to main content
Glama

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

Analyze a job from another site

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 are required; every structured fact field is optional, with a fact the source does not state simply omitted (or null). 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 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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>",
      "company_name": "<company_name>",
      "title_name": "<title_name>",
      "location_name": "<location_name>",
      "description": "<description>"
    },
    "name": "jobs_analyze_external"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesDirect URL of the specific job posting; a company homepage is invalid
posted_atNoPosting date as ISO 8601, when the source states it
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

NameRequiredDescriptionDefault
jobsYes
modeYes
studioUrlNo
statusOrderYes
derivedFieldsYes
trackerWebUrlYes
unknownFieldsYes
providedFieldsYes
clientExtractionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedOutput schema / properties / jobs / items / properties / estimatedSalary / properties / basedOn
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / jobs / items / properties / estimatedSalary / properties / basis
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / estimatedSalary / properties / methodologyUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / estimatedSalary / properties / source
      Added value: +{
      +  "enum": [
      +    "FoundRole"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / ghostScore / properties / basis
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / ghostScore / properties / methodologyUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / ghostScore / properties / source
      Added value: +{
      +  "enum": [
      +    "FoundRole"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / visaProvenance
      Added value: +{
      +  "properties": {
      +    "basis": {
      +      "type": "string"
      +    },
      +    "falseMeans": {
      +      "type": "string"
      +    },
      +    "methodologyUrl": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "enum": [
      +        "FoundRole"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  2. Changed1 schema field changed
    • removedOutput schema / properties / system_instruction
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
  3. Changed1 schema field changed
    • addedOutput schema / properties / jobs / items / properties / lastSeenAt
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / jobs / items / properties / insights / properties / employerFilingHistory
      Added value: +{
      +  "properties": {
      +    "attribution": {
      +      "enum": [
      +        "FILED_BY"
      +      ],
      +      "type": "string"
      +    },
      +    "availability": {
      +      "enum": [
      +        "AVAILABLE",
      +        "NO_FILINGS",
      +        "UNRESOLVED_EMPLOYER",
      +        "NOT_READY"
      +      ],
      +      "type": "string"
      +    },
      +    "bindingStatus": {
      +      "enum": [
      +        "LEGACY_UNREVIEWED",
      +        "UNRESOLVED"
      +      ],
      +      "type": "string"
      +    },
      +    "coverage": {
      +      "items": {
      +        "properties": {
      +          "fiscalYear": {
      +            "type": "integer"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "quarter": {
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "current": {
      +      "properties": {
      +        "filings": {
      +          "type": "integer"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "workerPositions": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "currentPeriod": {
      +      "properties": {
      +        "complete": {
      +          "type": "boolean"
      +        },
      +        "coveredQuarters": {
      +          "items": {
      +            "properties": {
      +              "fiscalYear": {
      +                "type": "integer"
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "quarter": {
      +                "type": "integer"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "endFiscalYear": {
      +          "type": "integer"
      +        },
      +        "endQuarter": {
      +          "type": "integer"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "label": {
      +          "type": "string"
      +        },
      +        "startFiscalYear": {
      +          "type": "integer"
      +        },
      +        "startQuarter": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "history": {
      +      "properties": {
      +        "access": {
      +          "enum": [
      +            "AVAILABLE",
      +            "RESTRICTED",
      +            "UNAVAILABLE"
      +          ],
      +          "type": "string"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "points": {
      +          "items": {
      +            "properties": {
      +              "filings": {
      +                "type": "integer"
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "period": {
      +                "properties": {
      +                  "complete": {
      +                    "type": "boolean"
      +                  },
      +                  "coveredQuarters": {
      +                    "items": {
      +                      "properties": {
      +                        "fiscalYear": {
      +                          "type": "integer"
      +                        },
      +                        "id": {
      +                          "type": "string"
      +                        },
      +                        "quarter": {
      +                          "type": "integer"
      +                        }
      +                      },
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "endFiscalYear": {
      +                    "type": "integer"
      +                  },
      +                  "endQuarter": {
      +                    "type": "integer"
      +                  },
      +                  "id": {
      +                    "type": "string"
      +                  },
      +                  "label": {
      +                    "type": "string"
      +                  },
      +                  "startFiscalYear": {
      +                    "type": "integer"
      +                  },
      +                  "startQuarter": {
      +                    "type": "integer"
      +                  }
      +                },
      +                "type": [
      +                  "object",
      +                  "null"
      +                ]
      +              },
      +              "workerPositions": {
      +                "type": "integer"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": [
      +            "array",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "subject": {
      +      "properties": {
      +        "domain": {
      +          "type": "string"
      +        },
      +        "domainDictionaryId": {
      +          "type": "string"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "name": {
      +          "type": "string"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "wageLevel": {
      +      "properties": {
      +        "availability": {
      +          "enum": [
      +            "AVAILABLE",
      +            "NO_FILINGS",
      +            "INSUFFICIENT_SAMPLE",
      +            "NOT_STATED",
      +            "NOT_READY",
      +            "UNRESOLVED_EMPLOYER"
      +          ],
      +          "type": "string"
      +        },
      +        "breakdown": {
      +          "properties": {
      +            "level1Pct": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "level2Pct": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "level3Pct": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "level4Pct": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "notStatedPct": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "period": {
      +          "properties": {
      +            "complete": {
      +              "type": "boolean"
      +            },
      +            "coveredQuarters": {
      +              "items": {
      +                "properties": {
      +                  "fiscalYear": {
      +                    "type": "integer"
      +                  },
      +                  "id": {
      +                    "type": "string"
      +                  },
      +                  "quarter": {
      +                    "type": "integer"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "endFiscalYear": {
      +              "type": "integer"
      +            },
      +            "endQuarter": {
      +              "type": "integer"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "startFiscalYear": {
      +              "type": "integer"
      +            },
      +            "startQuarter": {
      +              "type": "integer"
      +            }
      +          },
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        },
      +        "sampleSize": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  5. Changed5 schema fields changed
    • removedOutput schema / properties / jobs / items / properties / companyRating
      Removed value: -{
      -  "type": [
      -    "number",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / jobs / items / properties / estimatedSalary / properties / basedOn
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • changedOutput schema / properties / jobs / items / properties / trackerInput / properties / location_name / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / studioUrl
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / system_instruction
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / jobs / items / properties / estimatedSalary / properties / currency
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  7. Changed4 schema fields changed
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentKind
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentMultiplier
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerProfileId
      Added value: +{
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerSpecializationId
      Added value: +{
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
  8. Changed3 schema fields changed
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / grade
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / gradeConfidence
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / jobs / items / properties / insights / properties / match / properties / gradeReasons
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "params": {
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "severity": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  9. Changed19 schema fields changed
    • addedInput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / client_extraction / allOf
      Removed value: -[
      -  {
      -    "required": [
      -      "skills",
      -      "tech_stack",
      -      "benefits",
      -      "bonuses",
      -      "seniority",
      -      "industry",
      -      "management",
      -      "security_clearance",
      -      "visa_sponsorship",
      -      "remote_scope"
      -    ]
      -  }
      -]
    • changedInput schema / properties / client_extraction / description
      Previous value: -"Evidence-backed facts extracted by the client model from the posting. Every nested field is present and nullable; non-null evidence is a short source excerpt rather than an inference."New value: +"Evidence-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."
    • changedInput schema / properties / client_extraction / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedInput schema / properties / education_requirements / description
      Previous value: -"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree, or null"New value: +"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree"
    • changedInput schema / properties / employment_type / description
      Previous value: -"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other, or null"New value: +"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other"
    • changedInput schema / properties / experience_months / description
      Previous value: -"Minimum required experience in months, or null when not stated"New value: +"Minimum required experience in months, when stated"
    • changedInput schema / properties / posted_at / description
      Previous value: -"Posting date as ISO 8601, or null when the source does not state it"New value: +"Posting date as ISO 8601, when the source states it"
    • changedInput schema / properties / salary_currency / description
      Previous value: -"ISO 4217 salary currency code, or null when not stated"New value: +"ISO 4217 salary currency code, when stated"
    • changedInput schema / properties / salary_max_value / description
      Previous value: -"Salary range maximum, or null when not stated"New value: +"Salary range maximum, when stated"
    • changedInput schema / properties / salary_min_value / description
      Previous value: -"Salary range minimum, or null when not stated"New value: +"Salary range minimum, when stated"
    • changedInput schema / properties / salary_type / description
      Previous value: -"Salary period: year, month, week, day, hour, or null"New value: +"Salary period: year, month, week, day, hour"
    • changedInput schema / properties / salary_value / description
      Previous value: -"Single salary amount, or null when the posting gives a range or no salary"New value: +"Single salary amount, when the posting gives one figure instead of a range"
    • changedInput schema / properties / work_location_type / description
      Previous value: -"Work arrangement: on_site, remote, hybrid, or null"New value: +"Work arrangement: on_site, remote, hybrid"
    • changedInput schema / required
      Previous value: -[
      -  "url",
      -  "company_name",
      -  "title_name",
      -  "location_name",
      -  "description",
      -  "posted_at",
      -  "salary_min_value",
      -  "salary_max_value",
      -  "salary_value",
      -  "salary_type",
      -  "salary_currency",
      -  "employment_type",
      -  "work_location_type",
      -  "education_requirements",
      -  "experience_months",
      -  "client_extraction"
      -]New value: +[
      +  "url",
      +  "company_name",
      +  "title_name",
      +  "location_name",
      +  "description"
      +]
    • addedOutput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • removedOutput schema / properties / clientExtraction / allOf
      Removed value: -[
      -  {
      -    "required": [
      -      "recordId",
      -      "schemaVersion",
      -      "acceptedFields",
      -      "rejectedFields"
      -    ]
      -  }
      -]
    • changedOutput schema / properties / clientExtraction / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
  10. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false, so the description must explain what is actually written; it does, saying FoundRole validates the evidence, stores the client extraction separately, derives missing deterministic facts, and reports values as provided/derived/accepted/rejected/unknown. It also adds an explicit caveat that the analysis is a decision aid, not a guarantee. It does not state persistence lifetime, per-call cost, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three paragraphs, front-loaded with what the tool does and what it returns, then input conventions, then the comparisonRef handoff. Dense but almost every sentence carries load; the middle paragraph is long and could be tightened, though no sentence is pure filler.

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?

For a 16-parameter tool with an output schema, the description covers the parts the schema cannot: required-vs-optional intent, deliberate fact omission, client_extraction evidence requirements and server-side validation, and the cross-call comparisonRef contract. Return values are left to the output schema as expected, and the decision-aid disclaimer sets appropriate expectations.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond field-level text: the five text identity fields are required, every structured fact is optional and omitted (or null) when the source is silent, and client_extraction is reserved for evidence-backed labels that the server will validate rather than infer. That omission-vs-null convention is the kind of guidance the schema alone does not convey.

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?

States a specific verb and resource (analyze one externally-sourced job) and enumerates exactly what the analysis produces: resume match, missing skills, H-1B history, E-Verify, ghost-job risk, compensation, market salary. The phrase 'found outside FoundRole' immediately separates it from jobs_details/jobs_search and from tracker_add_external.

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

Usage Guidelines4/5

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

Gives a clear trigger (job discovered outside FoundRole) and names one alternative with its selecting condition: 'Use tracker_add_external only when the user asks to save without analysis.' It also instructs retaining comparisonRef for a later jobs_compare call, which effectively sequences two tools. It stops short of explicitly stating that in-platform jobs should go to jobs_details instead.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.