Skip to main content
Glama

job-hunt-mcp-server

A small, local-first MCP (Model Context Protocol) server that keeps your job hunt in plain files. Record applications with status, dates, contacts, and interview feedback, then ask your AI agent things like:

  • "What is due this week?"

  • "Which applications went stale?"

  • "Draft a gentle follow-up from my notes for that one."

Everything stays in a single local JSON file (data/joblog.json, or wherever JOBHUNT_DATA_FILE points). No cloud, no accounts, no API keys. Results come back as chat-ready plain text you can read, paste, or edit.

Part of the Asdale Dynamics, LLC toolbox. Partners in spirit (separate projects): job-application-tracker-webapp (visual kanban board) and free-interview-prep-pack (interview practice kit). This one is the quiet, text-file logbook.

Who it's for

Built by Dylan Asdale of Asdale Dynamics, LLC - beginner-friendly AI education, plain English, step by step, never condescending.

Related MCP server: zhiro

Install

Requires Python 3.10+.

pip install .

That installs the jobhunt-mcp command and the mcp SDK dependency.

Run (as a local MCP server)

jobhunt-mcp              # stdio transport, ready for your agent
# or:
python -m job_log_mcp.server

Point your MCP-capable agent (Claude Desktop, opencode, etc.) at the command with stdio transport. Example opencode config:

{
  "mcp": {
    "jobhunt": {
      "type": "local",
      "command": ["jobhunt-mcp"]
    }
  }
}

Tools your agent gets

Tool

What it does

add_application

Record a new application (company, role, status, dates, notes).

list_applications

Everything in the log as plain text, optionally filtered by status.

update_application

Change one field of a record.

set_status

Move status and let the server stamp contact dates automatically.

add_contact

Attach a recruiter / hiring manager to an application.

add_interview_feedback

Record interview date + your own feedback notes.

what_is_due_this_week

Next actions due in the window (including overdue).

find_stale_applications

No recent contact and no scheduled next action - the nudge list.

draft_follow_up

A gentle follow-up email drafted from the stored notes.

How staleness is decided

Plain rules, no magic:

  • open / applied: stale after 7 days without contact.

  • interviewing: stale after 10 days.

  • offer: stale after 30 days.

  • closed: never stale.

  • A scheduled future next_action_due postpones staleness; a past-due one shows as overdue.

Data

data/joblog.json - one file, human-readable, easy to back up or grep. Test fixture data lives in tests/, never real application data.

Run the tests

pip install .[test]
pytest

Covers the status math (side-effect dates when moving between statuses) and the staleness rules from store.py.

Privacy & security

Local files only. No network calls, no telemetry, no API keys, no personal data shipped with the project. Keep your data/ folder backed up where you like, but out of git if it holds your real job hunt.

License

MIT - see LICENSE. Copyright (c) 2026 Asdale Dynamics, LLC.

Available Tools

9 tools
add_applicationC

Record a new job application. Dates use YYYY-MM-DD.

NameRequiredDescriptionDefault
urlNo
roleYes
notesNo
statusNoopen
companyYes
next_actionNo
date_appliedNo
next_action_dueNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It says this records a new application and specifies date formatting, but does not mention mutation effects, required fields, duplicate handling, default behavior, or validation beyond the date format.

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 two short, front-loaded sentences with no wasted wording. It is appropriately concise, though the terseness contributes to under-specification elsewhere.

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?

This is an 8-parameter creation tool with no annotations and 0% schema description coverage. The description does not state which fields are required, what status values are valid, or how defaults behave, leaving substantial gaps for an agent to infer.

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 all 8 parameters. It adds meaning only for date parameters by specifying YYYY-MM-DD, leaving company, role, status, url, notes, next_action, and next_action_due undocumented in both schema and description.

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?

The description states a specific verb and resource: "Record a new job application." This clearly distinguishes it from siblings like list_applications or update_application, though it does not explicitly name those alternatives.

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?

There is no guidance on when to use this tool versus update_application or set_status. The implied usage is creating a new record, but no exclusions, prerequisites, or duplicate-handling guidance are provided.

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

add_contactC

Add a contact person to an application (recruiter, hiring manager...).

