Skip to main content
Glama

CV Agent Toolkit

A suite of tools for working with Francisco Perez-Sorrosal's CV and professional information. Combines an MCP server, two agent skills, and two Claude Code plugins into installable packages.

What It Does

  • MCP Server — serves CV content in markdown, PDF, LaTeX, HTML, and Typst formats via 16 tools, plus semantic query capabilities and tailored CV rendering

  • cv-analyst Skill — structured CV summarization for different audiences (hiring screens, executive briefings, technical reviews) with output in multiple formats

  • cv-tailoring Skill — job-targeted CV tailoring that analyzes a job description, selects relevant content, and produces a page-constrained (2-3 pages) compiled PDF

  • Two Claude Code Pluginscv (consumer-facing) and cv-forge (maintainer-facing, editor + publisher)

Related MCP server: Resume MCP Server

Installation

First-time install

Install the consumer plugin from the marketplace:

claude plugin marketplace add francisco-perez-sorrosal/bit-agora
claude plugin install cv@bit-agora --scope user

Both the cv (consumer) and cv-forge (maintainer) plugins are available. Install cv for end-user CV access; additionally install cv-forge if you need to edit CV data or manage releases.

Configuration (for the maintainer plugin only)

The maintainer plugin needs the paths of your local clones. Pass them at install time; the values are validated against the manifest and stored in your user settings:

claude plugin install cv-forge@bit-agora --scope user \
  --config cv_repo_path=/Users/you/dev/cv \
  --config cv_forge_path=/Users/you/dev/cv-forge

Both paths must be absolute. cv_repo_path is required; cv_forge_path is optional (without it the skills fall back to a cv-forge executable on PATH, and the deploy skill refuses to run). To change a value, uninstall and reinstall with the new --config. The interactive /plugin configure command only sees project-scoped installs, so it reports the user-scoped plugin as "not installed in this project".

Update plugins

To pick up new releases of the plugins:

claude plugin update cv@bit-agora
claude plugin update cv-forge@bit-agora

Then restart Claude Code.

Claude Desktop

