Skip to main content
Glama

Analyze a job posting

analyze_vacancy

Analyze the text of a job posting that is not in ResumeQuick yet against a resume. Creates a NEW vacancy in the tracker; a vacancy already in the tracker is analyzed in place by analyze_tracked_vacancy, a radar match by analyze_radar_match. The same posting text analyzed before returns that analysis with status 'completed' and spends nothing, unless the resume or what the user told about themselves changed since; force=true re-runs it. Runs asynchronously — this returns an analysis_id immediately; get_vacancy_detail(analysis_id) shows the match, verdict and gaps once done, usually within 10 seconds. company, location and url are stored on the vacancy, shown on the tracker card, and make the analysis findable by search_vacancies(location=...). Counts as one vacancy analysis against the user's plan. Returns 'not_found' if resume_id is given but does not belong to the current user, and 'limit_exceeded' if the plan quota is reached.

Input Schema

NameRequiredDescriptionDefault
inputYes

Output Schema

NameRequiredDescriptionDefault
reusedNoTrue: the same text was analyzed before against the same resume and nothing was spent; company, location and url passed with the call are written onto that analysis.
statusNo'processing' — the analysis runs asynchronously; 'completed' — this posting text was analyzed before and that analysis is returned as is.processing
task_idYesBackground task id (informational; get_vacancy_detail shows progress).
analysis_idYesId of the created analysis; pass to get_vacancy_detail once ready.
vacancy_titleNoTitle stored on the vacancy. A new analysis keeps a passed title; without one it is the posting's first line until the analysis names the role. A returned earlier analysis keeps its own title.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Despite annotations only carrying generic CRUD hints, the description discloses the full behavioral profile: it creates a NEW vacancy, runs asynchronously and returns an analysis_id immediately, is polled via get_vacancy_detail (~10s), returns cached 'completed' results without spending quota unless resume/self-description changed, and emits 'not_found'/'limit_exceeded' errors. It also states it consumes one vacancy analysis against the plan — a cost/rate detail annotations do not capture.

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?

Front-loaded with the core action and its routing constraint in the first sentence, then layers dedup, async, storage, and error semantics. Dense but every clause carries a distinct, actionable fact with no 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?

For an async mutating tool with a nested schema and an output schema, this covers the lifecycle (trigger → poll → result), cost, dedup/force, persistence of inputs, and failure codes. An agent has everything needed to invoke, poll, and handle errors 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?

The nested input schema documents each field, but the description adds meaning beyond it: company/location/url are persisted on the vacancy and make it findable via search_vacancies(location=...), resume_id defaults to the active resume, and force controls re-execution. This is genuine semantic value on top of the schema's field-level docs, though the individual param mechanics are largely already covered.

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?

States a specific verb+resource ('Analyze the text of a job posting... against a resume') and immediately scopes it to postings 'not in ResumeQuick yet'. It explicitly names the two sibling tools that handle the adjacent cases (analyze_tracked_vacancy, analyze_radar_match), so an agent can route correctly without opening any schema.

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?

Gives explicit when-to-use (posting text not yet tracked), when-not (already tracked → analyze_tracked_vacancy; radar match → analyze_radar_match), and the dedup rule with the force=true escape hatch. Nothing about selection is left to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.