Skip to main content
Glama
AshC2004

Job Tracker MCP Server

by AshC2004

Job Tracker MCP Server

A Model Context Protocol (MCP) server for tracking job applications and follow-ups, built with FastMCP and SQLite. Lets Claude Desktop, Cursor, or any MCP client log applications, move them through the hiring pipeline, schedule follow-up reminders, and check the health of an active job search through natural conversation.

Features

  • Log job applications with company, role, applied date, status, job URL, and notes

  • Move applications through a fixed set of pipeline stages, with validation on transitions

  • List applications, optionally filtered by status, most recent first

  • Schedule follow-up reminders tied to a specific application

  • Query pending follow-ups due on or before a given date, so you can ask "what follow-ups do I have this week"

  • Mark follow-ups as done

  • Get a pipeline summary: counts of applications grouped by status

  • The valid pipeline stages exposed as an MCP resource for client discovery

Related MCP server: JobTrack MCP Server

Tools

Tool

Description

add_application(company, role, date_applied, status, job_url, notes)

Insert a new job application

update_status(application_id, new_status)

Move an application to a new pipeline status

list_applications(status)

List applications, optionally filtered by status, newest first

add_followup(application_id, follow_up_date, note)

Schedule a follow-up reminder for an application

get_pending_followups(as_of_date)

List follow-ups due on or before a date that are not yet done

mark_followup_done(followup_id)

Mark a follow-up as completed

pipeline_summary()

Count applications grouped by pipeline status

All dates use YYYY-MM-DD format and are validated on input. Valid pipeline stages are: applied, phone_screen, technical_interview, onsite, offer, rejected, withdrawn. Passing any other value to status or new_status raises a clear error.

Resources

  • pipeline://stages: JSON array of the ordered pipeline stages, so a client can discover valid status values without guessing.

Setup

Requires Python 3.11+ and uv.

uv sync

Claude Desktop config

{
  "mcpServers": {
    "job-tracker": {
      "command": "/path/to/job-tracker-mcp-server/run.sh"
    }
  }
}

Replace /path/to/job-tracker-mcp-server with the absolute path to this repo.

Storage

Data is stored in a local SQLite database (applications.db, created automatically on first run, gitignored). Override the location with the JOB_TRACKER_DB_PATH environment variable.

Testing

uv run pytest

License

MIT

Available Tools

7 tools
add_applicationB

Add a new job application to the tracker.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
notesNo
statusNoapplied
companyYes
job_urlNo
date_appliedYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as validation rules, duplicate handling, required field formats, or side effects. The description simply states the action without elaborating on what happens or under what conditions it may fail.

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?

The description is a single, clear sentence with no redundancy or extra words. It is concise and well-structured, though it is under-specified for the complexity of the tool.

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

Completeness2/5

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

The description does not provide enough context for a tool with six parameters and no annotations. It does not explain the expected format for date_applied, the allowed status values, or how this interacts with the tracker system. The output schema is present, but the description itself is incomplete.

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

Parameters1/5

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

With schema description coverage at 0%, the description must compensate for parameter meaning, but it does not mention any of the six parameters. The agent is left to infer meaning solely from parameter names, which is insufficient for parameters like 'status' and 'date_applied' that may have specific expected formats.

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 uses a specific verb ('Add') and resource ('job application'), clearly distinguishing this tool from the sibling 'add_followup' which adds follow-ups instead. The phrase 'to the tracker' provides additional context for the domain.

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?

The description clearly implies the tool is for creating new job applications, but it does not explicitly state when to use this over alternatives like add_followup or when not to use it. Usage is inferred from the resource name rather than explicitly stated.

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

add_followupB

Schedule a follow-up reminder tied to an application.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
application_idYes
follow_up_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the core purpose and does not disclose behavioral traits such as whether the application must already exist, whether the reminder appears in get_pending_followups, side effects on application status, or timezone handling. For a scheduling tool, this is insufficient behavioral disclosure.

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

Conciseness5/5

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

The description is a single sentence with no filler or redundant information. It efficiently states the tool's purpose, making it appropriately concise and front-loaded.

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

Completeness2/5

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