NameRequiredDescriptionDefault
nameYes
roleNo
emailNo
app_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and discloses almost nothing: 'Add' implies a write, but there is no mention of duplicate handling, permission/auth requirements, or what happens when app_id does not exist. An output schema exists so return values need not be described, but the mutation semantics remain opaque.

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?

A single sentence, front-loaded with the verb and resource, with no filler. It is efficient but borders on under-specification given the four undocumented parameters.

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?

For a mutating tool with zero annotation coverage and 0% schema description coverage, the description should at minimum explain the email/role/app_id parameters and any duplicate or validation behavior. The presence of an output schema offsets the need to describe return values, but the input and mutation side is left largely unexplained.

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 and it does not. Four parameters (name, role, email, app_id) are never explained or mapped to the description's concepts; 'recruiter, hiring manager' hints at the role field at best, while email and app_id get no meaning at all.

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?

States a specific verb and resource ('Add a contact person to an application') and gives examples of the role types covered (recruiter, hiring manager), so an agent can distinguish it from add_application or add_interview_feedback. It stops short of explicitly contrasting itself with those siblings, but the object of the action is unambiguous.

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?

No when-to-use or when-not-to-use guidance is given; the parenthetical examples only clarify what a 'contact' is, not when to call this tool versus update_application or add_interview_feedback. The phrase 'to an application' weakly implies a pre-existing app_id is required, but that prerequisite is never stated.

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

add_interview_feedbackC

Record interview feedback: the interview date (YYYY-MM-DD) plus your notes.

NameRequiredDescriptionDefault
notesYes
app_idYes
date_strYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/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 says 'Record' but never states whether this creates a new feedback entry or overwrites an existing one, whether it is reversible, or whether the referenced application must exist — key facts for a mutation tool with zero annotation coverage. The only real behavioral detail added is the date format.

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?

A single front-loaded sentence with no filler, and the date format is surfaced immediately. It is efficient, though its brevity is partly under-specification rather than economy.

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?

An output schema exists so return values need not be explained, but for a required-parameter mutation tool with no annotations, the description leaves out app_id, overwrite/append behavior, and any usage context. An agent could not confidently construct the call from this text alone.

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 all three parameters. It documents date_str's format (YYYY-MM-DD) and gestures at notes, but completely omits app_id, the identifier that determines which application receives the feedback.

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?

Names a specific verb ('Record') and resource ('interview feedback'), so the agent can distinguish it from siblings like add_application or add_contact. However, it never mentions that the feedback is attached to an application, which is the tool's most important scoping fact.

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?

There is no guidance on when to use this versus add_application, update_application, or set_status, and no stated prerequisites (e.g. the application must already exist, or an interview must have occurred). The agent must infer the workflow context entirely.

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

draft_follow_upA

Draft a gentle follow-up email for one application, using the stored notes and contacts.

NameRequiredDescriptionDefault
toneNogentle
app_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/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 the load. It usefully reveals the data sources it pulls from and that it 'drafts' rather than sends, which is a meaningful behavioral distinction. However, it is silent on whether the draft is persisted, whether it overwrites a prior draft, and what permissions or preconditions are needed.

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 with no redundant wording; the core action and its data source come first.

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?

An output schema exists, so return values need not be explained, and the tool's surface is small. For a drafting tool that plausibly creates a stored artifact, though, it should say whether a draft record is created and how tone can be varied, which it does not.

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 coverage is 0%, so the description must compensate. It echoes the default 'gentle' tone but never refers to the tone parameter as configurable or indicates any valid values (there is no enum), and it does not clarify that app_id is an application identifier sourced from list_applications. It adds partial meaning but leaves the optional parameter effectively undocumented.

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?

States a specific verb and resource (draft a follow-up email) with an explicit scope limit of one application, plus the data source (stored notes and contacts). It is clearly distinguishable from siblings like add_application, set_status, or find_stale_applications, though it does not name them.

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 by the name and the 'one application' scoping; there is no explicit statement of when to prefer this over manually writing a follow-up or when it is inappropriate (e.g., application already closed or rejected). No prerequisites are mentioned, such as whether the application must already have contacts or notes.

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

find_stale_applicationsA