The server is remote, so there is nothing to download or run locally. Add it as a custom connector:

  1. Open Claude Desktop → Settings → Connectors

  2. Choose "Add custom connector"

  3. Name it (for example Francisco's CV) and enter the URL https://fps-cv-mcp.wasmer.app/mcp; no authentication is required

  4. Save, then enable the connector from the tools menu of a conversation

The server always serves the latest published release of the cv repository; you never need to update the connector after a new CV release. The raw tools (get_cv, get_cv_sections, query_work, …) and summarize_cv are available as soon as the connector is enabled.

Skills in Claude Desktop and claude.ai

The cv-analyst and cv-tailoring skills ship inside the Claude Code plugin; Claude Desktop and claude.ai take them as uploaded zips instead. Build them from this repository:

make build-skill

This writes dist/skill/cv-analyst.zip and dist/skill/cv-tailoring.zip (each contains SKILL.md and its references/; the frontmatter is limited to the portable name and description fields the upload accepts). Then, in Claude Desktop or claude.ai: Settings → Features (or Capabilities) → SkillsAdd skill → upload one zip at a time. Rebuild and re-upload after a plugin release that changes a skill.

Without the skills, summarization still works through the summarize_cv tool; tailoring (job-targeted CV with compiled PDF) needs cv-tailoring plus a local LaTeX or Typst toolchain, so it is best used from Claude Code.

Usage

Retrieve and Summarize the CV

  • "Get Francisco's CV"

  • "Summarize Francisco's CV for a startup executive briefing"

  • "What is Francisco's Google Scholar profile link?"

  • "Give me a 3 page summary of my CV for a hiring manager oriented towards an AI engineer position in HTML"

  • "Give me the CV in LaTeX"

Tailor the CV for a Job

Use the cv-tailoring skill to adapt the CV to a specific job description:

  • "Tailor my CV for this job: [paste job description]"

  • "Adapt my resume for a Senior ML Engineer position at Google"

  • "Customize my CV for this LinkedIn job"

The tailoring pipeline analyzes the job description, assesses fit against CV content, reorders sections, filters entries, and renders a 2-3 page PDF.

Publish (Maintainer Only)

Use the cv-forge plugin to edit CV data, open a PR, publish a release, and deploy updates:

  • "Edit my CV: change my title at Yahoo to Principal Research Engineer"

  • "Show me the diff and open a PR" (validation happens automatically)

  • "Publish the CV" (tags and deploys to Wasmer)

The Two Repositories

cv (data repository) — Contains the CV content in structured YAML format:

  • cv-data/resume.yaml — Work experience, education, projects, publications, skills

  • cv-data/resume-semantics.yaml — Semantic overlay with topic taxonomy and cross-references

  • schemas/ — JSON Schema pair for validation and structure definition

cv-forge (this repository) — Contains all the machinery:

  • Python MCP server and CLI for rendering and serving

  • Jinja2 templates for five output formats

  • Two Claude Code plugins

  • GitHub Actions for publishing and deploying

  • Wasmer Edge apps for hosting

The two repositories share no code — only two pinned artifacts (a reusable GitHub workflow and mirrored schemas) and one runtime data source (GitHub Release assets).

Rendered CV

The latest compiled CV is published as:

  • HTML (interactive)https://fps-cv.wasmer.app/

  • PDF — GitHub Release asset at releases/latest/download/resume.pdf

  • LaTeX (moderncv) — GitHub Release asset at releases/latest/download/resume.tex

  • Typst (moderner-cv) — GitHub Release asset at releases/latest/download/resume.typst

  • Markdown — GitHub Release asset at releases/latest/download/resume.md

All assets are regenerated every time the CV data is updated.

Release Assets

Each release contains eight stable, version-free assets:

Asset

Format

Purpose

resume.md

Markdown

Full CV for AI consumption

resume.tex

LaTeX (moderncv)

Full CV for local compilation

resume.html

HTML

Interactive CV for web browsers

resume.typst

Typst (moderner-cv)

Full CV for Typst compilation

resume.pdf

PDF

Compiled full CV

resume-tailored.tex

LaTeX (tailored)

Tailored template (requires TailoringSpec)

resume-tailored.typst

Typst (tailored)

Tailored template (requires TailoringSpec)

release.json

JSON

Release metadata and asset manifest

For developer documentation and deployment details, see README_DEV.md and RELEASE_PROCESS.md.

For the CV data repository, see github.com/francisco-perez-sorrosal/cv.

Support

For technical issues or questions about the machinery, refer to this repository. For questions or corrections about CV content, refer to the cv data repository.

Available Tools

16 tools
get_cvA
Read-onlyIdempotent

Data-layer tool: retrieves raw CV content in markdown, PDF, LaTeX, HTML, or Typst source.

When the cv-analyst skill is available, prefer invoking that skill instead of calling this tool directly — the skill orchestrates retrieval with proper formatting, artifact delivery, and summarization.

format='markdown' (default): LLM-readable text for analysis. format='pdf': original PDF binary for inline rendering. format='latex': full CV as LaTeX source (moderncv package) for typeset PDF generation. format='html': self-contained interactive HTML with theme switching and expandable cards. format='typst': full CV as Typst source (moderner-cv package) for typeset PDF generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
enrichNoInclude semantic enrichments (cross-references, skill levels)
formatNo'markdown' returns LLM-readable text (default). 'pdf' returns the original binary PDF document for inline rendering. 'latex' returns the full CV as LaTeX source (moderncv package). 'html' returns a self-contained interactive HTML document. 'typst' returns the full CV as Typst source (moderner-cv package).markdown

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, covering side-effect safety. The description adds format-specific behavioral details—such as 'original PDF binary for inline rendering' and 'self-contained interactive HTML with theme switching'—which go beyond the structured data. It does not discuss rate limits or errors, but these are less critical for a read-only retrieval tool.

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 front-loaded with a concise summary, then gives the skill-preference guidance, then enumerates formats line-by-line. It is slightly redundant with the schema’s format descriptions but remains tight and scannable; no sentence is wasted.

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 no output schema, the description compensates by specifying the return type for each format and noting the default. Annotations cover the safety profile. The only notable omission is any mention of payload size or pagination, but for a raw retrieval tool this is a minor gap, and the description is otherwise complete enough for correct invocation.

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 are fully described in the input schema. The description largely restates the format parameter’s schema text and adds no additional meaning for the `enrich` parameter. Since the schema already does the heavy lifting, the description adds no extra value, which aligns with the baseline of 3.

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 ('retrieves'), a clear resource ('raw CV content'), and an explicit list of output formats. It distinguishes itself from siblings like get_cv_sections or get_cv_pdf_link by framing this as a low-level data-layer retrieval rather than a derived view or link.

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 tells the agent when NOT to call this tool: when the cv-analyst skill is available, prefer that skill, and it explains why (orchestration, formatting, artifact delivery, summarization). This is direct routing guidance with a named alternative and condition.

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

get_cv_sectionsA
Read-onlyIdempotent

Retrieve one or more CV sections in a single call.

Accepts a list of section names. Returns all matched sections separated by blank lines. Reports any unrecognized names with the list of available sections.

ParametersJSON Schema
NameRequiredDescriptionDefault
enrichNoInclude semantic enrichments (cross-references, skill levels)
section_namesYesOne or more section names to retrieve (case-insensitive, '&' ignored). Use list_cv_sections() to see available names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds behavioral detail: returns sections separated by blank lines and reports unrecognized names with the list of available sections. This goes beyond annotations and helps the agent know what to expect.

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 short sentences that front-load the purpose and then detail behavior. No fluff or redundancy, making it easy to parse quickly.

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?

The description covers the core behavior: input, output format, and error reporting. Combined with full schema coverage and an output schema, it's sufficient for an agent to call it correctly. It also hints at using list_cv_sections for available names via the schema parameter.

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%, and the schema parameter descriptions are detailed (case-insensitive, '&' ignored, list_cv_sections reference). The main description doesn't add parameter details, but the schema already covers them, so a 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?

Clearly states the verb 'Retrieve' and resource 'CV sections', and specifies it can fetch one or more sections in a single call. This distinguishes it from siblings like list_cv_sections (which lists names) and get_cv (which returns the entire CV), so an agent can tell them apart.

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 does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions. It implies usage for retrieving specific sections, but without guidance on when not to use it. The only hint is in the schema parameter description referencing list_cv_sections, which is not part of the main description.

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

get_entryA
Read-onlyIdempotent

Retrieve a specific resume entry by its stable ID. Returns JSON representation.

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that it returns JSON representation, which is a small behavioral detail. It doesn't disclose error behavior (e.g., what happens if the ID doesn't exist) or any rate limits, but with annotations covering the main traits, a 3 is appropriate.

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?