While the tool has only three parameters, the description provides no context about prerequisites (e.g., application must exist), date format expectations, or how this relates to sibling tools like 'get_pending_followups' and 'mark_followup_done'. Though an output schema exists, its contents are not available, so the description carries the burden and falls short.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the description provides no information about parameters. The schema itself only gives names and types (e.g., application_id integer, follow_up_date string) without semantic context. The description does not mention that follow_up_date should be in a specific format, whether note is optional, or how application_id relates to existing applications.

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 uses a specific verb ('Schedule') and resource ('follow-up reminder tied to an application'), making the tool's purpose immediately clear. It distinguishes itself from siblings like 'mark_followup_done' (completion vs. creation) and 'get_pending_followups' (listing vs. creation).

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?

The phrasing 'tied to an application' implies the tool requires an existing application and is meant for scheduling reminders, but it does not explicitly state when to use this tool over alternatives or when not to use it. No exclusions or alternative tool names are provided.

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

get_pending_followupsA

List follow-ups due on or before the given date that are not done.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_of_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It uses 'List' which suggests a read-only operation, but it does not explicitly state that no state changes occur or address edge cases like timezone handling. The output schema likely documents return values, so missing that is acceptable.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the verb and resource, then specifies the filtering criteria. No wasted words.

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

Completeness4/5

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

The description covers the core behavior and parameter meaning for a simple read operation. The presence of an output schema covers return value details. However, it lacks explicit usage guidance or edge-case handling, though these are less critical for a straightforward listing tool.

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 a single parameter as_of_date with no description in the schema. The tool description explains that it is the date for which follow-ups due on or before that date are included, adding semantic meaning to the parameter.

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 uses the verb 'List' with a specific resource 'follow-ups' and clearly specifies the filter (due on or before the given date and not done). This distinguishes it from sibling tools like list_applications and add_followup.

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?

The description implies usage for querying pending follow-ups, but it does not explicitly state when to use this tool over alternatives, nor does it mention exclusions. The context of sibling tools (e.g., mark_followup_done) makes the purpose clear, but explicit guidance is missing.

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

list_applicationsA

List job applications, optionally filtered by status, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the full burden. It discloses key behavior: list ordering (newest first) and optional filtering by status. It does not mention any other behavioral traits such as pagination, limits, or side effects (though as a list operation, side effects are unlikely). The description provides basic transparency but no deeper detail beyond what the name implies.

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

Conciseness5/5

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

The description is a single sentence that front-loads the primary purpose, then adds two qualifiers (optional filter and ordering). Every word contributes meaning, with no redundancy or filler. It is appropriately sized for the tool's simplicity.

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

Completeness4/5

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

Given the tool's low complexity (one optional parameter, output schema provided), the description covers the core purpose, the filter behavior, and result ordering. The output schema likely documents the return shape, so the description need not repeat that. The only missing element is explicit usage guidance versus sibling tools, but the overall picture is quite complete for a listing read operation.

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?

The only parameter 'status' has no schema description, and the schema coverage is 0%. The description adds semantic meaning by stating that 'status' is an optional filter. However, it does not explain allowed values, the meaning of an empty string default, or the behavior when omitted. The description partially compensates for the schema gap but not completely.

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 with a specific verb and resource: 'List job applications'. It adds the optional status filter and the ordering 'newest first', which distinguishes it from sibling mutation tools like add_application and update_status. The purpose is unambiguous and self-contained.

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?

The description implies this is the tool to use for viewing job applications, with optional status filtering. However, it does not explicitly mention when not to use it or how it relates to alternatives like pipeline_summary or get_pending_followups. There is no exclusionary guidance, so the usage context is clear but under-specified.

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

mark_followup_doneB

Mark a follow-up reminder as completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
followup_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are present, so the description must carry the burden. It only states the obvious action without disclosing side effects, idempotency, or behavior when the follow-up is already marked done. Minimal transparency.

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

Conciseness5/5

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

A single, front-loaded sentence that immediately states the tool's purpose. No unnecessary words or repetition.

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?