Applications with no recent contact and no upcoming next-action; the nudge list.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full disclosure burden. It states the core filtering behavior, but it does not define 'recent' or 'upcoming', clarify whether closed applications are excluded, or explicitly confirm that this is a read-only lookup.

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, front-loaded sentence with no filler. It conveys the filtering criterion immediately and uses the informal 'nudge list' label efficiently.

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?

For a zero-parameter lookup with an output schema, the description is largely complete: it names the resource and the filter. The remaining gaps are the undefined thresholds for 'recent' and 'upcoming' and the lack of explicit routing guidance against sibling tools.

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 there is no parameter semantics to explain beyond the schema. The baseline for a no-parameter tool is 4, and the description does not need to add parameter guidance.

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?

The description identifies the exact subset of applications returned: those with no recent contact and no upcoming next-action. It is more specific than a generic list tool, but it does not explicitly contrast itself with siblings such as list_applications or what_is_due_this_week.

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 phrase 'the nudge list' implies this should be used when looking for applications that need follow-up. However, there is no explicit when-to-use guidance, no exclusions, and no named alternatives for related queries.

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

list_applicationsB

List applications as chat-ready plain text; optionally filter by status.

NameRequiredDescriptionDefault
statusNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the return format (chat-ready plain text), which is genuine context, and "List" implies a read-only operation. It says nothing about ordering, result limits, pagination, or whether all applications or only active ones are returned.

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?

One short sentence, front-loaded with the action and scope, with no filler. It is efficiently written, though brevity here edges toward under-specification rather than economy.

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?

An output schema exists, so return values need not be explained, and a zero-required-parameter list tool is inherently simple. Still, the definition leaves the agent guessing about valid status values and about when a specialized sibling is the better choice, which is incomplete for a tool sitting among several overlapping listers.

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 single parameter has 0% schema description coverage and no enum, so the description is the only source of meaning. It correctly conveys that filtering is optional and that the parameter filters by status, but it never indicates valid status values or whether an empty string means "no filter" — a real gap for a free-form string input.

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?

The description states a specific verb and resource ("List applications") and adds two defining traits: plain-text chat-ready output and optional status filtering. It does not name or contrast itself with overlapping siblings such as find_stale_applications or what_is_due_this_week, which is the only thing separating it from 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: an agent can infer this is the general-purpose lister and the status parameter narrows results. There is no explicit "use this when / prefer X instead" guidance, which matters here because three siblings (find_stale_applications, what_is_due_this_week) return overlapping subsets of the same data.

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

set_statusC

Set the status. When it flips to applied/interviewing/offer/closed, contact dates update automatically.

NameRequiredDescriptionDefault
whenNo
app_idYes
statusYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that contact dates update automatically when status flips to applied/interviewing/offer/closed, but it does not explain permissions, transition restrictions, or what happens if contact dates already exist.

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 two short sentences with the side effect front-loaded after the core action. It is efficient, though the phrase 'the status' remains slightly vague about the target object.

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?

For a mutation tool with no annotations, three parameters, and 0% schema description coverage, the description is missing critical details: which application app_id identifies, what 'when' controls, and any transition or permission constraints. The presence of an output schema reduces the need to explain return values, but the input side remains under-described.

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% for three parameters. The description adds meaning by listing status values (applied/interviewing/offer/closed), which the schema lacks as an enum, but it leaves app_id and especially the 'when' parameter completely unexplained.

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?

The description uses a specific verb and resource ('Set the status') and enumerates status values that make the application-status context inferable. It does not explicitly distinguish this from the sibling update_application, so it is clear but lacks direct sibling differentiation.

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?

There is no guidance on when to use set_status instead of update_application or other siblings, and no prerequisites or exclusions are stated. The only contextual clue is the automatic contact-date behavior for certain statuses.

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

update_applicationB

Update one field of an application (company, role, url, notes, next_action, next_action_due, status).

NameRequiredDescriptionDefault
fieldYes
valueYes
app_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose one useful trait — only a single field is mutated per invocation — but says nothing about validation failures, invalid field names, type coercion of 'value', or whether updates are reversible.

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?

One front-loaded sentence with the mutable field set in parentheses; no filler, no redundancy. Everything present earns its place.

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?