One sentence, front-loaded with the verb and resource, and includes the return format. Zero waste. 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 read-only retrieval tool with one parameter and an output schema present, the description is nearly complete. It doesn't explain error cases or ID format, but the output schema covers return values and annotations cover safety. The sibling context provides enough routing information.

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 description coverage is 0%, so the description must compensate. The description mentions 'stable ID' and 'entry_id' is the only parameter, which adds a bit of meaning (the ID is stable). However, it doesn't explain the format of the ID or how to obtain it, leaving some ambiguity. Baseline for 0% coverage would be lower, but the single parameter is self-explanatory from its name and the description's 'stable ID' phrase.

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 states a specific verb ('Retrieve') and resource ('a specific resume entry by its stable ID'), which clearly distinguishes it from sibling tools like list_entry_ids or query_by_topic. It doesn't explicitly name a sibling to differentiate from, but the resource and ID-based lookup are clear enough.

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 when you have a stable entry ID and need the full JSON representation. It doesn't explicitly state when not to use it or mention alternatives, but the context of sibling tools (list_entry_ids for enumeration, query_by_topic for search) provides implicit guidance. No explicit exclusions or alternative routing.

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

get_entry_contextA
Read-onlyIdempotent

Get full semantic context for an entry: topics, relationships, summaries, impact.

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds the composition of the returned context but does not disclose costs, size limits, or any edge-case behavior; with annotations present, this is acceptable but not enriched.

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?

