job-hunt-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@job-hunt-mcp-serveradd application for software engineer at Acme, applied today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.serverPoint 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 |
| Record a new application (company, role, status, dates, notes). |
| Everything in the log as plain text, optionally filtered by status. |
| Change one field of a record. |
| Move status and let the server stamp contact dates automatically. |
| Attach a recruiter / hiring manager to an application. |
| Record interview date + your own feedback notes. |
| Next actions due in the window (including overdue). |
| No recent contact and no scheduled next action - the nudge list. |
| 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_duepostpones 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]
pytestCovers 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 toolsadd_applicationC
Record a new job application. Dates use YYYY-MM-DD.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| role | Yes | ||
| notes | No | ||
| status | No | open | |
| company | Yes | ||
| next_action | No | ||
| date_applied | No | ||
| next_action_due | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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...).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| role | No | ||
| No | |||
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | ||
| app_id | Yes | ||
| date_str | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | gentle | |
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| when | No | ||
| app_id | Yes | ||
| status | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | ||
| value | Yes | ||
| app_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.1.0- First observed
add_application - First observed
add_contact - First observed
add_interview_feedback - First observed
draft_follow_up - First observed
find_stale_applications - First observed
list_applications - First observed
set_status - First observed
update_application - First observed
what_is_due_this_week
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Job-search tracker for AI agents: applications, stale follow-ups, skills gaps, H-1B lookup.
Job search for your AI: save jobs, research companies, keep stories, track applications.
Manage job applications — jobs, companies, boards, notes, and profile — from your AI client.
Track job applications: find the ones to follow up on, add jobs, update status, notes and steps.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseNot gradedqualityBmaintenanceEnables 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.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables an AI agent to store a job-search profile locally, find public job-board postings, evaluate and rank them against the profile, and track seen, saved, applied, or dismissed jobs.MIT
- AlicenseBqualityCmaintenanceEnables 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.41MIT