The tool is simple, but the description lacks behavioral details (e.g., side effects, error conditions) and does not explain the parameter. However, the output schema exists, so return values are covered elsewhere.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not explain followup_id. Although the parameter name is self-explanatory, the description adds no meaning beyond the schema's type definition.

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 action (mark) and resource (follow-up reminder) with a specific outcome (completed). It is easily distinguished from sibling tools like add_followup (creation) and get_pending_followups (listing).

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 implied (when a follow-up is completed, mark it done), but there is no explicit mention of when not to use it or alternatives. No exclusions or conditions are provided.

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

pipeline_summaryA

Return counts of applications grouped by pipeline status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. 'Return counts' clearly implies a read-only query with no side effects. While it does not detail edge cases or performance implications, the simple operation is sufficiently transparent.

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

Conciseness5/5

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

The description is a single, focused sentence with no wasted words. It conveys the essential action and resource immediately.

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

Completeness4/5

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

Given the simple aggregation purpose, empty input schema, and presence of an output schema, the description fully conveys what the tool does. The output schema handles the return shape, so no additional detail is necessary.

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 tool has zero parameters, so description-level parameter semantics are not needed. The baseline for 0 parameters is 4, and the description correctly avoids inventing parameters.

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 verb 'Return' and the resource 'counts of applications grouped by pipeline status'. It distinguishes itself from siblings like list_applications (raw list) and add_application (create operation) by specifying an aggregate view.

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?

The phrase 'counts grouped by pipeline status' clearly implies a summary use case, and the sibling names provide context for when to use this instead of list_applications. However, it does not explicitly mention exclusions or alternative tools.

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

update_statusB

Update the pipeline status of an existing application.

ParametersJSON Schema
NameRequiredDescriptionDefault
new_statusYes
application_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description alone must convey behavioral traits. It indicates mutation ('Update') but does not disclose whether the operation is idempotent, whether it requires special permissions, what happens to old status values, or any side effects. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the core action and resource. No filler or unnecessary information exists; it earns its place as a clear, brief statement.

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

Completeness2/5

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

Despite a simple 2-parameter schema and an output schema, the description omits crucial context like allowed status values and usage scenarios. The tool is simple, but the lack of any parameter semantics or behavioral details leaves an under-specified picture, making it incomplete for reliable agent invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter clarification. It mentions 'pipeline status' which implies new_status is a status value, but it does not enumerate valid statuses or explain the format of new_status or application_id beyond their names. The agent is left guessing acceptable values.

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?

Description uses specific verb 'Update' and clearly identifies the resource as 'pipeline status of an existing application.' This distinguishes it from sibling tools like add_application, list_applications, and add_followup, each of which has a different action and target.

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

Usage Guidelines2/5

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

The description gives no explicit indication of when to use this tool versus alternatives. It does not mention use cases, exclusions, or refer to sibling tools. The context is implied but not directly stated, so an agent has no guidance beyond the basic action.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedadd_application
    • First observedadd_followup
    • First observedget_pending_followups
    • First observedlist_applications
    • First observedmark_followup_done
    • First observedpipeline_summary
    • First observedupdate_status

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource and action: application creation/status/list, follow-up creation/listing/completion, and pipeline summary. There is no overlap between the application and follow-up subdomains.

Naming Consistency5/5

All tool names follow a clear verb_noun pattern with snake_case (e.g., add_application, list_applications, mark_followup_done). The consistency makes the toolset predictable and easy to navigate.

Tool Count5/5

Seven tools is a well-scoped count for a job tracker. Each tool covers an essential operation, and the number feels neither excessive nor sparse for the domain.

Completeness4/5

The toolset covers the core lifecycle: adding applications, updating status, listing with filters, and follow-up management. It lacks a delete application or update application details, but these are minor gaps that can be worked around.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables users to manage job applications (add, list, update status) through natural language conversations, using Notion as the backend.
    3
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Manages job applications, companies, roles, statuses, deadlines, and reminders through natural language queries.
    -
  • F
    license
    A
    quality
    C
    maintenance
    Enables managing a job search through natural language: tracking applications, discovery leads, interview prep, and resume generation. Connects to Claude via MCP to read and update local Excel files and documents.
    35
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables job-search application tracking through a private application board, managing application facts, stage history, and interview prep documents while leaving summarization and decision-making to the connected agent.
    -