One sentence, front-loaded action, colon-delimited facet list, and no filler. Every word contributes to scope or output composition.

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 read-only tool with an output schema and safety annotations, the description gives the agent enough to select and call it. It is only slightly weakened by the lack of explicit routing advice against sibling tools.

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?

With one parameter and schema_description_coverage at 0%, the description's phrase 'for an entry' helps map entry_id to the target entry, but it adds no format, provenance, or guidance for obtaining valid IDs. Minimal compensation for the missing 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?

States a specific verb ('Get'), a clear resource ('full semantic context for an entry'), and enumerates the returned facets: topics, relationships, summaries, impact. The 'full' qualifier and the facet list distinguish it from sibling get_relationships or get_entry, which handle subsets.

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 only implies usage through 'full semantic context' and its four components. It does not explicitly say when to prefer this over get_relationships, query_by_topic, or get_entry, 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.

get_relationshipsB
Read-onlyIdempotent

Get cross-references and relationships for a resume entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that it retrieves cross-references and relationships, which clarifies scope, but it does not disclose any additional behavior such as error handling, empty results, or performance characteristics. With annotations in place, this is acceptable but not rich.

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 is concise and free of filler. It states the action and target clearly without unnecessary detail. This is an appropriate length for a tool with a single parameter.

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?

While the tool has an output schema (not shown), the description does not clarify the semantics of 'cross-references and relationships'—what types exist, how they are organized, or any limitations. It is a simple tool with one parameter, but the description leaves the agent guessing about the nature of the returned data. Given the existence of an output schema, the description could be more complete about the tool's behavior.

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

Parameters1/5

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

Schema description coverage is 0%—the entry_id property has no description in the schema. The tool description does not compensate; it only mentions 'for a resume entry,' which adds little beyond the parameter name. The agent receives no guidance on the expected format, example values, or constraints for entry_id, making this a significant gap given the low 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 uses a specific verb 'Get' with a clear resource: 'cross-references and relationships for a resume entry.' This distinguishes it from sibling tools like get_entry (which likely returns the entry itself) and get_entry_context (which may return broader context). The phrasing is unambiguous and tells the agent exactly what data to expect.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like get_entry_context or get_entry. There are no explicit when-to-use or when-not-to-use instructions, nor any mention of alternatives. The agent must infer its usage from the resource name alone.

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

get_skill_profileA
Read-onlyIdempotent

Get skill proficiency levels across the career, optionally filtered by topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds the 'across the career' scope, but does not disclose any other behavioral traits like response size, pagination, or data granularity. It does not contradict the annotations.

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 purpose and the optional filter. Every word adds value 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?

Given the simple one-parameter interface, the presence of an output schema, and read-only annotations, the description covers the essentials. It could mention what 'across the career' implies (e.g., time-based aggregation) but the current level is adequate for a straightforward retrieval tool.

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 description coverage is 0%, so the description must compensate. It explains that the 'topic' parameter optionally filters results, which adds meaning beyond the raw schema. However, it does not specify allowed values, format, or edge cases, leaving some ambiguity for a single 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 clearly states the tool retrieves skill proficiency levels, specifies the scope (across the career), and notes an optional topic filter. It is specific and distinguishable from sibling tools like get_cv or summarize_cv.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as query_by_topic or get_cv. It mentions optional topic filtering but does not explain when that filter is appropriate or how this tool relates to others.

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

get_tailored_cvA
Read-onlyIdempotent

Render a tailored CV from a TailoringSpec in LaTeX or Typst format.