An output schema exists, so return values need not be described. But for a three-required-param mutation tool with no annotations, the definition omits value formatting rules and the status/next_action overlap with set_status, leaving real ambiguity an agent must resolve by trial.

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?

With 0% schema description coverage, the description does real work by enumerating the legal values for 'field', which is otherwise an untyped string. However, 'app_id' and 'value' remain unexplained — notably the expected format for next_action_due (date string) and status (allowed values), which is the most likely source of bad calls.

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?

States a specific verb ('Update') and resource ('an application') and enumerates the seven mutable fields, so the agent knows exactly what surface it touches. It does not differentiate from siblings, notably set_status, which appears to overlap with the 'status' field listed here.

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?

No guidance on when to use this versus set_status (which also writes status) or add_application. The only implied rule is 'one field per call', and the agent must infer whether to loop this tool or pick a sibling for status changes.

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

what_is_due_this_weekB

Applications whose next action falls in the next days days (due dates or overdue).

NameRequiredDescriptionDefault
daysNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden, and it does disclose the inclusion criterion (due dates plus overdue). It does not state that this is a read-only query, whether results are ordered, or any result-count limits, though the presence of an output schema covers the return shape.

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 tight sentence with the inclusion criterion front-loaded and the `days` window defined inline. Nothing is wasted.

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 one-parameter query with an output schema, the essentials are present, but an agent still can't tell what a 'next action' is derived from or how this tool relates to the other application-listing siblings. Sibling routing is the main missing piece.

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 0% and the schema only says 'integer, default 7', so the description does real work by defining `days` as the upcoming window and noting overdue items are included. It also resolves the tension between the name 'this_week' and the configurable window, though it doesn't state the allowed range.

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?

The description makes clear this retrieves applications by upcoming action date, and clarifies the scope includes overdue items. It lacks an explicit verb and never differentiates itself from siblings like list_applications or find_stale_applications, so an agent must infer the distinction.

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?

There is no when-to-use guidance and no named alternative; the description never says to prefer this over list_applications or find_stale_applications. Usage is only implied by the due-date framing.

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. 9 tool updatesv0.1.0
    • First observedadd_application
    • First observedadd_contact
    • First observedadd_interview_feedback
    • First observeddraft_follow_up
    • First observedfind_stale_applications
    • First observedlist_applications
    • First observedset_status
    • First observedupdate_application
    • First observedwhat_is_due_this_week

TDQS

B3.2/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target a clear resource+action, and the three query tools (list_applications, what_is_due_this_week, find_stale_applications) have distinct intents. The main overlap is update_application accepting a `status` field while set_status also exists with automatic contact-date side effects, which could lead an agent to pick the wrong one and silently skip that logic.

Naming Consistency4/5

The dominant pattern is verb_noun (add_application, update_application, add_contact, add_interview_feedback, find_stale_applications, draft_follow_up). Minor deviations: set_status omits the domain noun used elsewhere, and what_is_due_this_week breaks the pattern with a question-phrase style, but overall it stays readable and predictable.

Tool Count5/5

Nine tools is well-scoped for a personal job-application tracker: core CRUD, contact logging, and three targeted views/actions. Each tool covers a distinct workflow step without padding.

Completeness3/5

Creation, update, listing, and due/stale views are covered, but there is no delete/archive for applications or contacts and no way to read back stored interview feedback once recorded. Agents can work around some gaps via status changes but cannot remove or retrieve certain records.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables tracking of job applications and freelance leads through an MCP interface, with tools to add and update items, list and summarize the pipeline, flag stale entries, and draft follow-up messages grounded in each item's logged notes using locally stored JSON data.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables an AI agent to research industries and companies, track job postings and deadlines from recruiting sites and spreadsheets, match roles against a personal profile, manage application stages, and fill in application forms up to but not including submission. All data stays in a local folder on the user's machine, with reversible actions and confirmation cards for consequential steps.
    1
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables Claude to record job applications in a local JSON file and then list them, change their status (applied, replied, interview, rejected, offer), and surface stale applications that need a follow-up. Requires no database or account, and validates every input so saves stay clean.
    4
    1
    MIT