Skip to main content
Glama

Edit Base Resume

edit_base_resume
Destructive

Apply typed edits to a base resume—update entries, bullets, skills, contacts, and sections—then automatically re-render the PDF for tailored applications.

Instructions

Apply typed edit ops to a base resume. replace_entry changes a field on one entry (dates, title, company, project name, link, tech) given that entry's index and the full edited entry; update_base_resume instead replaces the whole resume body (PUT). ExtraSection shape is on ops (ATS-neutral).

Indices are 0-based into the FULL array (incl. enabled:false), as returned by get_base_resume, never PDF order. Response applied echoes each op. Kinds:

  • {"kind":"replace_summary","value":str|null,"expected_content_hash"?:str}

  • {"kind":"toggle_entry","section":"experience"|"projects","index":int,"enabled":bool}

  • {"kind":"replace_bullet","section":,"index":int,"bullet_index":int,"value":str,"expected_content_hash"?:str}

  • {"kind":"replace_skills_group","category":str,"items":[str]} (case-insensitive)

  • {"kind":"add_skill_item","category":str,"item":str}

  • {"kind":"add_bullet","section":"experience"|"projects","index":int,"text":str}

  • {"kind":"add_entry","section":,"value":} (appends)

  • {"kind":"replace_entry","section":,"index":int,"value":} (one indexed entry only)

  • {"kind":"remove_entry","section":,"index":int}

  • {"kind":"remove_bullet","section":,"index":int,"bullet_index":int}

  • {"kind":"replace_contact","value":}

  • {"kind":"replace_certifications","items":[str]}

  • {"kind":"add_extra_section","value":}

  • {"kind":"replace_extra_section","section_key":str,"value":} (key may not change)

  • {"kind":"remove_extra_section","section_key":str}

  • {"kind":"move_extra_section","section_key":str,"to_index":int} =experience|projects|education (toggle_entry/add_bullet: experience|projects). section_key is ExtraSection.key. Bad index/category/key → error. Re-renders PDF. Every response carries render_error: non-null means the automatic re-render failed and the existing PDF is stale.

Input Schema

NameRequiredDescriptionDefault
opsYesTyped edit ops. Each is an object with a `kind`, one of: replace_summary | toggle_entry | replace_bullet | replace_skills_group | add_skill_item | add_bullet | add_entry | replace_entry | remove_entry | remove_bullet | replace_contact | replace_certifications | add_extra_section | replace_extra_section | remove_extra_section | move_extra_section. To change a field ON an entry — dates, title, company, project name, link, tech — use replace_entry with that entry's index and the full edited entry object; it is scoped to that one entry (a whole-resume replace is the separate update_base_resume tool). See the tool description for each op's shape. add_extra_section/replace_extra_section `value` is {key,title,enabled,type:"entries"|"bullets"} plus EITHER entries:[{heading,subheading?,location?,date?,link?,enabled,bullets:[str]}] OR bullets:[str] — never both; unknown keys are rejected (400, extra="forbid"). Text the ops write is implied first person: a line with I/he/she/they or the owner's name is a 400 naming the lines, and nothing is written.
slugYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.12.0
    • changedInput schema / properties / ops / description
      Previous value: -"Typed edit ops. Each is an object with a `kind`, one of: replace_summary | toggle_entry | replace_bullet | replace_skills_group | add_skill_item | add_bullet | add_entry | replace_entry | remove_entry | remove_bullet | replace_contact | replace_certifications | add_extra_section | replace_extra_section | remove_extra_section | move_extra_section. To change a field ON an entry — dates, title, company, project name, link, tech — use replace_entry with that entry's index and the full edited entry object; it is scoped to that one entry (a whole-resume replace is the separate update_base_resume tool). See the tool description for each op's shape. add_extra_section/replace_extra_section `value` is {key,title,enabled,type:\"entries\"|\"bullets\"} plus EITHER entries:[{heading,subheading?,location?,date?,link?,enabled,bullets:[str]}] OR bullets:[str] — never both; unknown keys are rejected (400, extra=\"forbid\")."New value: +"Typed edit ops. Each is an object with a `kind`, one of: replace_summary | toggle_entry | replace_bullet | replace_skills_group | add_skill_item | add_bullet | add_entry | replace_entry | remove_entry | remove_bullet | replace_contact | replace_certifications | add_extra_section | replace_extra_section | remove_extra_section | move_extra_section. To change a field ON an entry — dates, title, company, project name, link, tech — use replace_entry with that entry's index and the full edited entry object; it is scoped to that one entry (a whole-resume replace is the separate update_base_resume tool). See the tool description for each op's shape. add_extra_section/replace_extra_section `value` is {key,title,enabled,type:\"entries\"|\"bullets\"} plus EITHER entries:[{heading,subheading?,location?,date?,link?,enabled,bullets:[str]}] OR bullets:[str] — never both; unknown keys are rejected (400, extra=\"forbid\"). Text the ops write is implied first person: a line with I/he/she/they or the owner's name is a 400 naming the lines, and nothing is written."
  2. First observedv0.11.1

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that the tool re-renders the PDF, that every response carries render_error (non-null = stale PDF), that ops write implied first-person text and otherwise 400 with nothing written, and that expected_content_hash supports concurrency checks. These are the mutation side effects an agent needs and are not in 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.

Conciseness4/5

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

Front-loads the core distinction and index convention before the op list, and the op list is dense but each line earns its place. There is mild duplication between the description's kind list and the `ops` schema description, which keeps it from being maximally tight.

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 still tells the agent what comes back (`applied` echo and `render_error`), and it covers validation and index semantics. The undocumented `slug` param and an incomplete picture of the full response shape are the only shortfalls.

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 only 50%, and the description carries the burden for `ops` by enumerating every kind's shape, the <sec> enum values, the ExtraSection key/entries-or-bullets constraint, and the move_extra_section key-immutability rule. The `slug` parameter is never explained in either place, which is the remaining gap.

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 ('Apply typed edit ops to a base resume') and immediately distinguishes it from the sibling update_base_resume, which replaces the whole body. An agent can tell the two apart without opening either 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?

Explicitly says to use replace_entry for field-level changes on one entry versus update_base_resume for a whole-body PUT, and states indices are 0-based into the FULL array as returned by get_base_resume, never PDF order. It also names the failure conditions (bad index/category/key → error).

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

Deploy Server

Other Tools