Skip to main content
Glama

Job Search Assistant — MCP Server

A local Model Context Protocol server that lets Claude read and update your job-search spreadsheets through natural conversation — "what's still awaiting a response after 2 weeks?", "add this posting to my tracker", "mark the Amazon role as interviewing", "add a Salary Range column and set it to 180-210k for the Amazon role", "what remote leads did I find this week?", "promote the Acme Corp lead to my tracker".

It manages a funnel — discover → apply → track — plus an interview-prep note:

File

Role

Env var

Job_Tracking.xlsx

Applications you've submitted (the tracker)

JOB_TRACKER_FILE

Job_Search_Discovery.xlsx

Leads you've found but not yet applied to (discovery)

JOB_DISCOVERY_FILE

Interview_Prep_QA.md

Rolling interview Q&A reference (prep)

JOB_INTERVIEW_PREP_FILE

Resumes\

Folder for generated resumes / cover letters, saved and printed from

JOB_RESUMES_DIR

resume_master.json

Stable resume facts that generate_resume tailors from

JOB_RESUME_MASTER_FILE

promote_to_tracker turns a discovery lead into a tracked application; save_document and print_document write generated docs to the Resumes\ folder and print them. An optional Gmail integration (five tools) searches your inbox for recruiter mail, scans for updates on tracked roles, and drafts/sends replies — see Gmail integration.

  • Runtime: Node.js + TypeScript

  • Transport: stdio (local process — no networking, no auth)

  • Data source: your .xlsx files, read/written with SheetJS (xlsx)

  • Schema: dynamic — driven by each sheet's header row (custom columns supported)

  • Printing: silent PDF printing via pdf-to-printer (bundles SumatraPDF); .docx is converted to PDF first using LibreOffice or Microsoft Word

  • Client: Claude Desktop or Claude Code (see config below)

Build

cd mcp-job-tracker
npm install
npm run build

This produces dist/index.js. npm install also pulls pdf-to-printer, which bundles SumatraPDF for silent PDF printing (no separate install). Printing .docx additionally requires LibreOffice or Microsoft Word for the docx→PDF conversion step; PDFs need neither. Keeping the discovery sheet's formatting on MCP writes uses Python + openpyxl (scripts/format_discovery.py); optional — writes still succeed without it. generate_resume needs Python + python-docx (scripts/gen_resume.py) plus LibreOffice (matches the existing resumes' look) for its PDF step. read_document uses Python + pypdf (PDFs) and python-docx (docx) via scripts/extract_text.py. The optional Gmail tools need a one-time npm run gmail:auth (see Gmail integration).

Related MCP server: quantjobs

Configure Claude Desktop

Open Claude Desktop's config file (Windows):

%APPDATA%\Claude\claude_desktop_config.json

Add a job-tracker server entry (create the file / mcpServers object if needed):

{
  "mcpServers": {
    "job-tracker": {
      "command": "node",
      "args": ["C:\\Users\\developer\\mcp-job-tracker\\dist\\index.js"],
      "env": {
        "JOB_TRACKER_FILE": "C:\\Users\\developer\\Documents\\Job_Tracking.xlsx",
        "JOB_DISCOVERY_FILE": "C:\\Users\\developer\\Documents\\Job_Search_Discovery.xlsx",
        "JOB_INTERVIEW_PREP_FILE": "C:\\Users\\developer\\Documents\\Interview_Prep_QA.md",
        "JOB_RESUMES_DIR": "C:\\Users\\developer\\Documents\\Resumes"
      }
    }
  }
}

Restart Claude Desktop. You should see the job-tracker tools appear. If JOB_TRACKER_FILE is omitted, the server defaults to <home>\Documents\Job_Tracking.xlsx. If JOB_DISCOVERY_FILE, JOB_INTERVIEW_PREP_FILE, or JOB_RESUMES_DIR are omitted, they default to Job_Search_Discovery.xlsx, Interview_Prep_QA.md, and a Resumes\ folder sitting **next to** the tracker file. **Claude Code** uses the same entry under mcpServers in ~/.claude.json.

Moving to another machine

The server is portable (plain Node stdio — Windows or macOS). To set it up on a new machine:

  1. Copy this project folder over (you can skip node_modules and dist).

  2. Copy your Job_Tracking.xlsx to the new machine.

  3. Make sure Node.js 18+ is installed (node --version).

  4. Run the installer, pointing it at your spreadsheet:

    node setup.mjs "C:\\path\\to\\Job_Tracking.xlsx"     # Windows
    node setup.mjs "/Users/you/Documents/Job_Tracking.xlsx"  # macOS

    It installs deps, builds, backs up the existing Claude Desktop config, and wires in the job-tracker entry with paths correct for that machine. Omit the path to default to <home>/Documents/Job_Tracking.xlsx. Flags: --no-build (reuse a copied dist/), --bare-node (use node from PATH instead of an absolute node path).

  5. Fully quit and restart Claude Desktop.

Tools

Tool

What it does

list_jobs

List all rows. Optional filters: status (case-insensitive exact), company (substring), and a applied_from / applied_to date range (YYYY-MM-DD).

get_job

Full details for one application, matched by company (+ position if the company has several rows). Includes daysSinceApplied and resumeFiles (matching files in the Resumes folder, so you can see which resume you used).

add_job

Append a new row. company + position required; everything else optional. status defaults to Awaiting Response, date_applied defaults to today. Set custom columns via extra_fields.

update_job_status

Update status (and optionally notes) for a row matched by company + position. Refuses to touch a non-existent or ambiguous match.

update_job

Edit any field(s) of a row matched by company + position — location, resume version, dates, notes, and custom columns (via extra_fields). Rename via new_company / new_position; pass an empty string to clear a field. Only supplied fields change; reports exactly what changed.

delete_job

