Skip to main content
Glama

create_resume

Generate professional LaTeX resumes using customizable templates or custom content, with automatic file creation and PDF generation support.

Instructions

Create a new LaTeX resume file.

Args:
    filename: Name for the new resume file (with or without .tex extension)
    content: Full LaTeX content for the resume. If not provided, uses a template.
    template: Template to use if content not provided. Options: 'modern', 'classic', 'minimal'

Returns confirmation of file creation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filenameYes
contentNo
templateNomodern

Implementation Reference

  • The core handler function for the 'create_resume' tool. Decorated with @mcp.tool() to register it with the MCP server. Creates a new LaTeX resume .tex file in the configured directory, using either custom content or one of the built-in templates (modern, classic, minimal). Handles file existence checks and errors.
    @mcp.tool()
    def create_resume(filename: str, content: str = None, template: str = "modern") -> str:
        """
        Create a new LaTeX resume file.
    
        Args:
            filename: Name for the new resume file (with or without .tex extension)
            content: Full LaTeX content for the resume. If not provided, uses a template.
            template: Template to use if content not provided. Options: 'modern', 'classic', 'minimal'
    
        Returns confirmation of file creation.
        """
        ensure_dirs()
        filepath = get_resumes_dir() / ensure_tex_extension(filename)
    
        if filepath.exists():
            return json.dumps({"error": f"Resume '{filename}' already exists. Use edit_resume to modify it."})
    
        if content:
            resume_content = content
        elif template in LATEX_TEMPLATES:
            resume_content = LATEX_TEMPLATES[template]
        else:
            return json.dumps({"error": f"Unknown template '{template}'. Available: modern, classic, minimal"})
    
        try:
            filepath.write_text(resume_content, encoding="utf-8")
            return json.dumps({"success": True, "path": str(filepath), "template_used": template if not content else "custom"})
        except Exception as e:
            return json.dumps({"error": f"Error creating file: {str(e)}"})
  • Function signature with type hints and comprehensive docstring defining input parameters and return value, serving as the tool schema for MCP.
    def create_resume(filename: str, content: str = None, template: str = "modern") -> str:
        """
        Create a new LaTeX resume file.
    
        Args:
            filename: Name for the new resume file (with or without .tex extension)
            content: Full LaTeX content for the resume. If not provided, uses a template.
            template: Template to use if content not provided. Options: 'modern', 'classic', 'minimal'
    
        Returns confirmation of file creation.
  • Dictionary of built-in LaTeX resume templates used by create_resume when no custom content is provided.
    LATEX_TEMPLATES = {
        "modern": r"""\documentclass[11pt,a4paper]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{geometry}
    \usepackage{hyperref}
    \usepackage{titlesec}
    \usepackage{enumitem}
    \usepackage{xcolor}
    
    \geometry{left=0.75in, right=0.75in, top=0.5in, bottom=0.5in}
    \pagestyle{empty}
    
    % Colors
    \definecolor{primary}{RGB}{0, 79, 144}
    \definecolor{secondary}{RGB}{89, 89, 89}
    
    % Section formatting
    \titleformat{\section}{\large\bfseries\color{primary}}{}{0em}{}[\titlerule]
    \titlespacing{\section}{0pt}{12pt}{6pt}
    
    % Custom commands
    \newcommand{\resumeItem}[1]{\item\small{#1}}
    \newcommand{\resumeSubheading}[4]{
      \item
        \begin{tabular*}{\textwidth}[t]{l@{\extracolsep{\fill}}r}
          \textbf{#1} & #2 \\
          \textit{\small#3} & \textit{\small#4} \\
        \end{tabular*}\vspace{-5pt}
    }
    
    \begin{document}
    
    % Header
    \begin{center}
        {\LARGE\bfseries YOUR NAME}\\[4pt]
        \href{mailto:email@example.com}{email@example.com} $|$
        (123) 456-7890 $|$
        \href{https://linkedin.com/in/yourprofile}{LinkedIn} $|$
        \href{https://github.com/yourusername}{GitHub}
    \end{center}
    
    \section{Experience}
    \begin{itemize}[leftmargin=0.15in, label={}]
    \resumeSubheading
        {Company Name}{City, State}
        {Job Title}{Start Date -- End Date}
        \begin{itemize}[leftmargin=0.2in]
            \resumeItem{Accomplishment or responsibility}
            \resumeItem{Another accomplishment}
        \end{itemize}
    \end{itemize}
    
    \section{Education}
    \begin{itemize}[leftmargin=0.15in, label={}]
    \resumeSubheading
        {University Name}{City, State}
        {Degree, Major}{Graduation Date}
    \end{itemize}
    
    \section{Skills}
    \begin{itemize}[leftmargin=0.15in, label={}]
        \item \textbf{Programming:} Python, JavaScript, Java, C++
        \item \textbf{Tools:} Git, Docker, AWS, Linux
    \end{itemize}
    
    \end{document}
    """,
        "classic": r"""\documentclass[11pt,letterpaper]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{geometry}
    \usepackage{hyperref}
    \usepackage{enumitem}
    
    \geometry{margin=1in}
    \pagestyle{empty}
    
    \begin{document}
    
    \begin{center}
        {\Large\textbf{YOUR NAME}}\\[6pt]
        Address Line $\bullet$ City, State ZIP\\
        Phone: (123) 456-7890 $\bullet$ Email: email@example.com
    \end{center}
    
    \vspace{12pt}
    
    \noindent\textbf{\large OBJECTIVE}\\
    \rule{\textwidth}{0.4pt}\\[3pt]
    A brief statement about your career objectives.
    
    \vspace{12pt}
    
    \noindent\textbf{\large EDUCATION}\\
    \rule{\textwidth}{0.4pt}\\[3pt]
    \textbf{University Name} \hfill City, State\\
    Degree, Major \hfill Graduation Date\\
    GPA: X.XX
    
    \vspace{12pt}
    
    \noindent\textbf{\large EXPERIENCE}\\
    \rule{\textwidth}{0.4pt}\\[3pt]
    \textbf{Company Name} \hfill City, State\\
    \textit{Job Title} \hfill Start Date -- End Date
    \begin{itemize}[leftmargin=0.2in, topsep=0pt]
        \item Accomplishment or responsibility
        \item Another accomplishment
    \end{itemize}
    
    \vspace{12pt}
    
    \noindent\textbf{\large SKILLS}\\
    \rule{\textwidth}{0.4pt}\\[3pt]
    \textbf{Technical:} List of technical skills\\
    \textbf{Languages:} Languages you speak
    
    \end{document}
    """,
        "minimal": r"""\documentclass[11pt]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[margin=0.75in]{geometry}
    \usepackage{hyperref}
    \usepackage{enumitem}
    
    \pagestyle{empty}
    \setlength{\parindent}{0pt}
    
    \begin{document}
    
    \textbf{\Large YOUR NAME}\\[4pt]
    email@example.com $|$ (123) 456-7890 $|$ City, State
    
    \vspace{12pt}
    \textbf{Experience}\hrulefill\\[6pt]
    \textbf{Job Title}, Company Name \hfill Dates\\
    \begin{itemize}[leftmargin=0.15in, topsep=0pt, parsep=0pt]
    \item Accomplishment
    \end{itemize}
    
    \vspace{8pt}
    \textbf{Education}\hrulefill\\[6pt]
    \textbf{Degree}, University Name \hfill Graduation Date
    
    \vspace{8pt}
    \textbf{Skills}\hrulefill\\[6pt]
    Skill 1, Skill 2, Skill 3
    
    \end{document}
    """,
    }
  • Helper function called by create_resume to ensure the resumes directory exists.
    def ensure_dirs():
        """Ensure resume and template directories exist."""
        get_resumes_dir().mkdir(parents=True, exist_ok=True)
        get_templates_dir().mkdir(parents=True, exist_ok=True)
  • @mcp.tool() decorator that registers the create_resume function with the FastMCP server instance.
    @mcp.tool()
    def create_resume(filename: str, content: str = None, template: str = "modern") -> str:

Latest Blog Posts

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/dannywillowliu-uchi/resume_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server