Skip to main content
Glama

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

List tracked jobs

tracker_list
Read-only

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. A tracked FoundRole job's job.estimatedSalary is FoundRole's pay estimate; the response attributes it once, in figureSources: source (FoundRole), methodologyUrl (the FoundRole page that explains how it is computed) and the estimate's basis, whose posting count is each job's estimatedSalary.sampleSize and whose match is each job's estimatedSalary.basedOn.

Each tracked job carries daysSinceApplied, the whole days since its applied date in the user's time zone. A job still at the applied status also carries followUpDay: the latest follow-up point it has reached (7, 14 and 21 days after applying), null before the first one. appliedDateUnknown is true for a job at the applied status with no stored applied date, unless the person said they do not remember it: FoundRole never fills that date in by itself, it comes from the person, and tracker_update stores it in applied_at or, when they do not remember it, in applied_date_declined. FoundRole never moves or archives a tracked job by itself.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "tracker_list"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoNumber of results per page (default 20, max 50)
offsetNoNumber of results to skip (default 0)
statusNoFilter by status: saved, applied, interviewing, offered, archived

Output Schema

NameRequiredDescriptionDefault
hasMoreNo
totalCountNo
trackedJobNo
statusOrderNo
trackedJobsNo
figureSourcesNo
trackerWebUrlNo
subStatusOrderNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedOutput schema / properties / trackedJob / properties / appliedDateUnknown
      Added value: +{
      +  "description": "True for a job at the applied status with no stored applied date, unless the person said they do not remember it. FoundRole never fills that date in by itself; it comes from the person and tracker_update stores it in applied_at, or records in applied_date_declined that they do not remember it.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / trackedJob / properties / daysSinceApplied
      Added value: +{
      +  "description": "Whole days since the applied date, counted in the user's time zone; null without an applied date.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / trackedJob / properties / followUpDay
      Added value: +{
      +  "description": "Latest follow-up point, in days after applying, that a job still at the applied status has reached; null before the first point and for every other status. FoundRole never moves or archives a job by itself.",
      +  "enum": [
      +    7,
      +    14,
      +    21,
      +    null
      +  ],
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / trackedJobs / items / properties / appliedDateUnknown
      Added value: +{
      +  "description": "True for a job at the applied status with no stored applied date, unless the person said they do not remember it. FoundRole never fills that date in by itself; it comes from the person and tracker_update stores it in applied_at, or records in applied_date_declined that they do not remember it.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / trackedJobs / items / properties / daysSinceApplied
      Added value: +{
      +  "description": "Whole days since the applied date, counted in the user's time zone; null without an applied date.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / trackedJobs / items / properties / followUpDay
      Added value: +{
      +  "description": "Latest follow-up point, in days after applying, that a job still at the applied status has reached; null before the first point and for every other status. FoundRole never moves or archives a job by itself.",
      +  "enum": [
      +    7,
      +    14,
      +    21,
      +    null
      +  ],
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / figureSources
      Added value: +{
      +  "properties": {
      +    "estimatedSalary": {
      +      "properties": {
      +        "basis": {
      +          "type": "string"
      +        },
      +        "methodologyUrl": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "ghostScore": {
      +      "properties": {
      +        "basis": {
      +          "type": "string"
      +        },
      +        "methodologyUrl": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "methodologyUrl": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "enum": [
      +        "FoundRole"
      +      ],
      +      "type": "string"
      +    },
      +    "visaRecords": {
      +      "properties": {
      +        "basis": {
      +          "type": "string"
      +        },
      +        "falseMeans": {
      +          "type": "string"
      +        },
      +        "methodologyUrl": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  3. Changed16 schema fields changed
    • changedOutput schema / properties / trackedJob / properties / appliedAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / createdAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / deadline / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / notes / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / reminderAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / salaryOfferedType / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / subStatus / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJob / properties / updatedAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / appliedAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / createdAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / deadline / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / notes / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / reminderAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / salaryOfferedType / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / subStatus / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / trackedJobs / items / properties / updatedAt / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  4. Changed3 schema fields changed
    • addedInput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • addedOutput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
  5. Changed1 schema field changed
    • addedOutput schema / properties / trackedJob
      Added value: +{
      +  "properties": {
      +    "appliedAt": {
      +      "type": "string"
      +    },
      +    "contacts": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "createdAt": {
      +      "type": "string"
      +    },
      +    "deadline": {
      +      "type": "string"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "isStarred": {
      +      "type": "boolean"
      +    },
      +    "notes": {
      +      "type": "string"
      +    },
      +    "reminderAt": {
      +      "type": "string"
      +    },
      +    "salaryOffered": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "salaryOfferedType": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "subStatus": {
      +      "type": "string"
      +    },
      +    "tags": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "trackable": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "updatedAt": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id"
      +  ],
      +  "type": "object"
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / trackerWebUrl
      Added value: +{
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / subStatusOrder
      Added value: +{
      +  "type": "object"
      +}
  8. Changed1 schema field changed
    • addedOutput schema / properties / trackedJobs / items / properties / job
      Added value: +{
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  9. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "hasMore": {
      +      "type": "boolean"
      +    },
      +    "statusOrder": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "totalCount": {
      +      "type": "integer"
      +    },
      +    "trackedJobs": {
      +      "items": {
      +        "properties": {
      +          "appliedAt": {
      +            "type": "string"
      +          },
      +          "contacts": {
      +            "items": {
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "createdAt": {
      +            "type": "string"
      +          },
      +          "deadline": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "isStarred": {
      +            "type": "boolean"
      +          },
      +          "notes": {
      +            "type": "string"
      +          },
      +          "reminderAt": {
      +            "type": "string"
      +          },
      +          "salaryOffered": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "salaryOfferedType": {
      +            "type": "string"
      +          },
      +          "status": {
      +            "type": "string"
      +          },
      +          "subStatus": {
      +            "type": "string"
      +          },
      +          "tags": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "trackable": {
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "updatedAt": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  10. First observed

TDQS

A3.8/5.0
Behavior5/5

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

Annotations only establish readOnly/non-destructive/idempotent=false, so the description carries real weight here and does: it states results are grouped by status, explains how the pay estimate is attributed once via figureSources rather than repeated per job, and defines the derived fields daysSinceApplied, followUpDay and appliedDateUnknown. It also gives a lifecycle guarantee ('FoundRole never moves or archives a tracked job by itself') and the provenance rule that applied dates come from the person, not the system. That is substantive behavior an agent cannot get from the annotations.

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?

Well structured with bolded Input/Output sections and the core purpose front-loaded in the first sentence. It loses a point for length: the Output section runs long and partially duplicates what an existing output schema already conveys, and the Input bullets restate the schema.

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

Completeness3/5

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

For a zero-required-parameter list tool with full schema coverage, annotations and an output schema, most of what an agent needs is present, and the field semantics (followUpDay thresholds, appliedDateUnknown conditions) genuinely reduce misuse. However, the description spends much of its space explaining return shape that the output schema already encodes, while omitting explicit routing to sibling tracker tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the three parameters are already fully documented in the schema. The description's Input block restates status/limit/offset almost verbatim, adding no new meaning such as ordering of results or how status filtering interacts with the grouping. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Lists the user's tracked jobs with optional filtering and pagination'. That is unambiguous about what it returns and that it is a read/list operation. It does not name any sibling (e.g. tracker_update_status or tracker_update) as the alternative for other tracker operations, which is what keeps it below a 5.

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

Usage Guidelines3/5

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

Usage is only implied: mentioning that 'tracker_update stores it in applied_at' hints that mutation belongs to a different tool, but there is no explicit 'use this when X, use tracker_update_status when Y' routing. An agent can infer this is the read-side counterpart to the tracker_* mutators, but must infer it rather than being told.

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.