JobHound
Connects to Greenhouse job board API to fetch, score, and apply to job listings.
Connects to Wellfound (formerly AngelList) to fetch job listings for scoring and application.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JobHoundscan for new remote backend jobs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JobHound ๐
MCP server that lets Claude Code scan, score, and apply to jobs autonomously.
JobHound connects directly to Ashby, Greenhouse, and Lever job board APIs โ no browser required for discovery. It scores every listing with a keyword heuristic, queues high-scoring roles, and uses Claude Code as the tailor to write per-role CVs and cover letters.
Includes a TUI dashboard for tracking your pipeline in real time.
Table of Contents
Related MCP server: crosswalk-mcp
Why I Built This
Job searching is miserable. LinkedIn Easy Apply is a black hole โ you click apply, it goes nowhere, you never hear back. Premium job alerts cost money and send you garbage. Manually browsing 5 job boards daily is a part-time job in itself.
The APIs are free. Ashby, Greenhouse, Lever โ they all have public APIs that list every open role. Why am I manually scrolling?
JobHound exists because my agent should handle job discovery, not me. It scans APIs, scores listings against my skills and preferences, queues the good ones, and hands the tailoring work to Claude Code. I review the generated CV and cover letter, say yes or no, and it submits.
The TUI exists because I want to see my pipeline at a glance โ 47 tracked, 3 queued, 12 applied, 2 interviewing โ without opening a browser tab.
What It Does
Feature | What It Does |
Scan | Fetches from Ashby, Greenhouse, Lever, RemoteOK, HN Hiring, Wellfound |
Score | Keyword heuristic matches job description against your skills and preferences |
Queue | High-scoring roles enter a queue for review |
Tailor | Exposes job + your resume to Claude Code for per-role CV and cover letter generation |
Apply | Submits tailored applications via API where supported |
Track | SQLite-backed pipeline tracking with status (new โ queued โ applied โ interviewing โ rejected) |
Dashboard | Real-time TUI with live updates every 30 seconds |
Daemon | Background scan loop runs on a schedule |
Current Pain Points
These are the battles I'm actively fighting:
Keyword scoring is crude โ It's a heuristic: count keyword matches between job description and your config. It doesn't understand that "React" and "frontend" are related, or that "5 years experience" in a job description is flexible. A real scoring model would learn from what you actually applied to and got interviews for.
Not every board has an API โ RemoteOK and HN Hiring require scraping. Scraping breaks when they change their HTML. The browser automation layer (
playwright-stealth) is overkill for simple HTML scraping but necessary because some sites block basic requests.Auto-apply is limited โ Ashby and some Greenhouse instances support direct API application. Most don't. For those, JobHound generates the tailored docs and you apply manually. The "autonomous" part stops at "here's your CV and cover letter, go submit it."
The TUI is Textual-dependent โ Textual is great but heavy. On a slow terminal or over SSH it can lag. The dashboard is pretty but not essential โ the core value is the MCP server and scan queue.
Config management is manual โ
config.yamlneeds your skills, preferences, API keys for each source. Updating it is editing YAML. I want the agent to infer my skills from my GitHub repos and update the config automatically.No integration with Grayson โ Grayson is my outreach automation tool (cold emails, networking). JobHound finds the jobs, Grayson finds the people. They don't talk to each other. A warm referral beats a cold application.
End Goals โ Where This Is Headed
Short Term (now โ 3 months)
Better scoring โ move from keyword heuristic to embedding-based semantic similarity
Auto-config from GitHub โ read my repos, infer my stack, auto-populate config.yaml
Per-source rate limit handling โ respect Ashby/Greenhouse rate limits, back off gracefully
Medium Term (3โ6 months)
Grayson integration โ for every queued job, Grayson finds a mutual connection or relevant person to reach out to
Unified agent pipeline โ Blackreach researches the company, Huginn scrapes their blog/docs, JobHound scores the role, Grayson finds the contact, all in one workflow
Auto-apply expansion โ support more application flows (Lever API, custom forms)
Long Term (6โ12 months)
Fully autonomous job search โ "Find me senior backend roles at AI startups in Toronto, apply to the top 10, network with hiring managers, track everything"
Interview prep integration โ after an application, auto-research the company, generate likely interview questions, prepare answers
Salary negotiation assistant โ track market data, suggest negotiation strategies based on role/company/location
Install
git clone https://github.com/Null-Phnix/jobhound
cd jobhound
pip install -e .
cp config.example.yaml config.yaml # fill in your detailsConnect to Claude Code
Add to your ~/.claude/settings.json (or .claude/settings.json in the project):
{
"mcpServers": {
"jobhound": {
"type": "stdio",
"command": "jobhound-server"
}
}
}MCP Tools
Tool | Description |
| Fetch all sources, score jobs, queue high-scoring ones |
| List jobs by status (queued, applied, failed, etc.) |
| Full job details + generated docs |
| Job description + your resume for Claude to tailor |
| Submit a tailored application |
| Manually set status (interviewing, rejected) |
| Pause the daemon scan loop |
| Resume the daemon scan loop |
Workflow
jobhound_scan() # find what's new
jobhound_list("queued") # see what's waiting
jobhound_get_for_tailoring(42) # get job + resume
[Claude writes tailored CV + letter]
jobhound_apply_tailored(42, cv, letter) # submit + recordTUI Dashboard
jobhound-tuiLive two-pane view of your entire job pipeline. Polls SQLite every 30 seconds, shows status by color.
โโ JobHound โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ [LIVE] 47 tracked ยท 3 queued ยท 12 applied ยท 2 interviewing โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โถ Bree applied โ Bree โ Software Engineer, Backend โ
โ Modal applied โ Applied: 2026-03-11 via Ashby โ
โ LangChain applied โ Score: 87/100 โ
โ Cohere queued โ Method: direct POST โ
โ Anthropic new โ โ
โ Cursor failed โ Cover Letter: โ
โ โ > The line that stood out in your... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ [s]can [p]ause [f]ilter [o]pen URL [x]export [q]uit โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโTUI Keybinds
Key | Action |
| Scan sources (fetch + score, no auto-apply) |
| Pause / resume daemon |
| Cycle filter: all โ new โ queued โ applied โ failed โ interviewing |
| Open highlighted job URL in browser |
| Export current view to |
| Quit |
Config
See config.example.yaml. Supports Ashby, Greenhouse, Lever, RemoteOK, HN Hiring, and Wellfound.
Stack
Python 3.11+
fastmcpโ MCP serverhttpxโ source API callssqlite3โ job trackingtextualโ TUI dashboardrichโ terminal output
License
MIT
Available Tools
9 toolsjobhound_apply_tailoredA
Submit an application using the tailored CV and cover letter. Tries: LinkedIn MCP โ direct POST (Ashby/Lever) โ Blackreach fallback. Records the outcome in the database.
Args: job_id: integer ID of the job tailored_cv: the tailored CV text (markdown) cover_letter: the cover letter text
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| tailored_cv | Yes | ||
| cover_letter | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the fallback attempt order and that the outcome is recorded in the database, which is useful. However, it does not mention potential side effects like sending emails, irreversibility, or failure behavior beyond the fallback chain, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a clear purpose sentence, a fallback chain sentence, a database side-effect sentence, and a structured Args block. Each sentence earns its place; no fluff. The Args block is a bit redundant with the schema but justifiable given the lack of schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the tool's action, fallback strategy, and database recording. However, it omits prerequisites (e.g., job_id must reference a valid job, tailored_cv should come from get_for_tailoring), error handling if all attempts fail, and potential duplicate-application guards. These gaps make it adequate but not complete for a side-effectful action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no parameter descriptions (0% coverage), so the Arg list in the description is necessary. It names all three parameters and adds 'markdown' for tailored_cv, but otherwise just restates the schema's names and types. It provides no constraints, examples, or relationships to other tools, so it adds minimal meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Submit an application using the tailored CV and cover letter.' It clearly identifies the tool's sole purpose and differentiates it from sibling tools like status, get, update, and get_for_tailoring, which serve different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you have a tailored CV and cover letter ready, and the fallback chain (LinkedIn MCP โ direct POST โ Blackreach) gives context on how it attempts to submit. It doesn't explicitly exclude alternatives, but no sibling tool overlaps with applying, so the usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_getC
Get full details for a job including cover letter if applied. Args: job_id: integer ID
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds that the tool returns a cover letter 'if applied,' which is useful conditional behavior, but it does not describe potential errors, absence of a job, or any side effects. For a read-only getter this is acceptable but still minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded. Every sentence adds necessary information: the first states the purpose, the second defines the argument. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool, the description covers the core purpose and param. However, it lacks any mention of how this differs from related tools like get_for_tailoring, and does not address failure modes or return value specifics. The presence of an output schema reduces the need to describe returns, but the tool's place among siblings is unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate for parameter meaning. However, the description merely restates the schema's type and name ('job_id: integer ID') without adding context about where to find the ID, its format, or any constraints. This adds no value beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and the resource ('full details for a job'), including the conditional inclusion of a cover letter. It is specific enough to understand the tool's core function, though it does not explicitly distinguish it from sibling tools like jobhound_list or jobhound_get_for_tailoring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like jobhound_list or jobhound_get_for_tailoring. The description implies use when a specific job_id is available, but does not state exclusions or when another tool 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.
jobhound_get_for_tailoringA
Get everything needed to write a tailored application for a job. Returns the job description and the full resume. After reading this, generate a tailored CV and cover letter, then call jobhound_apply_tailored(job_id, tailored_cv, cover_letter).
Args: job_id: integer ID from jobhound_list('queued')
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It clearly states what is returned (job description and full resume) and implies a read-only operation via the verb 'Get', but does not explicitly disclose non-mutation or any side effects. It also gives a precondition for job_id (from list 'queued'). This is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and an Args block, all compact and informative. The main purpose is stated first, followed by the return content and the next action. No filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, clear return), the description covers the essential workflow: what it returns, what to do next, and where the ID comes from. The presence of an output schema covers structured return details, so the high-level return summary is sufficient. It could mention error cases but that's a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides the type and required flag for job_id, with no description. The description adds critical meaning: the ID must come from jobhound_list('queued'), which is a significant addition. This compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and identifies the resource ('everything needed to write a tailored application'), and explicitly returns the job description and full resume. It differentiates from sibling 'jobhound_get' by indicating its role in the tailoring workflow and specifying the returned items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides workflow guidance: after reading, generate a tailored CV and cover letter, then call jobhound_apply_tailored(job_id, tailored_cv, cover_letter). It also tells the user where the job_id comes from (jobhound_list('queued')), which helps select the correct input. However, it doesn't explicitly contrast this with jobhound_get, but the name and context imply the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_listA
List jobs by status with their database IDs. Args: status: one of new, queued, applied, failed, interviewing, rejected
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | queued |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It adds that the output includes 'database IDs', which is useful for chaining with other tools. However, it does not disclose default behavior (e.g., when status is omitted), pagination, ordering, or any side effects. The verb 'List' implies read-only, but this is not stated explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The main purpose is stated first, followed by a focused parameter explanation. Every word contributes value; there is no padding or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter) and has an output schema, so the description does not need to detail return values. It covers the core purpose, the parameter's allowed values, and the fact that database IDs are included. Missing the default status and explicit usage guidance, but overall adequate for a low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% parameter descriptions, and the description compensates by enumerating the allowed status values ('new, queued, applied, failed, interviewing, rejected'). It also explains the parameter's role ('by status'). It does not mention the default value (queued) which is present in the schema but not repeated, and does not clarify if the parameter is optional or required beyond the schema's default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List'), the resource ('jobs'), and the specific scope ('by status with their database IDs'). It distinguishes from siblings like jobhound_get (which likely fetches a single job) and jobhound_status (which likely checks a specific status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or mention sibling tools. The only usage context is implied by the phrase 'List jobs by status', which is not differentiated from other listing or status-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_pauseA
Pause the JobHound daemon (scan loop stops applying).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states that the scan loop stops applying, which is the key behavioral effect. It does not cover edge cases like idempotency or in-flight operations, but the core behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and resource, adding only the necessary clarification about the scan loop. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with a clear output schema, the description adequately covers the tool's purpose and effect. Sibling names like jobhound_resume provide related context, making the description complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description fully covers the semantics by simply stating the action. The baseline of 4 for no-parameter tools applies, and the description adds no confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Pause' and identifies the resource 'JobHound daemon', with clarifying detail 'scan loop stops applying' that clearly distinguishes it from sibling tools like jobhound_status or jobhound_resume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (when you want to halt scanning) but does not explicitly state when not to use or reference alternatives. However, the sibling tool jobhound_resume is implicitly complementary, making the usage clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_resumeB
Resume the JobHound daemon.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the action without revealing side effects, idempotency, or state changes. It doesn't say what occurs if the daemon is already running or whether resuming triggers other processes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words, immediately stating the action. It is efficiently structured and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is very simple with no parameters, and an output schema exists to cover return values. The description provides the essential purpose but lacks usage context and behavioral detail. It is minimally adequate for a straightforward daemon control action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so there are no parameter semantics to explain. Per the baseline rule for 0-parameter tools, a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Resume' and clearly identifies the resource 'JobHound daemon', making the action unambiguous. It does not explicitly differentiate from siblings like jobhound_pause, but the verb itself implies the opposite action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It doesn't mention that it should be used after jobhound_pause or that the daemon must be paused. No contextual or exclusionary guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_scanA
Fetch jobs from all configured sources, score them, and queue high-scoring ones. Jobs above score threshold are saved with status 'queued'. Returns a summary + list of queued job IDs ready for tailoring. Next step: call jobhound_list('queued') then jobhound_get_for_tailoring(id).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects. It clearly states that jobs above a score threshold are saved with status 'queued' and that a summary plus queued IDs are returned. This gives the agent a good model of the behavior, though it doesn't specify threshold values or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four concise sentences, each adding value: action, outcome, return value, and next steps. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers the operation, side effects, return content, and downstream steps. It is sufficient for an agent to correctly invoke and process the tool's results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so the baseline is 4. The description adds no parameter-specific details because there are none; it correctly omits any schema repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear multi-step action: fetch jobs from all configured sources, score them, and queue high-scoring ones. This distinguishes it from sibling tools like jobhound_list or jobhound_get, which are for querying existing jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit next-step guidance, telling the agent to call jobhound_list('queued') then jobhound_get_for_tailoring(id). This implies jobhound_scan is the entry point for processing new jobs, though it doesn't enumerate exclusions or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_statusB
Summary of JobHound activity: job counts by status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not explicitly state that this is a read-only operation, nor does it mention any side effects, authentication needs, or data freshness. While a summary might be inferred as safe, that is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded, communicating the essential purpose without unnecessary words. It is efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and has an output schema, so return values need not be explained. However, the description lacks context about what 'JobHound activity' encompasses, what statuses are counted, or whether the summary is global or scoped. This leaves room for ambiguity in tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to add parameter meaning, and it does not conflict with the schema, which is empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a summary of job counts by status, which distinguishes it from sibling tools like jobhound_get and jobhound_list that focus on individual job details. The phrasing 'Summary of JobHound activity' is somewhat vague but immediately clarifies with 'job counts by status.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention contexts, exclusions, or directional hints to other tools. The description merely states what it does without explaining appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobhound_updateA
Manually update a job's status. Use this when you get an interview invite or rejection. Args: job_id: integer ID status: interviewing, rejected, applied, failed, queued
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| status | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavioral traits. It makes the mutating nature clear ('update') and lists valid status values, but it does not mention potential side effects, reversibility, or any required permissions. For a simple update, this is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose, a one-sentence usage guideline, and a compact argument list. Every element earns its place with no wasteful words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter update tool, the description covers purpose, usage, and arguments. The presence of an output schema means return values need not be described. It falls short only by omitting any prerequisites or notes on what the update does to existing data, but overall it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully by documenting both parameters: 'job_id: integer ID' and 'status: interviewing, rejected, applied, failed, queued.' This adds critical meaning, including an explicit enum list that is missing from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Manually update a job's status.' The verb 'update' combined with the resource 'job status' is specific and distinct from sibling tools like jobhound_get or jobhound_status, which likely read or retrieve status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for when to use the tool: 'Use this when you get an interview invite or rejection.' This gives clear usage guidance, though it does not explicitly mention alternatives or exclusions, which is why it doesn't score a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
jobhound_apply_tailored - First observed
jobhound_get - First observed
jobhound_get_for_tailoring - First observed
jobhound_list - First observed
jobhound_pause - First observed
jobhound_resume - First observed
jobhound_scan - First observed
jobhound_status - First observed
jobhound_update
TDQS
Each tool serves a distinct function: scanning, listing, retrieving, updating, applying, and daemon control. The only potential confusion is between `jobhound_get` and `jobhound_get_for_tailoring`, but their descriptions clarify the different outputs.
All tools use the `jobhound_` prefix with snake_case verbs like `get`, `list`, `scan`, `update`, `apply_tailored`. Minor deviations are `jobhound_status` (a noun rather than a verb) and `jobhound_get_for_tailoring` (a longer phrase), but the pattern is consistent enough to predict tool purpose.
9 tools is well-scoped for a job application automation server. Each tool covers a necessary step in the workflow: scanning, queuing, tailoring, applying, tracking, and daemon lifecycle.
The core workflow is fully covered: scan โ list โ get_for_tailoring โ apply_tailored, plus status updates and daemon control. Minor gaps include no tool for manually adding or deleting jobs, but these are not essential for the automated pipeline.
Maintenance
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
Job application tracker for developers - AI agents write over MCP, you review in a dashboard.
ATS resume scoring, job analysis, interview prep, and auto-apply that verifies each submission.
Auto-apply to jobs: matches your CV, tailors a fresh CV per posting, and applies for you.
AI job search for Claude, ChatGPT, Cursor. 170K+ jobs, 3,800+ companies. OAuth or stdio.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables users to search for jobs, prefill applications using AI, and automate submissions across major platforms like Lever and Ashby directly from Claude or Cursor. It provides a full suite of tools for managing job queues, profile data, and resumes within a chat interface.35MIT
- AlicenseNot gradedqualityDmaintenanceAn AI-native career copilot that enables job discovery, fit scoring, and application tailoring through natural language, running locally with zero API keys.1MIT
- FlicenseNot gradedqualityDmaintenanceAutomates job application tracking and resume/cover letter generation using AI, integrating with Google Drive, Notion, and Gmail.1-
- AlicenseNot gradedqualityCmaintenanceAn AI-powered job search and application assistant that enables multi-source job hunting, OpenAI matching, cover letter generation, and hybrid application automation via Playwright, Chrome CDP, screen OCR, and manual assist.MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Null-Phnix/jobhound'
If you have feedback or need assistance with the MCP directory API, please join our Discord server