The tailoring config controls section ordering, entry emphasis, and profile override. Returns compilable source code. Use this tool after analyzing a job description to produce a targeted CV.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: 'latex' (default, moderncv) or 'typst' (moderner-cv).latex
tailoring_configYesJSON string of TailoringSpec. Controls section ordering, entry emphasis (weight 0-2, 0=omit), profile override, and page budget. See TailoringSpec schema for full field definitions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already convey read-only and idempotent behavior. The description adds valuable behavioral detail beyond that: the config controls section ordering, entry emphasis with omit semantics, profile override, and page budget, and the tool returns source code rather than a compiled artifact.

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, all load-bearing and free of repetition. The primary action, format options, config behavior, return type, and usage context are covered without a wasted word.

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 a two-parameter generation tool with an output schema, annotations, and a focused description. It identifies the required parameter schema, format choices, key config semantics, and intended workflow; the only minor gap is that the full TailoringSpec schema must be resolved externally from the reference in the parameter description.

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 meaning: it explains what tailoring_config controls (section ordering, emphasis, profile override) and the parameter description contributes weight semantics (0-2, 0=omit) and page budget. This exceeds the schema baseline.

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: 'Render a tailored CV from a TailoringSpec in LaTeX or Typst format.' It clearly distinguishes this from sibling tools like get_cv and summarize_cv by naming the specialized output (compilable source code) and tailoring behavior.

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 closing sentence gives explicit usage context: 'Use this tool after analyzing a job description to produce a targeted CV.' It does not enumerate when not to use alternatives, so it stops short of a 5, but the placement guidance is unambiguous.

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

list_cv_sectionsA
Read-onlyIdempotent

List available CV section names with approximate line counts.

Helps AI assistants pick the right section for targeted queries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, establishing the read-only safety profile. The description adds that line counts are 'approximate,' which signals imprecision, and 'available' signals that the list reflects actual sections present. This adds some behavioral nuance beyond annotations, though it does not cover details like ordering or grouping, which the output schema may address.

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 short sentences, front-loaded with the core function in the first sentence and the rationale in the second. No word is wasted, and both sentences contribute distinct, valuable 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?

Given the tool's simplicity (no parameters), the presence of an output schema, and annotations covering read-only/idempotent behavior, the description is nearly complete. It explains what the tool returns, why to use it, and the approximate nature of line counts; however, it does not clarify the relationship to the similarly named sibling 'get_cv_sections,' leaving a small contextual gap.

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 tool has zero parameters, so there are no parameter semantics to document. The schema description coverage is 100% vacuously, and the description does not need to compensate; the baseline for 0 params is 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 'List' with a clear resource: 'available CV section names' and adds 'approximate line counts' to define the output. It clearly states the tool's function, but it does not explicitly differentiate itself from the similar sibling 'get_cv_sections,' so it stops short of 5.

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 second sentence, 'Helps AI assistants pick the right section for targeted queries,' gives a clear use case for the tool. It explains why an agent would call it, but it does not list any alternatives or when not to use it, which keeps it at a 4.

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

list_entry_idsA
Read-onlyIdempotent

List all entry IDs with labels, optionally filtered by section type (work, patents, publications, education, certificates, conferences, memberships, skills, book_reviews).

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already disclose that the tool is read-only and idempotent, so the description does not need to repeat those. It adds that the result includes labels and that filtering by section is optional, but it does not explain ordering, pagination, or how the empty default section behaves beyond the implied 'no filter' meaning.

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 entire description is one tight sentence that front-loads the core action and then adds the optional filter with all allowed values. There is no redundant phrasing or filler, and every word adds value.

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 list tool with one optional parameter and an output schema already present, so the description does not need to explain return structures further. It covers the key behaviors: listing all entry IDs, including labels, and optionally restricting by section type. That is sufficient 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?

The input schema for 'section' has no description and no enums, so the description carries the full burden of parameter semantics. It explicitly lists the valid section values and explains that the parameter filters the results, which adds meaning well beyond the bare schema.

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 clearly states a specific verb ('List') and resource ('all entry IDs with labels'), and it enumerates the filterable section types. It does not explicitly distinguish itself from sibling tools like get_entry or list_cv_sections, but the resource and filtering scope make the core purpose clear.

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

Usage Guidelines2/5

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

The description says the list can be optionally filtered by section type, but it provides no guidance on when to choose this tool over related tools such as get_entry, query_by_topic, or get_entry_context. No exclusions or alternative routing are given, so an agent must infer the appropriate usage.

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

