job-search-mcp
Server Quality Checklist
Latest release: v0.1.0
- Disambiguation4/5
The three tools have clearly distinct purposes: match_job retrieves evidence, push_to_tracker writes results, and list_applications reads tracked jobs. There's no real overlap between them. The only minor confusion is that push_to_tracker's write and list_applications's read both touch the same Notion store, but their actions are opposite and clear.
Naming Consistency4/5All three names follow a clear verb_noun pattern: match_job, push_to_tracker, list_applications. Each uses an imperative verb followed by the target. Minor inconsistency: 'push_to_tracker' is a multi-word noun phrase while 'match_job' and 'list_applications' are more compact, but the pattern is consistent enough.
Tool Count4/5Three tools is on the low side but reasonable for a focused job-search workflow. The surface covers matching, tracking, and listing, which are the core operations. One could argue a remove/cleanup tool is missing, but the scope of an MCP for job search is narrow enough that 3 tools feels appropriately scoped, not thin.
Completeness3/5The server covers the core workflow: match a job, push the evaluation to the tracker, and list tracked applications. However, there are notable gaps — no way to create a new job row (push_to_tracker explicitly requires an existing job_id and never creates a row), no update/retract on previous evaluations, and no removal of stale entries. The create-to-track action is a significant missing lifecycle step for a job-search tracking workflow.
Average 4.3/5 across 3 of 3 tools scored.
See the Tool Scores section below for per-tool breakdowns.
- No community issues in the last 6 months
- 41 commits in the last 12 weeks
- No stable releases found
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI is passing
Add a LICENSE file by following GitHub's guide. Once GitHub recognizes the license, the system will automatically detect it within a few hours.
If the license does not appear after some time, you can manually trigger a new scan using the MCP server admin interface.
MCP servers without a LICENSE cannot be installed.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
Add a glama.json file to provide metadata about your server.
If you are the author, simply .
If the server belongs to an organization, first add
glama.jsonto the root of your repository:{ "$schema": "https://glama.ai/mcp/schemas/server.json", "maintainers": [ "your-github-username" ] }Then . Browse examples.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- 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 status matching is case-sensitive and exact, that returned fields depend on a configurable schema, and clarifies which statuses are server-driven versus manual edits. It explains what gets returned (job_id plus tool-populated fields) and the read-only nature of the operation, providing good behavioral context beyond the minimal schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, then parameter details, then return-value context. It's reasonably compact for the information conveyed, though the return-fields paragraph is slightly verbose with the documentation reference. No wasted sentences; each paragraph earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool with no annotations, the description covers purpose, filter semantics, return shape (with reference to a configurable schema), and data provenance. An output schema exists to document return structure. It's complete enough for an agent to invoke confidently, though it could note error cases or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all parameter meaning. It thoroughly explains the 'status' parameter: exact-match semantics, case-sensitivity, example values, and behavior when omitted. The key insight that filtering requires exact tracking-store values is genuinely useful and not derivable from the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'lists tracked jobs from the configured tracking store (Notion)', specifying the verb (list), resource (tracked jobs), and source (Notion tracking store). It distinguishes from siblings by clarifying it reads tracked applications rather than matching or pushing jobs, though it doesn't explicitly name the sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: the optional 'status' filter for exact matches, instructions to omit it to return all rows, and a warning that certain statuses are manual edits made in Notion rather than server-driven. It gives practical when-to-use guidance via the filter semantics, though it doesn't explicitly state when to use a sibling tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- 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 does disclose a key behavioral trait: the tool returns raw retrieval scores and resumes chunks WITHOUT synthesizing strengths/gaps/notes, explicitly telling the agent to reason over the evidence itself. This is valuable transparency about the tool's computational behavior (heuristic cosine similarity) and its non-analytical nature. It doesn't cover auth/permissions or failure modes, but for a retrieval-style tool the core disclosure is present and helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose sentence, Args list, and Returns paragraph. It's appropriately detailed for a retrieval tool and front-loads the purpose. There is a minor dependency on the job-fit://rubric resource which isn't fully elaborated, and the Args/Returns formatting is somewhat technical, but overall it's concise with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 parameters (1 required), no enums, and an output schema present, the tool is relatively simple. The description explains what the tool returns (retrieval_score, chunks, similarities) and, crucially, what it does NOT do (synthesize strengths/gaps/notes), directing the agent to the job-fit://rubric. The main gap is that the rubric resource is referenced vaguely without stating what it contains, but the output schema and low parameter count reduce the burden on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, meaning the schema provides only type names (job_description, source_url) with titles but no descriptive help. The description compensates meaningfully: it explains job_description is 'the full text of the job description to match against' and source_url is 'optional URL the job description was pulled from, for reference.' However, it adds no format details for job_description (e.g., expected length, formatting) or when source_url might matter. This is adequate compensation for low coverage but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement: 'Retrieve resume/experience evidence relevant to a job description.' This clearly distinguishes it from its siblings (push_to_tracker, list_applications), which are evident from context to be write/listing operations. The purpose is unambiguous and specifically tied to retrieval matching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does 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 evidence retrieval against a job description for fit analysis. It explicitly states what the tool does NOT do ('Does not synthesize strengths/gaps/notes') and instructs the agent to reason over retrieved evidence applying the job-fit://rubric resource. This is strong guidance about how to use the output. However, it doesn't explicitly contrast with sibling tools (e.g., when NOT to use this in favor of list_applications), which would push it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior5/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 and it delivers extensively. It discloses that only tool-populated fields (per tracking_schema.yaml) are touched while manual fields are left intact, that misconfigured fields are skipped rather than failing the whole write, that warnings appear in the result, and that dry_run makes no Notion API call so its warning coverage is limited. This is exceptionally transparent about side effects and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and well-organized with Args, behavior, and edge-case handling clearly sectioned. It's longer than minimal but every sentence adds operational value — dry_run semantics, field-preservation behavior, and warning behavior are all genuinely useful. Slightly long but front-loaded with the core operation first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no annotations and no output schema, the description is thorough: it covers the write target, in-place update semantics, field-selection behavior driven by tracking_schema.yaml, error handling for misconfigured fields, and dry_run's limitations. It would benefit from describing the result structure (what warnings/properties are returned) since there's no output schema, but it's largely complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains job_id (Notion page ID of an existing tracked job), verdict (full evaluate_fit output, referencing docs), and dry_run (preview mapped payload without writing). The only minor gap: it references external docs (evaluate_fit_schema.md, adr/0011) rather than describing the verdict structure inline, though reasonable given complexity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Write'), the resource ('an evaluate_fit result to the configured tracking store (Notion)'), and the key behavior — updating an existing row in place, never creating a new one. This distinguishes it effectively from sibling tools like match_job (which produces the fit result) and list_applications (which reads applications).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines5/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (after evaluate_fit produces a result, to persist it) and gives critical usage context: job_id must be an already-tracked Notion page ID, whether to use dry_run to preview mapping before writing, and how misconfigured fields are handled. It distinguishes from siblings by positioning this as the write step following the match/evaluate step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
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/jsundquist/job-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server