Permanently remove a row matched by company + position, shifting rows below it up (like Excel's Delete Row). Refuses missing/ambiguous matches, backs up first, and returns the full deleted row so it can be re-added.

get_stale_jobs

Rows still Awaiting Response or Applied whose Date Applied is more than days ago (default 14), computed against today.

get_due_followups

Rows whose Next Follow-Up date is due — on/before today, or within the next days days. Skips closed rows (Declined/Withdrawn/Closed); sorted most-overdue first (daysUntil is negative when overdue).

search_jobs

Case-insensitive substring search across Company, Position, and Notes.

draft_followup_message

(stretch) Drafts a short, professional follow-up email for a role, referencing time since applying and the resume version used. Draft text only — it does not send anything.

add_column

Add a new custom column at the end of the sheet. Optional default_value fills every existing row. Rejects duplicate names.

modify_column

Rename a custom column (new_name) and/or set one value across every row (fill_value; empty string clears it). Refuses on the base columns.

delete_column

Remove a custom column, shifting the columns to its right left (like Excel's Delete Column). Refuses on the base columns.

Discovery-sheet tools (Job_Search_Discovery.xlsx)

Tool

What it does

discovery_list

List leads. Optional filters: company (substring), status (exact), query (substring across all columns).

discovery_add

Append a lead. company + position required; all other columns via fields. Date Found defaults to today, Status to Open.

discovery_update

Edit a lead matched by company + position. Rename via new_company / new_position; set columns via fields (empty string clears).

discovery_delete

Remove a lead matched by company + position, returning the deleted row so it can be re-added.

promote_to_tracker

Copy a lead into the tracker as an application — maps Company/Position/Job Link/Location, sets Status Applied and Date Applied today (both overridable), and folds Salary + Match Assessment into Notes. Refuses to create a duplicate tracker row. Optional remove_from_discovery moves it instead of copying.

Interview-prep tools (Interview_Prep_QA.md)

Tool

What it does

read_interview_prep

Return the prep file as text, or just one company's section with the optional company filter. Friendly message (not an error) if the file or section doesn't exist.

append_interview_prep

Append markdown under a ## {company} section — creating the file (with a top-level heading) and/or the section as needed, or adding to an existing section without duplicating its heading. Backs up first.

Document tools (Resumes\)

Tool

What it does

generate_resume

**Generate a tailored resume PDF (or docx) host-side and save it to Resumes\ — no base64, works from Claude Desktop.** Stable facts (employers, dates, education, skills) come from resume_master.json; the model supplies only the per-posting summary + key_qualifications bullets for a company + position. Rendered via python-docx + LibreOffice to match the existing resumes. See the workflow below.

save_document

Save a .docx/.pdf into the Resumes\ folder (created if missing). Takes **source_path** (preferred — an absolute path to a file already on disk, copied instantly) *or* content_base64 (fallback, small files only — capped at 20 000 chars ≈ 15 KB). Validates the leading bytes match the extension. Refuses to overwrite unless overwrite: true, backing the old file up first. Returns the saved path and size.

print_document

Silently print a saved file (name in Resumes\, or a full path) to the default or a named printer. PDFs print directly; .docx is converted to PDF first (cached next to the docx). Lists available printers if a bad name is given. Confirms the job was sent, not physically finished.

read_document

Extract the plain text of a saved .pdf/.docx in Resumes\ (same scoping as delete_document) so it can be read/analyzed in conversation. Read-only; returns text + metadata (type, pages, words, chars). Very long text is capped with an explicit truncated note — never silently.

read_text_file

Read any plain-text file (.md, .txt, .json, .csv, …) anywhere under the Job Tracking root — handoff notes, scratch files, etc. — by filename or relative path. Read-only and strictly scoped: ../absolute paths that escape the root are refused; a missing file lists the directory's contents. Non-text extensions are refused (PDFs/docx → read_document). Truncates past ~1 MB with a note; refuses past 5 MB.

list_documents

List saved resumes / cover letters in the Resumes\ folder (name, size, modified date). Optional filter substring on the name; newest first.

delete_document

Delete a document from the Resumes\ folder, backing it up (rotating .backups) first. Refuses a missing file or a path outside the folder.

list_resume_master_structure

Show the shape of resume_master.json (keys, array lengths, scalar types — not full values) to find a path. Optional path scopes it.

get_resume_master_field

Read one field from resume_master.json by dot/bracket path, e.g. skills, projects[0].description, experience[2].title.

update_resume_master_field

Update one existing field in resume_master.json by path (backs up first, reports old → new). Won't create new keys or change a field's kind (array/object/scalar). Scoped to that one file.

Gmail tools (optional — require one-time auth)

Tool

What it does

search_gmail_for_job

Search your Gmail for job-related mail by company (+ optional position, free-text query, and limit, default 10 / max 50). Read-only.

read_gmail_message

Read one message's full body by its id (e.g. from a search_gmail_for_job result). Read-only.

scan_job_updates

Scan recent Gmail for updates relevant to your tracked applications — optional company filter, days window (default 30), per-company limit (default 3). Read-only.

draft_gmail_reply

Save a Gmail draft — reply within a thread_id, or a new message to to; body required, optional subject/cc. Never sends.

send_gmail_email

Sends immediately and cannot be recalled. Refuses unless confirm: true, and only after the user has approved the exact to/subject/body.

Until Gmail is authorized (see Gmail integration below), all five return a clear "authorize first" error.

Spreadsheet schema

Both workbooks use a dynamic schema — the columns are driven by each sheet's actual header row, and the read/write engine is schema-agnostic (a sheet is just a spec: file path, required columns, which columns are dates, and the match keys).

Tracker (Job_Tracking.xlsx)

The ten base columns below must always be present (the tools match, filter, and compute dates on them) and are protected from rename/delete:

Company | Position | Job Link | Location | Resume Version | Contact/Referral | Date Applied | Status | Next Follow-Up | Notes

Any custom columns you add beyond these are first-class:

  • They appear in list_jobs / get_job output automatically.

  • You set them per job with the extra_fields argument of add_job and update_job, e.g. extra_fields: { "Salary Range": "180-210k" } (an empty string clears the value).

  • You add / rename / remove them with add_column, modify_column, and delete_column.

Custom columns are stored as text. The two base date columns (Date Applied, Next Follow-Up) are the ones stored as Excel date serials.

Managing columns

// add a column, pre-filled on every existing row
add_column      { "name": "Salary Range", "default_value": "TBD" }
// rename it and/or overwrite every row's value
modify_column   { "name": "Salary Range", "new_name": "Comp", "fill_value": "Confidential" }
// remove it (shifts later columns left, like Excel)
delete_column   { "name": "Comp" }

Conventional Status values: Applied, Awaiting Response, Informal - Referral Sent, Interviewing, Offer, Declined, Withdrawn, Closed - No Longer Available. (The field is free text — these are just the values suggested to Claude.)

Discovery (Job_Search_Discovery.xlsx)

The base columns, in order:

Date Found | Company | Position | Location (Remote/Hybrid) | Salary | Salary Confidence (Confirmed/Estimated) | Job Link | Source (Company Careers Page/LinkedIn/Aggregator) | Posted Date / Days Since Posted | Known Gap Flag | Match Assessment | Status

All discovery values are stored as text (including Date Found, kept as an ISO YYYY-MM-DD string — no date-serial conversion). Rows are matched by Company + Position. Set columns through the fields argument of discovery_add / discovery_update; Company and Position have their own parameters. Status on new leads defaults to Open.

The column-management tools (add_column etc.) operate on the tracker; the discovery sheet is managed through its own row tools.

Formatting: the discovery sheet is also written by the daily 11 AM task (Python + openpyxl, with bold header / frozen row / auto-filter / clickable links). Because SheetJS (used by the MCP tools) doesn't re-serialize that rich styling, every MCP discovery write is followed by a best-effort openpyxl reformat pass (scripts/format_discovery.py) that re-applies the standard formatting — so MCP edits and the daily task keep the file looking the same. Requires Python + openpyxl; if absent, the write still succeeds (the tool returns formatted: false) and the next daily run restores styling.

Interview prep (Interview_Prep_QA.md)

A plain-markdown reference — not a spreadsheet — organised as:

# Interview Prep — Q&A Reference

## Company — Role
**Q: ...?**

A: ...

*Notes: ...*

---

## Next Company — Role
...

append_interview_prep matches an existing ## Company section on the company portion of the heading (the part before — Role), so appending "Acme Corp" lands under ## Acme Corp — Engineering Manager. New sections are separated with ---. Keep to the **Q: …** / A: … / optional *Notes: …* pattern when adding content.

If a bare company name matches more than one section (e.g. ## Acme Corp — Billing and ## Acme Corp — Clinical), both read/append refuse and list the matches — pass the full heading to disambiguate. An exact full-title match always wins over a bare prefix, so a specific heading is never ambiguous.

Generating a tailored resume (generate_resume)

The recommended way to produce a resume — especially from Claude Desktop, which can't write to arbitrary host paths. The model never emits the binary; it emits tailored text, and the server renders the PDF host-side. The server's MCP instructions tell connected clients to use this tool for resumes rather than hand-rolling a python-docx/LibreOffice script or moving bytes through base64, so it's the single resume path (scripts/gen_resume.py is the one generator).

generate_resume {
  "company": "Acme Corp",
  "position": "Engineering Manager",
  "summary": "…tailored SUMMARY paragraph for this posting…",
  "key_qualifications": [
    "…bullet tying real experience to this role…",
    "…another alignment bullet…"
  ]
  // optional: skills[], include_projects, format ("pdf"|"docx"), filename, overwrite
}
  • Facts stay fixed. Employers, titles, dates, education, certs, and the base skills live in resume_master.json; the model can't invent or drift them — it only supplies the summary and key_qualifications for this company + position. Edit your real facts in resume_master.json (a sibling of the tracker; override with JOB_RESUME_MASTER_FILE).

  • Rendering merges master + tailoring → .docx via scripts/gen_resume.py (python-docx, the measured spec: Liberation Serif, 20 pt name, ruled 11 pt headings, 0.63" margins, US Letter) → PDF via LibreOffice. ~15 s per resume.

  • Output lands in Resumes\ (e.g. Dale-Magrath-Resume-Acme-Corp-Engineering-Manager.pdf), ready for print_document. No base64, no download-then-move.

  • Wired to tracking. The result carries a nextStep with the exact follow-up call, chosen from the sheets: brand-new company → add_job (as Applied, Resume Version set to the file), an existing discovery lead → promote_to_tracker, already tracked → update_job to set the Resume Version. So tailor → save → apply → track is one Desktop flow — the model just offers the suggested step.

Why this beats base64: the tailored text is ~1 k tokens; the 55 KB PDF binary would be ~22 k. The model does the writing; the host does the rendering.

Rendering notes (why it's built this way)

Hard-won details worth keeping — changing them tends to reintroduce old bugs:

  • Role/date lines are a 2-column borderless table, not a tab stop. A tab with a right tab-stop spanning a bold title and italic dates in one paragraph triggered a LibreOffice PDF-export bug (ToUnicode CMap on subset fonts) that made the title extract as garbled characters in pdftotext, pypdf, and pdfminer.six — even though it looked fine on screen (and could trip ATS parsers). The table renders identically and extracts cleanly in all three. Keep it a table.

  • LibreOffice does the docx→PDF, not Word. LibreOffice subsets fonts → ~55 KB with Liberation Serif, matching the existing resumes. Word barely subsets (embedded ~1.1 MB of Calibri → a 258 KB PDF), so convertDocxToPdf prefers LibreOffice and falls back to Word only if it's absent.

  • 2-page fit is by layout, never by truncation. A full experience history + 6-bullet Key Qualifications + Projects + Education + Skills lands on 2 pages with Honors & Awards off (opt in with include_honors). If it ever runs long, the lever is tightening spacing (heading 12/5 pt, body 8 pt) — content is never silently trimmed to hit a page count.

  • base64 is a last resort. The only resume ever saved through the base64 path came out corrupt (valid %PDF/%%EOF but a broken startxref). The leading-bytes check catches gross truncation, not subtle corruption — so prefer generate_resume, or save_document with source_path, for anything binary.

Saving an already-generated document (Resumes\)

If a file already exists on disk (e.g. produced by the docx/pdf skill), save_document puts it into Resumes\, and print_document sends it to a printer:

// Preferred: hand over a path to a file already written to disk.
save_document   { "filename": "Dale-Resume-Acme-Corp.docx", "source_path": "C:\\Temp\\out.docx" }
print_document  { "filename": "Dale-Resume-Acme-Corp.docx" }            // default printer
print_document  { "filename": "sample.pdf", "printer_name": "Office EPSON ET-3850 Series" }

Always prefer source_path for real documents. content_base64 makes the model emit the whole file as base64 token-by-token — roughly 3 characters per token for binary formats, so a 53 KB resume is ~22 000 output tokens (several minutes), and a 134 KB PDF exceeds the response limit and can never finish. source_path costs ~30 tokens at any file size and can't corrupt the bytes. Inline base64 is therefore capped at 20 000 characters and fails immediately with a pointer to source_path.

  • PDFs print directly via SumatraPDF (bundled with pdf-to-printer); no dialog, single copy, default settings.

  • .docx is converted to a PDF next to it first — using LibreOffice (soffice --headless --convert-to pdf) if installed, otherwise Microsoft Word via COM. The PDF is cached and reused while it's newer than the docx. If neither LibreOffice nor Word is available, printing a .docx returns a clear error suggesting you save it as a PDF instead.

  • print_document confirms the job was sent to the printer — not that it physically finished. Base64 transport is meant for small files (resumes, well under 1 MB), not large documents.

Gmail integration (optional)

The five Gmail tools let Claude search your inbox for recruiter mail, scan for updates on tracked applications, and draft/send replies — all against your own account. They're off until you authorize them; unauthorized calls return a clear error telling you what to run.

One-time setup (full walkthrough in GMAIL_SETUP.md):

  1. Create a Google Cloud project, enable the Gmail API, and create a Desktop app OAuth client; download its JSON as credentials.json in the project root (next to package.json). This step is manual — it can't be scripted.

  2. Run the one-time consent flow:

    npm run gmail:auth

    It opens Google's consent screen and saves the token to gmail_token.json. The server refreshes it automatically afterward.

  3. Restart Claude Desktop so the tools load.

Config / files (both .gitignored):

File

Purpose

Env override

credentials.json

OAuth client (manual download)

JOB_GMAIL_CREDENTIALS_FILE

gmail_token.json

Stored access/refresh token from consent

JOB_GMAIL_TOKEN_FILE

Requested scopes are read-only + compose + send (gmail.readonly, gmail.compose, gmail.send) — intentionally no mailbox modify/delete access. npm install pulls the one dependency (google-auth-library).

Safety: search_gmail_for_job / read_gmail_message / scan_job_updates are read-only; draft_gmail_reply only ever creates a draft; send_gmail_email sends immediately and can't be undone, so it refuses without confirm: true and should only be called after you've reviewed the exact to/subject/body.

Safety & behavior notes

  • Backups (rotating): every write first copies the file into a sibling .backups\ folder with a timestamped name (<file>.<YYYYMMDD-HHmmss-SSS>.bak), keeping the **last 10** per file. This replaces the old single-slot .bak, so repeated writes (manual edits or the daily task) can't clobber your last-good copy. Applies to the sheets, the prep file, and delete_document; promote_to_tracker backs up each file it writes. (Nothing is backed up when a file is created fresh.)

  • Fresh reads: the workbook is re-read on every call, so edits you make directly in Excel are always reflected.

  • Validation: row-editing tools verify the row exists (and is unambiguous) before changing anything; bad dates are rejected up front. promote_to_tracker refuses to create a duplicate tracker row.

  • Dates (tracker only) are stored as Excel date serials formatted d-mmm-yy. New rows are written the same way, so 2026-06-01 shows as 1-Jun-26 — matching the existing rows. Reads/writes use timezone-free calendar-date math. Discovery dates are plain ISO text.

  • Formatting preservation: new rows copy the number format (and, where the writer supports it, the cell style) of the last existing row, and column widths are preserved — the way a human copy-pasting a row would leave things.

    Note: the open-source SheetJS build faithfully preserves number formats and column widths (what this workbook uses). Rich per-cell styling (custom fonts/fills/borders) is not re-serialized by the community build; if you later add heavy cell styling, preserving it would require SheetJS Pro.

  • File locked: if a file is open in another program (Excel for the sheets, Word/an editor for the prep .md), writes fail with a clear "please close it" message rather than a cryptic error.

Testing

npm test

test-client.mjs builds the server, then spins it up over stdio against self-contained fixtures in a temp folder and asserts on every tool (66 checks across the tracker, discovery, promote, interview-prep ambiguity, document, and backup paths). Your real files are never touched — the suite creates its own throwaway tracker/discovery/prep/Resumes in the OS temp dir and deletes them afterward. It exits non-zero if any check fails.

It does not send a physical print job — print_document is covered only via its error paths (missing file, unsupported type, unknown printer).

Available Tools

35 tools
add_columnAdd columnA

Add a new custom column to the spreadsheet, appended after the last column. Optionally fill every existing job row with a default value. Refuses if a column with that name already exists. Backs the file up before writing. (Note: the built-in job tools only read/write the standard columns; custom columns are managed with these column tools.)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHeader text for the new column.
default_valueNoIf given, written into this column for every existing job row.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses several key behaviors: appending after the last column, optional default-value filling, refusal on duplicate names, and file backup before writing. These details give the agent a clear understanding of side effects and failure conditions.

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 three sentences long, front-loaded with the primary action, and every sentence contributes unique information. There is no redundancy or filler, making it highly concise and well-structured.

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

Completeness5/5

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

This is a simple tool with only two parameters and no output schema. The description covers purpose, behavioral rules, failure modes, and the relationship to sibling tools, making it fully self-contained and sufficient for correct use.

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

Parameters4/5

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

Schema coverage is 100%, so a baseline of 3 is appropriate. However, the description adds meaning beyond schema by explaining that default_value is written into every existing job row and that name uniqueness is enforced. This enriches the parameter semantics.

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 states 'Add a new custom column to the spreadsheet, appended after the last column' with a specific verb and resource. It distinguishes from sibling job tools by explicitly noting that job tools only handle standard columns and custom columns are managed with these column tools.

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 description gives clear context about when to use this tool: for managing custom columns, as opposed to the built-in job tools which read/write standard columns. It also notes duplicate-name refusal, implicitly suggesting that a different tool (like modify_column) would be needed for existing columns, though it doesn't name the alternative explicitly.

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

add_jobAdd jobA

Append a new job application row. Company and Position are required; all other fields are optional. Status defaults to "Awaiting Response" and Date Applied defaults to today if omitted. Use extra_fields to set any custom columns you've added. Backs the file up to .bak before writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
statusNoStatus. Defaults to "Awaiting Response".
companyYesCompany name (required).
job_linkNoURL of the job posting.
locationNo
positionYesPosition / title (required).
date_appliedNoDate applied (YYYY-MM-DD). Defaults to today.
extra_fieldsNoValues for custom columns you've added, as {"Column Name": "value"}. Each name must be an existing column (create it first with add_column).
next_follow_upNoNext follow-up date (YYYY-MM-DD).
resume_versionNoWhich resume version was used.
contact_referralNoContact or referral name.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses several behavioral traits: required fields, default values for status and date_applied, custom column handling via extra_fields, and backup creation before writing. It does not mention return values or error behavior, but the provided context is strong.

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 four concise sentences, front-loaded with the primary action and then covering defaults, custom fields, and backup behavior. Every sentence adds useful information with no redundancy.

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 mutation tool with 11 parameters, no output schema, and nested objects, the description covers the critical aspects: required fields, defaults, custom column usage, and backup safety. It does not describe return values or error handling, but the essential operational details are present.

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 82%, so the schema already documents most parameters. The description reinforces defaults and explains extra_fields, but does not add significant new meaning beyond what the schema descriptions already provide. Baseline 3 is appropriate.

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 ('Append a new job application row') and identifies the resource ('job application row'). It also specifies required fields (Company and Position), which helps distinguish it from update/delete/list operations.

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 for creating new job entries and mentions extra_fields for custom columns, but it does not explicitly state when to use this tool versus alternatives like update_job or delete_job. No exclusions or alternative references are given, leaving usage context implied rather than explicit.

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

append_interview_prepAppend interview prepA

Append markdown to the interview-prep file under a company's section. Creates the file (with a top-level heading) and/or the company section if needed; otherwise adds to the existing section without duplicating its heading. Keep the file's style: 'Q: ...' / 'A: ...' pairs and optional 'Notes: ...' lines. Backs the file up before writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYesCompany name; matches an existing '## Company' section or creates one.
contentYesMarkdown to add under the company section (e.g. a Q/A pair and notes).

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: creating the file and section as needed, avoiding duplicate headings, enforcing a markdown style, and backing up the file before writing. This is rich and useful for an agent.

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 three sentences, front-loaded with the primary action. Every sentence adds critical information (behavior, style, safety) without redundancy or fluff.

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

Completeness5/5

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

Given the tool's simplicity (2 parameters, no output schema), the description covers all necessary aspects: what it does, file creation behavior, formatting conventions, and backup safety. It is complete for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100% for both parameters, so the baseline is 3. The description adds value by specifying the expected markdown style ('**Q: ...**' / 'A: ...' pairs) and clarifying that content is appended under the company section, going beyond the schema descriptions.

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 ('Append markdown'), the target resource ('the interview-prep file'), and the context ('under a company's section'). It distinguishes itself from sibling tools like read_interview_prep by specifying append behavior and file organization.

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 description provides clear context on when the tool creates the file or section versus appending to existing ones, which effectively guides usage. However, it does not explicitly mention alternatives or exclusion criteria, so it falls short of a 5.

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

delete_columnDelete columnA

Permanently remove a custom column and shift the columns to its right left by one (like Excel's Delete Column). Refuses on the built-in columns and on a missing column. Backs the file up to .bak first.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHeader text of the column to delete.

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations at all, the description carries the full burden of behavioral disclosure. It explicitly states the operation is permanent, describes the column-shifting side effect, lists refusal conditions (built-in and missing columns), and mentions the backup to .bak. This is exemplary transparency for a destructive operation.

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 three sentences, each providing distinct value: purpose and behavior, failure conditions, and safety backup. No unnecessary words or repetition, and it is front-loaded with the core action.

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

Completeness5/5

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

For a simple single-parameter tool with no output schema, the description comprehensively covers what the tool does, how it affects the data, when it refuses, and what safety measure is taken. It is complete without being verbose.

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 input schema has 100% coverage for the single 'name' parameter, which is already described as 'Header text of the column to delete.' The description adds no additional parameter-level meaning beyond 'custom column' in the purpose, so the baseline of 3 is appropriate.

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 'permanently remove a custom column' and describes the specific behavior of shifting columns to the right left by one, using the Excel analogy for immediate understanding. This distinguishes it from sibling tools like add_column or modify_column.

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 through the Excel analogy and notes it refuses on built-in columns, but it does not explicitly state when to use this tool versus alternatives like modify_column or add_column. No direct when-not-to-use guidance beyond built-in columns is provided.

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

delete_documentDelete documentA

Delete a saved document from the Resumes folder. Backs it up (to the rotating .backups folder) first so it can be restored, then removes it. Refuses a missing file or any path outside the Resumes folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFile name in the Resumes folder, e.g. "Old-Resume.pdf".

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It transparently explains that a backup is made first, the file is then removed, and invalid inputs are refused. It does not mention return values on success/failure or backup failure handling, but the key behavioral traits are covered.

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?

Two sentences front-load the primary action and then add critical safety/backup details. Every sentence earns its place with no repetition of schema information.

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 one-parameter deletion tool with no output schema and no annotations, the description adequately covers purpose, safety, and backup. It omits details about return values or error responses, but these are less critical for such a simple 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 schema has 100% coverage for the single parameter, and the schema description already states the filename is in the Resumes folder. The tool description reinforces that paths outside the folder are refused, which adds a little context, but overall it does not significantly go beyond the schema.

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 'Delete a saved document from the Resumes folder' with a specific verb and resource. It distinguishes itself from sibling document tools (list, read, save, print) by focusing on deletion and exclusively referencing the Resumes folder.

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 context is clear: the tool is for deleting saved documents in the Resumes folder, and it adds a safety note about refusing paths outside that folder. However, it does not explicitly mention when to prefer this over other delete tools (e.g., delete_job, delete_column), though the resource type makes it obvious.

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

delete_jobDelete jobA

Permanently remove a job application row, matched by company + position, shifting the rows below it up (like Excel's Delete Row). Refuses to act on a missing or ambiguous match, backs the file up to .bak first, and returns the full deleted row so it can be re-added if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYesCompany name (case-insensitive).
positionYesPosition / title (case-insensitive). Required so the correct row is removed even when a company has several entries.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses important behaviors: permanent action, row shift, refusal on missing/ambiguous matches, automatic backup to .bak, and return of the deleted row for recovery. This is excellent 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, tightly packed sentence that front-loads the main action and then adds each behavioral detail without redundancy. Every clause earns its place.

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

Completeness5/5

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

For a deletion tool with no output schema and no annotations, the description covers all essential context: what is deleted, how matching works, failure behavior, backup, and return value. An agent has enough to use it correctly and handle outcomes.

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 100%, with both parameters already described (case-insensitive, position disambiguates). The description reinforces the combined match but adds no new parameter details beyond what the schema already provides, so baseline 3 applies.

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: permanently remove a job application row, with specific matching criteria (company + position) and a concrete effect (shifting rows below up). It also distinguishes from sibling tools like delete_column or delete_document by explicitly targeting job application rows.

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?

It is obvious when to use this tool (to delete a job application row) and it adds safety context by refusing on missing or ambiguous matches. It doesn't explicitly contrast with alternatives, but no sibling tool offers job deletion, so the usage context is clear.

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

discovery_addAdd discovery leadA

Append a new lead to the discovery sheet. Company and Position are required; set any other columns via fields (e.g. Salary, Job Link, "Match Assessment"). Date Found defaults to today and Status to "Open" if not supplied. Backs the file up first.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOther discovery columns as {"Column Name": "value"}. Each name must be an existing discovery column.
companyYesCompany name (required).
positionYesPosition / title (required).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full disclosure burden. It adds valuable behavioral details: Date Found defaults to today, Status defaults to 'Open', and it 'Backs the file up first'. These go beyond the schema and reveal side effects and defaulting behavior, though it does not mention return values or error handling.

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 two sentences with no fluff. It front-loads the core action and then supplies key details in a compact, scannable manner. Every sentence earns its place.

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 simple append operation with no output schema, the description covers purpose, required vs optional inputs, defaults, and a safety behavior (backup). It does not mention return values, but that is easily inferable for an append tool and is not a critical gap. The description is complete enough for an agent to invoke correctly.

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?

Although schema coverage is 100%, the description adds meaning by providing concrete field examples (Salary, Job Link, 'Match Assessment') and explaining default behavior for Date Found and Status, which are not explicit schema properties. This enriches understanding beyond the structured definitions.

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 states 'Append a new lead to the discovery sheet' with a specific verb and resource, clearly distinguishing it from sibling update/delete/list operations. The title 'Add discovery lead' reinforces this purpose without ambiguity.

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 'Append a new lead' implies usage for adding new entries, but the description does not explicitly state when to use this tool versus alternatives like discovery_update or discovery_delete. There are no exclusions or alternative tool mentions, making the guidance only implied.

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

discovery_deleteDelete discovery leadA

Permanently remove a discovery lead, matched by company + position, shifting rows below it up. Refuses missing/ambiguous matches, backs up first, and returns the deleted row so it can be re-added.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYesCompany (case-insensitive).
positionYesPosition (case-insensitive).

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden. It explicitly states the destructive nature ('Permanently remove'), side effects ('shifting rows below it up'), safety measures ('backs up first'), refusal conditions ('missing/ambiguous matches'), and return value ('returns the deleted row'). This is thorough 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 two sentences, front-loaded with the action and resource, and every clause adds value. There is no redundancy or padding.

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

Completeness5/5

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

For a 2-parameter delete tool with no annotations and no output schema, the description is highly complete. It explains the matching key, side effects, safety behavior, failure conditions, and return value, which is sufficient for an AI agent to use it correctly.

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

Parameters4/5

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

Schema coverage is 100% and both parameters are described, but the description adds meaning by establishing that company and position are used together as a composite match key. It also adds behavior for ambiguous/missing matches, going beyond the schema's simple field descriptions.

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 ('Permanently remove') with a clear resource ('discovery lead') and matching criteria ('company + position'). It clearly distinguishes from sibling tools like discovery_add, discovery_update, and delete_job.

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 description clearly indicates when to use this tool—to permanently delete a discovery lead—and provides context about its behavior (e.g., refuses missing/ambiguous matches, backs up first). It does not explicitly mention alternatives, but the scope is unambiguous.

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

discovery_listList discovery leadsA

List job leads from the discovery sheet (Job_Search_Discovery.xlsx). Optional filters: company (case-insensitive substring), status (case-insensitive exact), and query (substring across every column).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSubstring searched across all columns.
statusNoExact status, e.g. "Open".
companyNoCompany substring to filter by.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It explicitly notes case-insensitive matching for company and status, and that query is a substring across all columns. This adds meaningful behavioral context beyond simply saying 'list'. It does not mention return format or that it is read-only, but the verb 'List' and source file imply a safe read operation.

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?

Two sentences, front-loaded with the action and resource, then filters. Everything is relevant and no redundancy. It strikes an ideal balance between completeness and brevity.

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 simple list tool with three optional filters and no output schema, the description covers the source, filter behavior, and purpose. It omits return shape/pagination, but for a list operation on a spreadsheet this is minor and the description is sufficiently complete for an agent to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that all filters are optional, that company and query are substring matches (case-insensitive), and that status is an exact match. This supplements the schema's per-property descriptions with matching semantics.

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 'List' and the specific resource 'job leads from the discovery sheet (Job_Search_Discovery.xlsx)', which differentiates it from sibling tools like list_jobs that operate on other data. It also names the optional filters, making the tool's scope unambiguous.

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 description clearly indicates the tool is for listing discovery leads from a specific file, implying use when discovery sheet data is needed rather than tracker jobs. It does not explicitly name alternatives or exclusions, but the resource specificity gives clear context for when to use this tool.

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

discovery_updateUpdate discovery leadA

Edit a discovery lead, matched by company + position. Rename via new_company / new_position; set any columns via fields (empty string clears a value). Refuses missing/ambiguous matches; backs up first.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoColumns to set as {"Column Name": "value"}; "" clears.
companyYesCurrent company (case-insensitive).
positionYesCurrent position (case-insensitive).
new_companyNoRename the company.
new_positionNoRename the position.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses important behaviors: refuses missing/ambiguous matches and backs up first. It also explains the empty-string-clears-value behavior. This is solid but does not cover return values or permissions, which would push it higher.

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 two sentences, front-loaded with the primary action, and every phrase adds useful information. No waste or redundancy.

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?

With 5 parameters and no output schema, the description covers all key aspects: matching, renaming, field updates, clearing, refusal behavior, and backup. It is adequate for an update tool, though it does not describe the success response format.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds meaning by explicitly stating that company and position are the matching keys and that new_company/new_position rename. It clarifies the fields mechanism and clearing semantics, adding value beyond the schema.

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 explicitly states the action ('Edit') and resource ('discovery lead'), and clarifies the matching criteria (company + position). It distinguishes from sibling tools like discovery_add and discovery_delete by focusing on updating an existing lead.

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 description clearly indicates this tool edits discovery leads matched by company and position, providing context on when to use it. It does not explicitly mention alternatives like discovery_add or discovery_delete, but the 'Edit' phrasing and resource make the intended use obvious.

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

draft_followup_messageDraft follow-up messageA

Draft a short, professional follow-up email for a given application, referencing how long it has been since applying, the role, and the resume version used. Returns draft text only — it does not send anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYesCompany name (case-insensitive).
positionNoPosition, if the company has more than one row.

TDQS

A4.2/5.0
Behavior4/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 explicitly discloses the key behavior: 'Returns draft text only — it does not send anything', indicating no side effects. It also mentions what the draft references, but omits error conditions or prerequisites.

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?

Two sentences, front-loaded with the main action, and both sentences earn their place. The second sentence adds a crucial behavioral boundary without fluff.

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 simple drafting tool with two parameters and no output schema, the description covers purpose, behavioral scope, and return value ('Returns draft text only'). It does not mention potential errors or prerequisites, but the overall context is sufficiently complete.

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 100%, so baseline is 3. The description adds slight context by mentioning 'role' and 'resume version used', which map to the position parameter and application context, but it doesn't explain parameters beyond the schema.

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 'draft' and resource 'follow-up email for a given application', clearly stating what the tool does. It also distinguishes itself from sending tools by noting 'Returns draft text only — it does not send anything.'

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 description gives clear context: use it to draft a follow-up for an application, referencing time since applying, role, and resume version. It explicitly states it does not send, providing an exclusion, though it doesn't name alternative tools like send_gmail_email or draft_gmail_reply.

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

draft_gmail_replyDraft a Gmail reply (not sent)A

Create a real Gmail draft — visible in the Drafts folder — but does NOT send it; a human still has to open it and hit Send. Either replies within an existing thread (pass thread_id, e.g. from search_gmail_for_job or scan_job_updates) or starts a new message (pass to + subject). Requires Gmail to be authorized (see GMAIL_SETUP.md).

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoOptional Cc address(es).
toNoRecipient email address. Required if thread_id is omitted.
bodyYesThe email body text.
subjectNoSubject line. Required if thread_id is omitted; ignored (the thread's own subject is used) otherwise.
thread_idNoGmail thread ID to reply within (recipient/subject are inferred from the thread's last message). Omit to start a new email.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing that the draft is visible in the Drafts folder, not actually sent, and requires Gmail authorization (referencing GMAIL_SETUP.md). It also explains how thread_id affects recipient/subject inference, adding useful behavioral context. A minor gap is that it doesn't describe what happens after the draft is created (e.g., return value), but this isn't critical.

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?

Three sentences, front-loaded with the most important fact (not sent), and each sentence adds distinct value. No repetition of schema content; it's tightly written and easy to parse.

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 tool with 5 parameters and no output schema, the description is adequately complete: it explains the two invocation modes, parameter relationships, and a prerequisite. The only omission is a explicit description of the return/confirmation behavior, but given the tool's simplicity and schema coverage, this is acceptable.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics: it explains that thread_id can come from search_gmail_for_job or scan_job_updates, clarifies that subject is ignored when thread_id is used, and explicitly states that 'to' is required when thread_id is omitted. Examples and precedence rules go beyond the schema descriptions.

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 specifies a clear action ('Create a real Gmail draft') and a distinct behavioral outcome ('does NOT send it'), distinguishing it from the sibling send_gmail_email. It also names the concrete resource (Drafts folder) and two usage modes (reply vs new message).

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 description provides solid usage context: when to reply within a thread (pass thread_id with examples of source tools) and when to start a new message (pass to + subject). It also notes the authorization prerequisite. However, it doesn't explicitly name send_gmail_email as the alternative when sending is actually intended, though the 'does NOT send' phrasing implies it.

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

generate_resumeGenerate tailored resumeA

Generate a tailored resume PDF (or docx) on the host and save it into the Resumes folder — no base64, works from Claude Desktop. The STABLE facts (employers, titles, dates, education, skills) come from resume_master.json; YOU supply only the per-posting tailoring: a rewritten summary and the key_qualifications bullets aligning the candidate to this specific company + position. The server renders the master + your tailoring into a formatted PDF (python-docx + LibreOffice) matching the existing resumes. Do NOT invent employers, dates, or degrees — those are fixed in the master. Returns the saved path and size, plus a nextStep with a suggested follow-up call (add_job / promote_to_tracker / update_job) — offer it to the user so tailoring, saving, and tracking flow together.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format (default pdf).
skillsNoOptional skills list to override/reorder the master's skills.
companyYesTarget company, e.g. "Acme Corp".
summaryYesThe tailored SUMMARY paragraph, rewritten to foreground the fit for this posting. Factual — draw only on the real background.
filenameNoOutput file name (no folders). Defaults to Dale-Magrath-Resume-{Company}-{Position}.{ext}.
positionYesTarget role, e.g. "Engineering Manager".
overwriteNoIf false (default), refuse to replace an existing file.
include_honorsNoInclude a Honors & Awards section from the master (default false; off keeps a full resume at 2 pages).
include_projectsNoInclude the Projects section (default true).
key_qualificationsYesBullet points for the 'KEY QUALIFICATIONS — {company} {position} ALIGNMENT' section, each tying real experience to this posting.

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states that output is saved to a specific folder, no base64 is used, the rendering uses python-docx + LibreOffice, factual constraints (do not invent employers/dates/degrees), and the return payload (path, size, nextStep). This is exceptionally 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 succinct four-sentence paragraph. The first sentence front-loads the core purpose; subsequent sentences add necessary constraints and workflow details. No filler or redundancy—every sentence earns its place.

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

Completeness5/5

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

For a tool with 10 parameters and no output schema, the description covers purpose, input responsibilities, rendering process, file location, constraints, return values, and a suggested follow-up. It is fully complete for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% with meaningful descriptions for each parameter. The description adds extra context for key parameters (summary and key_qualifications) by explicitly labeling them as the per-posting tailoring. This enriches the schema without redundancy.

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 states a specific verb+resource: 'Generate a tailored resume PDF (or docx) on the host and save it into the Resumes folder.' This clearly distinguishes it from all sibling tools (job tracking, document management, etc.) which serve different purposes.

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 description explains that stable facts come from resume_master.json and that the user supplies only per-posting tailoring (summary, key_qualifications). It also suggests offering the nextStep to keep tailoring, saving, and tracking together. However, it does not explicitly contrast with sibling tools or state when not to use it.

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

get_due_followupsGet due follow-upsA

List applications whose Next Follow-Up date is due — on or before today (or within the next days days). Skips clearly-closed rows (Declined / Withdrawn / Closed). Sorted most-overdue first; daysUntil is negative when overdue.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-ahead window in days (default 0 = only due today or overdue).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that closed rows (Declined/Withdrawn/Closed) are skipped, that results are sorted by most-overdue first, and that the daysUntil field is negative when overdue. These are meaningful behavioral details not available elsewhere.

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 three sentences with no filler. It front-loads the core purpose, then provides filtering, sorting, and field semantics 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 simple 1-parameter tool with no output schema, the description sufficiently covers purpose, filtering, sorting, and a key output field (daysUntil). It could enumerate all return fields, but the essential behavior is clear.

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 100% for the single 'days' parameter; the schema already explains it as a look-ahead window with default 0. The description only restates this concept ('within the next `days` days') without adding new semantic detail about 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 a specific verb 'List' with a clear resource 'applications whose Next Follow-Up date is due' and defines the date condition. It distinguishes itself from siblings like list_jobs and get_stale_jobs by focusing on follow-up due dates.

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?

It clearly states when to use: to list applications due for follow-up on or before today or within a given days window, and that closed rows are skipped. However, it does not explicitly mention alternatives or when not to use this tool.

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

get_jobGet jobA

Return full details for a single application, matched by company (and position, if the company has more than one row).

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYesCompany name (case-insensitive).
positionNoPosition/title, needed only if the company has multiple rows.

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 the burden of behavioral disclosure. It explains the matching rule (position needed if company has multiple rows), which is a useful behavioral nuance. However, it does not disclose what happens when no match is found or when the company has multiple rows and position is omitted, leaving some ambiguity.

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 that states the verb, resource, and matching criteria without any fluff. Every word contributes to understanding what the tool does.

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 simple getter with two parameters and no output schema, the description covers the essential matching logic and the condition on position. It does not specify the return format or error behavior, but given the low complexity and the schema descriptions, the description is sufficiently complete for most use cases.

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 100% (both parameters have descriptions in the schema), so the baseline is 3. The description reiterates the relationship between company and position (position needed if multiple rows), which adds slight context beyond the schema but does not provide significant new semantics.

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 specific verb 'Return' and identifies the resource ('full details for a single application') plus the matching key (company, optionally position). This clearly distinguishes it from sibling tools like list_jobs (lists many) and search_jobs (searches broadly).

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 description clearly implies when to use this tool: when you need full details for one specific application identified by company. It does not explicitly name alternatives or exclusion criteria, but the context is clear and the sibling tool names reinforce the distinction. No exclusions are necessary.

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

get_resume_master_fieldGet resume master fieldA

Read one field from resume_master.json (the stable resume facts) by dot/bracket path, e.g. "skills", "projects[0].description", "experience[2].title". Scoped to that one file. Use list_resume_master_structure first if you're unsure of the path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesDot/bracket path, e.g. "experience[0].dates".

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It states the operation is a read, scopes access to one file, and describes the nature of the data ('stable resume facts'). It does not explain error behavior or return characteristics for invalid paths, but for a simple read tool the provided context is adequate.

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 two sentences, front-loads the verb and resource, and every element adds value. It is concise without being under-specified, including examples and a usage hint without unnecessary filler.

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

Completeness5/5

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

This is a simple single-parameter read tool. The description includes the file name, path format with examples, scope limitation, and guidance for an alternative tool, making it sufficiently complete without an output schema or complex annotations.

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 schema covers the path parameter with one example. The description adds multiple examples ('skills', 'projects[0].description') and clarifies the dot/bracket path syntax, providing additional meaning beyond the schema description.

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 reads one field from resume_master.json using a dot/bracket path. It uses a specific verb ('Read') and resource ('resume_master.json'), and the examples distinguish it from sibling tools like update_resume_master_field and list_resume_master_structure.

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 description explicitly advises using list_resume_master_structure first if unsure of the path, providing an alternative for a specific scenario. It also notes the tool is scoped to one file, but it does not explicitly contrast with the update sibling or clarify when a list/read of the entire file would be more appropriate.

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

get_stale_jobsGet stale jobsA

List applications still "Awaiting Response" or "Applied" whose Date Applied is more than N days ago (default 14), computed against today.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoThreshold in days (default 14). Returns jobs older than this.

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 the burden of behavioral disclosure. It does specify the filtering logic (statuses and date threshold) and states the default of 14 days computed against today. However, it does not explicitly state that this is a read-only operation or describe side effects, permissions, or return format. The 'List' verb implies safety, but the absence of annotations makes this a moderate, not strong, 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, compact sentence that front-loads the core functionality and includes essential details (statuses, threshold, default, baseline date). 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?

Given the simple single-parameter schema and lack of output schema, the description adequately explains what the tool does and the input behavior. It does not detail return shape or ordering, but these are not critical for this simple list operation. It is complete enough for an agent to understand the tool's role.

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, 'days', has a clear schema description covering its meaning and default. The tool description adds no new parameter semantics beyond what the schema already provides, so the baseline of 3 applies.

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 lists applications filtered by specific statuses ('Awaiting Response' or 'Applied') and by a date threshold. This is a specific verb+resource+scope description that distinguishes it from sibling tools like list_jobs or get_job.

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 description provides clear context on when to use the tool: when needing to surface applications stuck in certain statuses older than a configurable number of days. It does not explicitly name alternatives or exclusions, but the criteria are well-defined enough for an agent to select it appropriately.

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

list_documentsList documentsA

List the saved resumes / cover letters in the Resumes folder (name, size, and modified date). Optional filter is a case-insensitive substring on the file name. Newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring to filter file names by.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description must convey behavioral traits. It does so by specifying the sort order ('Newest first'), the filtering behavior ('case-insensitive substring'), and the output fields. It clearly indicates a read-only listing operation. Minor gaps remain about folder scope or error handling, but it is well above the baseline.

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 two sentences, front-loads the core action and resource, and every phrase adds value: the folder location, the output fields, the filter behavior, and the sort order. No unnecessary 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?

For a simple list tool with one optional parameter and no output schema, the description is quite complete: it states the returned fields and ordering. It does not mention potential edge cases (e.g., empty folder, subfolder recursion), but these are not critical for core usage. The low complexity means this level of detail is sufficient.

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 schema already fully documents the single parameter 'filter' with a matching description. The tool description repeats the case-insensitive substring semantics but adds no additional meaning beyond the schema, so the baseline score of 3 applies.

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 ('List'), the resource (saved resumes/cover letters in the Resumes folder), and the returned attributes (name, size, modified date). This distinctly differentiates it from sibling document tools like read_document, save_document, or delete_document.

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: use this tool to see available resumes/cover letters with an optional substring filter. However, it does not explicitly state when to prefer this over alternatives like read_document or save_document, nor does it mention any exclusions.

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

list_jobsList jobsA

List all tracked job applications, with optional filters. Filter by status (case-insensitive exact match), company (case-insensitive substring), and/or a Date Applied range (inclusive, YYYY-MM-DD).

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoExact status to filter by, e.g. one of: Applied, Awaiting Response, Informal - Referral Sent, Interviewing, Offer, Declined, Withdrawn, Closed - No Longer Available
companyNoCompany name substring to filter by.
applied_toNoOnly include jobs applied on/before this date (YYYY-MM-DD).
applied_fromNoOnly include jobs applied on/after this date (YYYY-MM-DD).

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 full burden of behavioral disclosure. It discloses specific matching semantics: case-insensitive exact match for status, case-insensitive substring for company, and inclusive date range. This is valuable behavioral detail beyond a simple 'list'. It does not mention return format, ordering, or pagination, but the read-only nature of 'list' is clear.

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 two sentences with the main purpose front-loaded, and the filter details follow logically. Every clause adds value, and there is no redundant or vague language. It is concise and well-structured.

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 simplicity (4 optional parameters, no required params, no output schema), the description covers the essential behaviors and filter semantics thoroughly. It does not mention ordering or pagination, but these are often implied for a list operation. The lack of explicit return-format information is a minor gap, but overall it is close to complete for this 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?

Schema coverage is 100%, so the baseline is 3. The description adds extra semantics beyond the schema: it explains that status is case-insensitive exact match, company is case-insensitive substring, and the date range is inclusive. This clarifies how the parameters behave, raising the score to 4.

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 'list' and the resource 'tracked job applications', with optional filters. It explicitly distinguishes this from getting a single job (get_job) and from search_jobs, which likely has different search behavior. The scope 'all tracked job applications' is precise and unambiguous.

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 description clearly implies when to use this tool: when you need to list job applications with optional filters. It provides a strong context of use but does not explicitly mention alternatives or when not to use it. However, the purpose is clear enough that an agent can infer appropriate usage without explicit exclusions.

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

list_resume_master_structureList resume master structureA

Show the SHAPE of resume_master.json (keys, array lengths, scalar types — not the full field values) to help pick a path for get_resume_master_field / update_resume_master_field. Optional path scopes the listing to a sub-section.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional sub-path to scope the listing, e.g. "experience".

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains that the tool returns only structural metadata (keys, array lengths, scalar types) and not full field values, and that 'path' scopes the listing. This sets accurate expectations about output scope, though it doesn't explicitly mention that the operation is read-only or describe error cases.

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 exactly two sentences, front-loaded with the primary purpose and followed by the parameter note. Every word earns its place; there is no redundancy or filler.

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 simple introspection tool with one optional parameter and no output schema, the description adequately covers purpose, parameter behavior, and relationships to sibling tools. It doesn't specify the exact output format, but that is not critical given the tool's nature and the explicit 'shape' framing.

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 100% for the single optional 'path' parameter, so the description doesn't need to add much. The description repeats the schema's meaning ('scopes the listing to a sub-section') without adding new syntax or format details. This matches the baseline of 3 when the schema handles parameter documentation.

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 shows the structural shape of resume_master.json (keys, array lengths, scalar types) and explicitly distinguishes it from sibling field-access tools by explaining its role in path selection. The verb 'Show' is specific and the resource is named unmistakably.

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

Usage Guidelines5/5

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

The description explicitly says the tool exists 'to help pick a path for get_resume_master_field / update_resume_master_field', giving direct context for when to use it. It also notes the optional 'path' scoping, which further clarifies usage. While it doesn't list exclusions, the guidance is clear and actionable.

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

modify_columnModify columnA

Modify a custom column: rename it (new_name) and/or set the same value into every existing job row (fill_value; pass an empty string to clear the column). At least one of new_name / fill_value is required. Refuses on the built-in columns and on a missing column. Backs the file up first.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCurrent header text of the column to modify.
new_nameNoNew header text (renames the column).
fill_valueNoIf given, written into this column for every existing job row (empty string clears the column).

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that fill_value writes to every existing row, empty string clears, built-in/missing columns are refused, and a file backup is made first. This is strong behavioral detail for a mutating tool, though it does not mention return values or error formats.

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 compact, front-loaded, and consists of four short sentences, each providing essential operational, constraint, or safety information. There is no filler or redundant repetition of the title.

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 three-parameter mutation tool with no annotations or output schema, the description covers the action, parameter effects, preconditions, refusal cases, and backup behavior. It is sufficiently complete for an agent to select and invoke the tool correctly, even though it does not describe the success response shape.

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 already describes all three parameters (100% coverage), so the baseline is 3. The description adds value by specifying the cross-parameter constraint that at least one of new_name or fill_value must be provided, which is not expressed in the schema. Most other parameter meaning is already present in the schema.

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 opens with a specific verb and resource ('Modify a custom column') and clearly breaks the action into rename and fill operations. It also distinguishes itself from sibling tools like add_column and delete_column by specifying it operates on existing custom columns.

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 description gives explicit preconditions: at least one of new_name or fill_value is required, and it refuses on built-in/missing columns. This provides clear context for when the tool should or should not be used, though it does not explicitly name sibling alternatives.

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

promote_to_trackerPromote lead to trackerA

Turn a discovery lead into a tracked application: copies Company, Position, Job Link, and Location into the tracker with Status "Applied" and Date Applied = today (both overridable). Salary and Match Assessment are carried into Notes unless you supply your own. Optionally removes the lead from the discovery sheet. Backs up both files it writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoTracker notes. Defaults to a summary of salary + match.
statusNoTracker status. Defaults to "Applied".
companyYesDiscovery lead company (case-insensitive).
positionYesDiscovery lead position (case-insensitive).
date_appliedNoDate applied (YYYY-MM-DD). Defaults to today.
resume_versionNoResume version used for the application.
remove_from_discoveryNoIf true, delete the lead from the discovery sheet after promoting. Defaults to false (the lead is left in place).

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals key side effects: copying fields, overridable defaults, notes derived from salary/match unless overridden, optional deletion of the lead, and backup of both files. It does not mention error handling or return format, but the major behaviors are 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 concise and well-structured: four short sentences, each adding a distinct piece of information (core purpose, notes default, optional deletion, backup). No filler or redundancy, and the most important action is front-loaded.

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 cross-sheet promotion tool with 7 parameters and no output schema, the description explains the main workflow, defaults, optional behavior, and backup. It omits return value and error handling, but the schema covers parameter details, making the description reasonably complete for the agent to invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are already documented. The description adds value by clarifying default behaviors for status, date_applied, notes, and remove_from_discovery, and explains how notes derive from salary/match if not supplied. This supplements the schema with practical semantics.

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 purpose: 'Turn a discovery lead into a tracked application' and enumerates specific actions (copies Company, Position, Job Link, Location; sets Status and Date Applied). This distinguishes it from sibling tools like add_job or discovery_add, which operate on single sheets.

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 description conveys a clear use case (promoting a discovery lead to a tracker) and mentions optional removal from the discovery sheet, which implies workflow context. However, it does not explicitly say when to use this tool instead of alternatives like add_job or discovery_update, so it lacks explicit exclusions.

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

read_documentRead documentA

Extract and return the plain text of a saved resume / cover letter (.pdf or .docx) from the Resumes folder, so it can be read and analyzed in conversation (e.g. "read my Acme Corp resume and check it against this posting"). Read-only. Give a file name in the Resumes folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFile name in the Resumes folder, e.g. "Dale-Magrath-Resume-Acme-Corp.pdf".

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It explicitly states 'Read-only' and specifies the file formats (.pdf/.docx) and location (Resumes folder). It does not detail error handling or return format, but for a simple read tool this is adequate and non-misleading.

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 two sentences, front-loaded with the main action and purpose, followed by an example and a clear instruction. Every sentence contributes value without redundancy or fluff.

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 tool is simple (1 parameter, no output schema, no nested objects). The description includes purpose, scope, file types, location, and behavioral safety ('Read-only'). It is complete enough for an agent to select and invoke correctly, though it omits potential error cases, which are not critical for a read operation.

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 already covers the filename parameter fully (100% coverage) with an example. The description adds extra meaning by emphasizing 'Give a file name in the Resumes folder,' reinforcing the location constraint and the expected input format.

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 specifies a unique verb and resource: "Extract and return the plain text of a saved resume / cover letter (.pdf or .docx) from the Resumes folder." This distinguishes it from siblings like read_text_file (generic) and list_documents, and includes an example use case.

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 description states when to use it (to read and analyze a resume/cover letter in conversation) and gives a concrete example. It does not explicitly exclude alternatives, but the context is clear and the instruction 'Give a file name in the Resumes folder' provides direct usage guidance.

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

read_gmail_messageRead a Gmail message's full bodyA

Read the full body of ONE specific Gmail message — search_gmail_for_job and scan_job_updates only return a short snippet, so use this when you need the actual content (e.g. an interview link or instructions). Pass message_id (the id from a search/scan result), or thread_id to read the most recent message in that thread. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idNoGmail thread id — reads the most recent message in the thread. Ignored if message_id is given.
message_idNoGmail message id, e.g. the `id` from a search_gmail_for_job result.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the disclosure burden. It discloses read-only nature ('Read-only'), explains behavior with thread_id ('reads the most recent message in that thread'), and clarifies the precedence when both parameters are given. While it doesn't discuss authentication or side effects, the read-only declaration and behavioral details are valuable for this simple 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?

Two sentences, front-loaded with the primary purpose, then providing usage context and parameter guidance. Every sentence provides functional value; no filler or redundant information.

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

Completeness5/5

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

This is a simple 2-parameter read tool with no output schema. The description covers what it does, when to use it, how parameters interact, and its read-only nature. For the given complexity, it is complete and leaves no obvious gaps for an agent to correctly select and invoke the 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?

Schema coverage is 100%, so the parameters are already documented. The description adds meaningful relationship semantics: it explains that message_id comes from a search/scan result, that thread_id reads the most recent message, and that thread_id is ignored if message_id is given. This goes beyond the schema's standalone descriptions.

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 opens with a specific verb+resource: 'Read the full body of ONE specific Gmail message.' It clearly distinguishes from sibling tools by stating that search_gmail_for_job and scan_job_updates only return snippets, while this tool provides the full content.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'use this when you need the actual content (e.g. an interview link or instructions).' It also names the alternatives (search_gmail_for_job, scan_job_updates) and explains their limitation, providing clear context for selecting this tool. Additionally, it provides parameter usage guidance (message_id vs thread_id).

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

read_interview_prepRead interview prepA

Read the interview-prep Q&A markdown file (Interview_Prep_QA.md) and return it as text. Pass an optional company to return just that company's section. Returns a friendly message (not an error) if the file doesn't exist yet or the company has no section.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyNoReturn only this company's section (case-insensitive).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses key behaviors: returns text, handles missing file or missing company section with a friendly message rather than an error. This is adequate for a simple read operation.

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?

Two sentences, front-loaded with the primary action, and every phrase adds value (file name, return format, optional filter, error handling). No wasted words.

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

Completeness5/5

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

For a tool with one optional parameter and no output schema, the description is complete. It covers the file source, behavior with and without the filter, and error/friendly-message handling. No additional context is needed.

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 100% with a clear property description. The main description repeats the optional company filter but adds no new meaning beyond the schema. Baseline 3 is appropriate.

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 reads a specific file (Interview_Prep_QA.md) and returns it as text, with an optional company filter. This specific verb+resource+scope distinguishes it from generic read_document or read_text_file siblings.

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?

Provides clear context for when to use: to retrieve interview prep content, optionally filtered by company. No explicit exclusions or alternatives are named, but the specificity of the file and behavior makes the usage clear.

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

read_text_fileRead text fileA

Read any plain-text file (.md, .txt, .json, .csv, …) inside the Job Tracking folder tree — handoff notes, scratch files, etc. Give a filename or relative path (e.g. "HANDOFF_2026-08-02.md" or "notes/plan.txt"), resolved under the Job Tracking root. Read-only, and strictly scoped to that tree — paths that escape it are refused. For PDFs/docx in the Resumes folder use read_document instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFilename or relative path under the Job Tracking root, e.g. "notes/plan.txt".

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses read-only behavior, strict scoping to the Job Tracking tree, and refusal of escaping paths. This is strong transparency, though it doesn't mention error handling or encoding, which are minor for a read 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 three sentences, front-loaded with the primary purpose, and each sentence adds value: scope, usage examples, and a pointer to an alternative. No redundancy.

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 simple single-parameter read tool, the description covers purpose, scope, safety, and alternatives. It lacks mention of return format or error behavior, but the operation is self-explanatory. The absence of an output schema raises the bar slightly, yet the description remains adequate.

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 100%, so the baseline is 3. The description repeats the schema's parameter meaning but adds example values and explicit resolution under the Job Tracking root. This is useful but not a significant addition over structured schema.

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 reads plain-text files within the Job Tracking folder tree, listing specific file extensions and example files. It explicitly distinguishes itself from read_document for PDFs/docx, making the purpose unambiguous.

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

Usage Guidelines5/5

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

It provides concrete guidance on when to use this tool (for text files in Job Tracking) and explicitly names an alternative (read_document for PDFs/docx in Resumes). It also clarifies input format (filename or relative path) and scoping constraints.

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

save_documentSave documentA

Save a generated document (docx or PDF) into the Resumes folder (created if missing). PREFERRED: pass source_path — the full path to a file already written to disk (e.g. one the docx/pdf skill just generated). The server copies it; this is instant and cannot corrupt the file. FALLBACK: content_base64, for SMALL files only (~15 KB decoded max). Base64 must be generated token-by-token, so a typical 50 KB resume takes minutes and may exceed the response limit outright — use source_path for anything binary or non-trivial. Give exactly one of the two. Refuses to overwrite an existing file unless overwrite=true, in which case the old file is backed up first. Returns the saved path and size.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFile name only (no folders), e.g. "Dale-Magrath-Resume-Acme-Corp.docx".
overwriteNoIf false (default), refuse to replace an existing file.
source_pathNoPREFERRED. Absolute path to an existing file to copy into the Resumes folder. Use this for any real document.
content_base64NoFallback for small files only (~15 KB decoded). Base64-encoded file bytes; a data: URL prefix is tolerated. Prefer source_path.

TDQS

A5/5.0
Behavior5/5

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

No annotations exist, but the description compensates fully. It discloses folder creation, copy behavior (instant, cannot corrupt), base64 inefficiency, overwrite refusal with backup, and the return value (path and size). This is comprehensive 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 concise yet well-structured: purpose in the first sentence, then PREFERRED/FALLBACK formatting, then overwrite behavior and return value. Every sentence contributes no waste.

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

Completeness5/5

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

For a file-saving tool with 4 well-documented params and no output schema, the description fully covers behavior, parameter selection, safety considerations, and expected return. No critical information is missing.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds critical depth: why source_path is preferred (instant, no corruption), why content_base64 is limited (token-by-token generation, response limit), and the mutual exclusivity of the two parameters. This goes beyond the schema's descriptions.

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 'Save a generated document (docx or PDF) into the Resumes folder' with a specific verb, resource, and destination. This distinguishes it from sibling tools like list_documents, delete_document, and read_document.

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

Usage Guidelines5/5

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

Explicitly provides PREFERRED (source_path) and FALLBACK (content_base64) usage paths, including size limits and performance tradeoffs. It also instructs 'Give exactly one of the two', giving clear guidance on parameter selection.

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

scan_job_updatesScan Gmail for tracker updatesA

Cross-reference open applications in the tracker against Gmail: for each open job (or one company, if given), searches Gmail for recent related mail and flags simple keyword-based signals (interview, offer, rejection language). Read-only — it only SUGGESTS a status change via suggestedCall; it never updates the tracker itself. Review the emails and call update_job_status yourself if the suggestion looks right.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyNoLimit the scan to one company (case-insensitive substring).
days_backNoOnly search mail from the last N days (default 30).
max_per_companyNoMax messages to fetch per company (default 3).

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries full burden and it excels: it explicitly says 'Read-only', states it 'never updates the tracker itself', and explains that it only produces a `suggestedCall`. This fully discloses the non-mutating, advisory nature of the 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 two sentences long, front-loaded with the main action, and every clause adds value. It efficiently communicates scope, method, side effects, and follow-up action without redundancy.

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 tool has no output schema and the description gives a hint about return values via `suggestedCall`, which implies a suggestion object. It covers the core workflow and side effects well, though a detailed explanation of the return structure could improve completeness.

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?

All three parameters already have descriptions in the schema (100% coverage), so the description adds little new param-level meaning. It only re-emphasizes the 'one company' option, while days_back and max_per_company are not mentioned beyond schema coverage.

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: cross-referencing open applications against Gmail and flagging keyword-based signals. It uses specific verbs like 'cross-reference' and 'searches', and distinguishes itself from siblings by emphasizing it only suggests status changes rather than updating the tracker.

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 description provides clear context for when to use the tool: for each open job or optionally one company, scanning recent email for signals. It also gives post-usage guidance (review emails and call update_job_status if the suggestion looks right), though it doesn't explicitly compare to sibling tools like search_gmail_for_job.

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

search_gmail_for_jobSearch Gmail for job-related emailA

Read-only search of the authorized Gmail account for messages related to a company (and optionally position/keywords) — recruiter replies, interview invites, rejections, etc. Does not modify anything. Requires Gmail to be authorized first (see GMAIL_SETUP.md / npm run gmail:auth).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoAdvanced override for the raw Gmail search query (Gmail search syntax, e.g. 'from:recruiter@acme.com newer_than:30d'). If given, replaces the default company/position query entirely.
companyYesCompany name to search for.
positionNoPosition/title to narrow the search further.
max_resultsNoMax messages to return (default 10, max 50).

TDQS

A4.1/5.0
Behavior4/5

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

No annotations provided, but the description discloses key behavioral traits: it is read-only ('Does not modify anything') and requires prior Gmail authorization. This is significant for safety. It does not detail pagination/rate limits, but given the scope, this is adequate.

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?

Two sentences, front-loaded with the verb and resource, no redundant information. Every clause adds value (scope, examples, safety, prerequisite).

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 4-parameter search tool with no output schema, the description covers purpose, safety, and prerequisites but omits what the function returns (e.g., list of message metadata). The examples hint at matches, but not the return structure.

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 100%, so the schema fully describes parameters like company, position, query, max_results. The description adds no extra parameter details beyond what is in the schema, so baseline 3 applies.

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 it is a 'Read-only search of the authorized Gmail account for messages related to a company (and optionally position/keywords)' and lists example content (recruiter replies, interview invites, rejections). It distinguishes itself from siblings like read_gmail_message (which reads a specific message) and send_gmail_email (which writes) by explicitly noting read-only/no modification.

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?

Provides clear context for when to use: searching for job-related emails in Gmail. States prerequisite 'Requires Gmail to be authorized first'. Does not explicitly name alternatives or exclusions, but clearly implies this is the search tool versus other Gmail action tools.

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

search_jobsSearch jobsA

Case-insensitive substring search across the Company, Position, and Notes columns.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesKeyword or phrase to search for.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosure. It goes beyond a vague 'search' by specifying case-insensitivity, substring matching, and the exact columns considered, which is meaningful behavioral context. It omits return format or pagination, but core matching behavior is 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, front-loaded sentence with no filler. It precisely conveys the tool's behavior in minimal 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?

For a simple one-parameter search tool with no output schema, the description is adequately complete. It covers the search scope and matching behavior, though it could optionally mention what the return payload looks like. Overall, the tool is simple enough that this description suffices.

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 schema fully describes the single parameter with 100% coverage, so the baseline is 3. The description adds semantic value by explaining how the query is used (case-insensitive substring across Company, Position, Notes), which helps the agent understand the query's effect beyond the schema's generic 'Keyword or phrase to search for.'

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 performs a case-insensitive substring search across specific columns (Company, Position, Notes). This is a specific verb+resource+scope that distinguishes it from sibling tools like list_jobs or get_job.

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 description implies the use case: when you need to find jobs by a keyword across three textual fields. It does not explicitly mention alternatives or exclusions, but the context is clear enough for an agent to decide when to invoke this tool.

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

send_gmail_emailSend an email via GmailA

SENDS a real email immediately through the authorized Gmail account. This cannot be undone — there is no draft step. Only call this after showing the user the exact to/subject/body and getting explicit confirmation; the call must include confirm: true or it is refused. Either sends a reply within an existing thread (thread_id) or a new email (to + subject). Requires Gmail to be authorized (see GMAIL_SETUP.md).

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoOptional Cc address(es).
toNoRecipient email address. Required if thread_id is omitted.
bodyYesThe email body text.
confirmYesMust be true. Set this only after the user has explicitly approved sending this exact email.
subjectNoSubject line. Required if thread_id is omitted; ignored (the thread's own subject is used) otherwise.
thread_idNoGmail thread ID to reply within (recipient/subject are inferred from the thread's last message). Omit to send a new email.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers richly: it discloses irreversibility ('cannot be undone'), the absence of a draft step, the confirmation prerequisite, the refusal when confirm is missing, and the Gmail authorization requirement. This is exemplary 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 only three packed sentences, front-loaded with the irreversible action and immediately followed by the critical safety rule. Every clause earns its place, covering confirmation, moded behavior, and authorization without fluff.

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

Completeness5/5

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

Given six parameters, no annotations, and no output schema, the description fully specifies preconditions, the confirmation gate, both usage modes, parameter dependencies, and auth requirements. It leaves no ambiguity about how or when to invoke the tool.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds crucial semantics beyond the schema: confirm must be true or the call is refused, to/subject are only required when thread_id is omitted, and subject is ignored in thread replies. These conditional interrelations are not evident from the property descriptions alone.

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 ('SENDS a real email immediately') and identifies the resource ('authorized Gmail account'), making the tool's purpose unmistakable. It also differentiates from sibling tools like draft_gmail_reply by emphasizing there is no draft step and no undo.

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

Usage Guidelines5/5

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

It gives an explicit when-to-use gate: 'Only call this after showing the user the exact to/subject/body and getting explicit confirmation' and states the hard requirement 'must include confirm: true or it is refused.' It also explains the two distinct modes (thread_id vs to + subject), giving clear situational guidance.

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

update_jobUpdate job (any field)A

Edit any field(s) of an existing application, matched by company + position. Only the fields you supply are changed; pass an empty string to clear a field. Rename with new_company / new_position. Set custom columns via extra_fields. Refuses missing or ambiguous matches, validates dates, and backs the file up before writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
statusNoStatus, e.g. one of: Applied, Awaiting Response, Informal - Referral Sent, Interviewing, Offer, Declined, Withdrawn, Closed - No Longer Available
companyYesCurrent company name (case-insensitive).
job_linkNoJob posting URL.
locationNo
positionYesCurrent position / title (case-insensitive).
new_companyNoRename the company.
date_appliedNoDate applied (YYYY-MM-DD, or empty string to clear).
extra_fieldsNoCustom columns to set, as {"Column Name": "value"}. Empty string clears a column. Each name must be an existing custom column.
new_positionNoRename the position / title.
next_follow_upNoNext follow-up date (YYYY-MM-DD, or empty string to clear).
resume_versionNo
contact_referralNo

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It richly covers partial updates ('Only the fields you supply are changed'), clearing fields ('pass an empty string to clear a field'), renaming via 'new_company / new_position', custom columns via 'extra_fields', refusal on 'missing or ambiguous matches', date validation, and file backup. This goes well beyond basic what-it-does and gives the agent a strong sense of side effects and guardrails.

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 three concise sentences with no filler. The first sentence front-loads the core purpose, followed by efficient details on partial updates, clearing, renaming, and extra_fields, then a final sentence covers failure modes and side effects. Every phrase earns its place, making it easily scannable and informative.

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 complexity of 13 parameters and no annotations or output schema, the description covers essential behavior: matching criteria, partial update semantics, clearing, renaming, custom fields, refusal conditions, validation, and backup. It does not mention return values or confirmation behavior, but since there is no output schema, this is not a strict requirement. It also does not reference sibling tools like 'update_job_status', which would have improved completeness, but the description is still substantive enough for an agent to use the tool safely and effectively.

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 schema covers 69% of parameters, so the baseline is 3. The description adds meaningful semantics beyond the schema: it clarifies the partial-update behavior, the empty-string clearing mechanism, the purpose of 'new_company'/'new_position' for renaming, and that 'extra_fields' sets custom columns. These details help an agent understand how parameters interact, which is not evident from the schema alone. The description does not compensate for the remaining 31% of undocumented parameters, but it adds enough value to warrant a 4.

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 the specific verb 'Edit' and clearly states the resource: 'existing application, matched by company + position'. It conveys the tool's broad scope ('any field(s)'), which is consistent with its title. However, it does not explicitly differentiate from the sibling tool 'update_job_status', which is a more specialized alternative for status-only updates.

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 when to use the tool ('existing application', matched by company + position) and provides operational details like 'Only the fields you supply are changed' and 'pass an empty string to clear a field'. However, it does not explicitly say when to use this tool instead of alternatives such as 'update_job_status' or 'add_job', nor does it list exclusion criteria. The intended use is inferred rather than explicitly contrasted with sibling tools.

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

update_job_statusUpdate job statusA

Update the Status (and optionally the Notes) of an existing application, matched by company + position. Validates the row exists and backs the file up before writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional new Notes value (replaces existing Notes).
statusYesNew status, e.g. one of: Applied, Awaiting Response, Informal - Referral Sent, Interviewing, Offer, Declined, Withdrawn, Closed - No Longer Available
companyYesCompany name (case-insensitive).
positionYesPosition / title (case-insensitive).

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses important behaviors: 'Validates the row exists and backs the file up before writing.' This goes beyond a bare 'update' and reassures the user about safety, though it doesn't detail error handling or return values.

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?

Two concise sentences, no redundancy. The first sentence front-loads the purpose, and the second adds key safety details. Every word earns its place.

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 simple 4-parameter update tool with no annotations or output schema, the description covers the essentials: what is updated, matching criteria, validation, and backup. Missing return-value/error behavior is a minor gap, but the description is sufficient for typical usage.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds semantic value by grouping parameters into roles: 'status (and optionally the notes)' and 'matched by company + position.' This clarifies how parameters relate, which is extra beyond the schema's per-field descriptions.

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 action: 'Update the Status (and optionally the Notes) of an existing application.' It specifies the matching criteria (company + position), which distinguishes it from generic update_job or other mutations. This is a precise verb+resource+scope statement.

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 description provides clear context for when to use the tool: it updates an existing application identified by company and position. However, it does not explicitly mention alternatives or exclusion criteria (e.g., 'use update_job for other fields'), so it stops short of full guidance.

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

update_resume_master_fieldUpdate resume master fieldA

Update one existing field in resume_master.json by dot/bracket path (e.g. a corrected date, an added skill, a new project). Only edits fields that ALREADY exist — it will not create new keys (that's a deliberate schema change to make by hand). Backs the file up first and reports old → new. Scoped to resume_master.json only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesExisting path to update, e.g. "skills" or "projects[0].description".
valueYesNew value — string, number, boolean, array, or object.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond a simple mutation statement by revealing that it only edits existing fields, backs up the file first, and reports old → new values. It also scopes the operation to the single file, which is valuable context. This level of detail surpasses typical tool descriptions.

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 compact (three sentences) and front-loaded with the core purpose in the first sentence. Each subsequent sentence adds meaningful detail: the existing-field constraint, backup and reporting behavior, and file scope. There is no fluff or redundancy, making it highly efficient.

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

Completeness5/5

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

For a straightforward two-parameter update operation, the description covers the essential aspects: what it does, its constraints, the backup mechanism, and the reporting of old/new values. Since no output schema is provided, describing the 'reports old → new' behavior is a good substitute for return format. The description is sufficiently complete for an agent to use this tool correctly.

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 input schema already provides 100% coverage for both parameters, including concrete examples for 'path' and a type list for 'value'. The description adds some context with 'dot/bracket path' and use-case examples, but these are largely re-statements of schema information. The baseline of 3 is appropriate when the schema handles most of the explanatory load.

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 'Update', the specific resource 'resume_master.json', and the scope 'one existing field' with dot/bracket path. It distinguishes itself from sibling tools like 'get_resume_master_field' and 'list_resume_master_structure' by focusing on mutation of existing fields. Examples (corrected date, added skill, new project) further clarify the intended use.

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 description explicitly notes that it 'will not create new keys', providing a clear constraint on when not to use it and directing schema additions to manual hand-editing. It also scopes usage to 'resume_master.json only', which prevents accidental use on other files. However, it does not explicitly name alternative sibling tools for different scenarios (e.g., add vs. update), leaving some inference to the user.

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

TDQS

A3.8/5.0
Disambiguation3/5

Most tools target distinct resources and actions, but update_job_status overlaps with update_job (which can also set status), and scan_job_updates vs search_gmail_for_job both provide Gmail search functionality. The descriptions help, but a few tools could cause misselection.

Naming Consistency3/5

The dominant pattern is underscore-separated verb_noun (add_job, delete_document, get_resume_master_field), but discovery_* tools reverse this to noun_verb (discovery_list, discovery_add), and Gmail tools mix patterns (search_gmail_for_job vs read_gmail_message). The inconsistency is noticeable but not chaotic.

Tool Count2/5

With 35 tools this is well above the typical well-scoped range (3-15) and even the heavy range (16-25). The large count reflects the many subdomains covered, but several tools could be consolidated (e.g., update_job_status into update_job, or read_document/read_text_file into one scoped reader).

Completeness4/5

The tool set covers the full job-search lifecycle: tracker CRUD, discovery pipeline, interview prep, resume generation and document management, plus Gmail integration with a safety-conscious send. Minor gaps exist (e.g., no way to edit or delete interview prep sections, no direct Gmail thread listing) but they don't create dead ends.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables job search and scraping across multiple job boards (LinkedIn, Indeed, Glassdoor, etc.) with advanced filtering, directly from Claude Desktop or other MCP clients.
    5
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables conversational management of quant job search, tailored CV generation, and skill gap analysis through MCP tools. Allows Claude to search, ingest, score jobs, and build/iterate LaTeX CVs.
    32
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables running a job search with Claude Code: parses CV, discovers roles, fetches exact application fields, drafts non-trivial applications (positioning, not autofill), and renders an offline dashboard for review.
  • F
    license
    B
    quality
    C
    maintenance
    Enables searching justjoin.it for job listings and tracking applications locally with status updates, all via natural language in Claude.
    4

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DaleMagrath/mcp-job-tracker'

If you have feedback or need assistance with the MCP directory API, please join our Discord server