query_by_topicB
Read-onlyIdempotent

Find resume entries annotated with a topic. Returns entry IDs with labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes
include_subtopicsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already disclose readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds a small behavioral detail by stating that the tool returns entry IDs with labels, but it does not discuss pagination, ordering, or limits.

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 short sentences, front-loaded with the purpose and followed by the output summary. Every word earns its place, with no filler or repetition of schema content.

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?

The tool is simple and an output schema exists, so return values do not need description. However, with zero schema coverage on parameters and no mention of include_subtopics, the description is not fully complete for an agent deciding how to set that flag.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate for parameter meaning. It clarifies that the search is over resume entries with a topic, which partially covers 'topic', but it says nothing about 'include_subtopics' or how the default true affects results.

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 states a specific action and resource: 'Find resume entries annotated with a topic' and notes the output shape ('Returns entry IDs with labels'). This is clear and distinct from generic tools, though it does not explicitly compare against siblings like query_work or get_skill_profile.

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

Usage Guidelines2/5

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

The description gives no direct guidance on when to prefer this tool over alternatives such as query_work or get_entry_context. Usage is only implied by the phrase 'annotated with a topic', and no exclusions or alternative conditions are provided.

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

query_workB
Read-onlyIdempotent

Filter work entries by company, date range, or topic. Returns matching entries as markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo
enrichNoInclude semantic enrichments (cross-references to publications/patents)
companyNo
end_yearNo
start_yearNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to restate safety. It adds the markdown output format and the three filter dimensions, which is useful. However, it omits behavior when no filters are provided (e.g., returns all or empty), filter combination logic (AND vs OR), and date range inclusivity—details that would aid correct invocation.

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 core action and output format with no fillers. Every word earns its place, making it optimally concise.

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?

Given the tool has 5 optional parameters and an output schema (which likely documents return structure), the description covers the main filtering dimensions and markdown output. Yet it lacks guidance on default behavior, filter combination semantics, and the role of the 'enrich' parameter in practice. For a filtered retrieval tool of this complexity, more context would be beneficial.

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 description coverage is only 20% (only 'enrich' has a description), so the description must compensate. It names the filter types (company, date range, topic) which maps to company, start_year/end_year, and topic parameters, adding meaning beyond the bare schema. However, it doesn't clarify parameter format (e.g., year strings) or how enrich relates to the filter criteria, leaving gaps.

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 clearly states the tool filters work entries by company, date range, or topic, and returns markdown. The verb+resource+criteria are specific, making the purpose unambiguous. However, it doesn't explicitly distinguish itself from the sibling query_by_topic, which likely narrows the scope; this is a minor gap.

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

Usage Guidelines2/5

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 doesn't mention that query_by_topic exists for topic-only queries, nor does it state any prerequisites or scenarios where this is preferred. The agent must infer usage from the schema alone.

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

summarize_cvA
Read-onlyIdempotent

Fallback CV summarization for clients without Agent Skills support.

