Skip to main content
Glama

Workopia — Job Search

cover_letter_tool

Destructive

Write a cover letter for a SPECIFIC job — TWO steps. STEP 1 (default; action omitted or 'prepare'): the server returns the job's JD and the candidate's background, plus writing instructions. YOU (the model) then WRITE the cover letter (250–350 words, specific to the role, mapping the candidate's real achievements to the JD — never fabricate). STEP 2: call this tool again with action:'save', cover_letter_text:, and job_id — the server renders a PDF and saves it to the candidate's Workopia dashboard (requires sign-in). Use whenever the user asks for a cover letter for a specific job. Resolving job_id (same rules as tailor_resume_tool / job_detail_tool): pass the Job Id value from the most recent prior search/refine result VERBATIM; no placeholders like 'JOB_1' or '#1'. For STEP 1 supply ONE of job_id (preferred — server fetches the JD from Mongo) OR job_description, plus the candidate's resume via resume_text / resume_content / json_resume / user_profile.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionNoOmit or 'prepare' = STEP 1 (server returns JD + background + instructions for you to write). 'save' = STEP 2 (pass cover_letter_text; server renders a PDF and saves it to the dashboard; requires sign-in).
job_idNoID of a job from a prior search/refine result. Use the **Job Id** value from the prior search result's content text VERBATIM. Server fetches full JD from Mongo.
companyNoOptional; used in the confirmation line.
job_titleNoOptional; used in the 'for <role> at <company>' confirmation line.
parametersNo
session_idNo
user_emailNoIf provided, server fetches the full Workopia profile for the cover letter header + writes the generated cover letter back to profile.applications[jobId].coverLetter.
json_resumeNoOptional JSON Resume object (basics/work/skills). Takes precedence over resume_text when both present.
resume_textNoUser's resume content (plain text or JSON Resume as string).
cover_letterNoOptional wrapper containing the same fields above (legacy shape).
user_profileNoOptional main-site profile object; used as a fallback source for summary/skills/experience and for the cover letter header (firstName, lastName, email, phone, city, country).
resume_contentNo
job_descriptionNoFull JD text when the user pastes it directly (alternative to job_id).
cover_letter_textNoSTEP 2 only: the cover letter you wrote (plain text). The server renders it to PDF and stores it on profile.applications[job_id].coverLetter.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added
  2. Removed
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses the two-step stateful behavior, that STEP 2 renders a PDF and saves to the dashboard, requires sign-in, and that the model must write the letter (never fabricate). Annotations already indicate destructiveHint=true, and the description adds context about what gets saved and the sign-in requirement. It doesn't fully detail failure modes or what happens without sign-in, but it adds substantial behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the two-step process, but it is somewhat long and includes some redundancy with the schema (e.g., repeating parameter details). It earns its place by explaining the workflow, but could be tightened by trimming repeated parameter semantics.

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 complex two-step tool with 14 parameters and no output schema, the description covers the workflow, required inputs per step, job_id resolution rules, and the save destination. It doesn't describe the return value of STEP 1 in detail (beyond 'returns the job's JD and the candidate's background, plus writing instructions'), but that is adequately implied. The sign-in requirement and write-back behavior are disclosed.

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 79%, so the schema already documents most parameters. The description adds meaning by explaining the relationship between job_id and job_description (alternatives), the precedence of json_resume over resume_text, and the role of user_email in writing back to profile.applications[jobId].coverLetter. It also clarifies that cover_letter_text is STEP 2 only. This goes beyond the schema's individual 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 writes a cover letter for a specific job and explicitly breaks down the two-step process (prepare then save). It distinguishes itself from siblings by naming tailor_resume_tool and job_detail_tool for job_id resolution rules, and the verb 'write' plus resource 'cover letter' is specific.

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 explicitly says 'Use whenever the user asks for a cover letter for a specific job' and provides detailed when-to-use guidance for STEP 1 vs STEP 2, including when to pass job_id vs job_description. It also references sibling tools for job_id resolution, giving clear alternatives.

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.