When the cv-analyst skill is available, prefer invoking that skill instead — it provides richer orchestration, preset profiles, and artifact delivery. This tool exists for MCP clients that cannot load skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
toneNoTone of the summary. Examples: 'professional and objective', 'enthusiastic and promotional', 'analytical and critical', 'conversational and accessible', 'formal and academic'professional and objective
styleNoStyle of the output. Examples: 'structured paragraphs', 'bullet points', 'executive summary', 'technical brief', 'comparison table'structured paragraphs
contextNoThe context for the summary. Examples: 'academic research position', 'industry R&D role', 'startup technical leadership', 'consulting engagement', 'investment evaluation', 'collaboration assessment'industry R&D role
depth_levelNoLevel of detail for the summary. Examples: 'brief' (100-200 words), 'moderate' (200-400 words), 'comprehensive' (400-600 words), 'deep-dive' (600+ words)comprehensive
output_formatNoOutput format for the summary. Examples: 'markdown' (default), 'raw_text'markdown
target_audienceNoIntended audience for the summary. Examples: 'technical hiring manager', 'academic search committee', 'executive leadership', 'peer researchers', 'investment team', 'collaboration partners'technical hiring manager
include_citationsNoWhether to include citations and publication analysis from Google Scholar profile
length_constraintNoDesired length of the summary. Examples: '1-2 paragraphs' (100-200 words), 'half-page summary' (200-400 words), 'full-page overview' (400-600 words), 'detailed report' (600+ words), 'presentation slide content' (50-100 words)half-page summary
emphasis_distributionNoWhere to place emphasis in the summary. Examples: 'equal weight', 'research-heavy', 'industry-focused', 'technical-first', 'leadership-oriented'technical-first
additional_instructionsNoAny specific instructions for the summary. Examples: 'Focus on AI/ML experience in healthcare applications', 'Highlight open-source contributions and community engagement', 'Compare with industry benchmarks for similar roles'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the fallback context but discloses little about the tool's internal behavior, such as how the CV is selected or how include_citations affects processing.

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 short sentences deliver the core purpose and usage guidance with zero filler. The key fallback message is front-loadedaine; the alternative routing appears immediately after.

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 description covers the main decision an agent needs to make: whether to use this tool or the skill. An output schema existsched seasons it doesn't need to explain return values, and 100% schema coverage handles parameters. The main gap is that it never specifies which CV is being summarized, but the fallback framing and routing guidance make the tool usable.

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% and every parameter has a description with defaults and examples slash variants. The description adds no parameter-specific detail, but with complete schema documentation the 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 opens with 'Fallback CV summarization' — a specific verb, resource, and clear role. It distinguishes the tool from the cv-analyst skill and indicates why it exists, making its purpose unmistakable.

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 states when to use the tool ('clients without Agent Skills support') and when not to ('prefer invoking that skill instead'), and names the alternative with concrete reasons. This is a model example of routing guidance.

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.

  1. 16 tool updatesv1.0.9
    • First observedget_cv
    • First observedget_cv_pdf_link
    • First observedget_cv_sections
    • First observedget_entry
    • First observedget_entry_context
    • First observedget_google_scholar_link
    • First observedget_link
    • First observedget_relationships
    • First observedget_skill_profile
    • First observedget_tailored_cv
    • First observedlist_cv_sections
    • First observedlist_entry_ids
    • First observedlist_links
    • First observedquery_by_topic
    • First observedquery_work
    • First observedsummarize_cv

TDQS

A3.6/5.0

Scored across 16 tools

Disambiguation3/5

Most tools are distinct (list vs. query vs. get vs. summarize), but several overlap: query_by_topic and query_work both search by topic, and get_cv_pdf_link/get_google_scholar_link are convenience wrappers around get_link while get_cv can also return PDF. Descriptions help clarify the boundaries, but an agent could still misselect between related retrieval and link tools.

Naming Consistency5/5

All tool names use a consistent snake_case verb_noun or verb_object pattern: list_*, get_*, query_*, summarize_cv. The naming is highly predictable and makes it easy to guess the general purpose of a tool before reading the description.

Tool Count3/5

At 16 tools is just past the typical 3-15 well-scoped range, and the set includes redundant link/query variants such as get_cv_pdf_link, get_google_scholar_link, get_link, query_by_topic, and query_work. It is not extreme, but the surface feels slightly heavy for a read-only CV/resume server.

Completeness4/5

For a read-only CV retrieval and tailoring domain, the coverage is strong: raw CV formats, sections, individual entries, semantic context, skill profiles, relationships, links, and tailored CV rendering are all available. Minor gaps exist only in trimming redundancy rather than missing core functionality.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes a structured professional resume as a set of AI-queryable tools, enabling AI clients like Claude Desktop to query summary, experience, skills, projects, and tailor resumes to job descriptions.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for CVX, enabling AI assistants to create, validate, and build professional CV PDFs from YAML content, with tools for schema retrieval, project initialization, validation, and rendering.
    386 npm
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to query a person's CV and portfolio content via MCP tools and resources, returning grounded answers from local markdown data instead of relying on resume parsing.
    -