Skip to main content
Glama

generate_resume_from_text

Convert resume text into professional PDF resumes with customizable templates. Provide your resume content to generate formatted PDF files without manual JSON processing.

Instructions

一键将简历文本转换为精美PDF简历,支持多种模板。只需提供简历文本内容,系统会自动进行格式转换并生成专业PDF文件,无需手动处理JSON数据。可选择不同简历模板和定制选项。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
resumeTextYes
templateNameNo
optionsNo

Implementation Reference

  • Main handler function for 'generate_resume_from_text' tool. Converts resume text to JSON Resume format using NovaCVService, extracts the data, then generates PDF resume, and returns the result.
    async ({ resumeText, templateName = "elite", options = {} }, extra) => { if (!resumeText) { throw new Error("简历文本是必需的"); } try { // 第一步:将文本转换为JSON Resume格式 const convertResult = await novaCVService.convertTextToJsonResume(resumeText); // 调试输出API响应结构 console.log("转换API响应:", JSON.stringify(convertResult, null, 2)); if (!convertResult || convertResult.error) { return { content: [ { type: "text", text: `转换简历文本失败: ${convertResult?.error?.message || convertResult?.message || "未知错误"}` } ], }; } // 根据实际API响应结构获取简历数据 // 尝试多种可能的路径 let resumeData = null; if (convertResult.data && convertResult.data.resumeData) { resumeData = convertResult.data.resumeData; } else if (convertResult.data && convertResult.data.jsonResume) { // 处理API返回的jsonResume路径 resumeData = convertResult.data.jsonResume; } else if (convertResult.resumeData) { resumeData = convertResult.resumeData; } else if (convertResult.jsonResume) { resumeData = convertResult.jsonResume; } else if (typeof convertResult === 'object' && Object.keys(convertResult).length > 0) { // 如果响应本身就是简历数据对象 if (convertResult.basics || convertResult.work || convertResult.education) { resumeData = convertResult; } } // 检查是否获取到简历数据 if (!resumeData) { // 输出完整响应以帮助调试 return { content: [ { type: "text", text: `转换成功但无法获取简历数据。API响应:\n${JSON.stringify(convertResult, null, 2)}` } ], }; } // 第二步:使用JSON Resume数据生成PDF console.log("使用以下数据生成PDF:", JSON.stringify(resumeData, null, 2)); const generateResult = await novaCVService.generateResume(resumeData, templateName, options); return { content: [ { type: "text", text: safeStringify(generateResult) } ], }; } catch (error: any) { return { content: [ { type: "text", text: `错误: ${error.message || "未知错误"}` } ], }; } }
  • Zod input schema for the tool: resumeText (required string), optional templateName (string), optional options (object).
    { resumeText: z.string(), templateName: z.string().optional(), options: z.object({}).optional() },
  • src/index.ts:113-199 (registration)
    Registration of the 'generate_resume_from_text' tool using server.tool(), including description, schema, and inline handler.
    server.tool( "generate_resume_from_text", "一键将简历文本转换为精美PDF简历,支持多种模板。只需提供简历文本内容,系统会自动进行格式转换并生成专业PDF文件,无需手动处理JSON数据。可选择不同简历模板和定制选项。", { resumeText: z.string(), templateName: z.string().optional(), options: z.object({}).optional() }, async ({ resumeText, templateName = "elite", options = {} }, extra) => { if (!resumeText) { throw new Error("简历文本是必需的"); } try { // 第一步:将文本转换为JSON Resume格式 const convertResult = await novaCVService.convertTextToJsonResume(resumeText); // 调试输出API响应结构 console.log("转换API响应:", JSON.stringify(convertResult, null, 2)); if (!convertResult || convertResult.error) { return { content: [ { type: "text", text: `转换简历文本失败: ${convertResult?.error?.message || convertResult?.message || "未知错误"}` } ], }; } // 根据实际API响应结构获取简历数据 // 尝试多种可能的路径 let resumeData = null; if (convertResult.data && convertResult.data.resumeData) { resumeData = convertResult.data.resumeData; } else if (convertResult.data && convertResult.data.jsonResume) { // 处理API返回的jsonResume路径 resumeData = convertResult.data.jsonResume; } else if (convertResult.resumeData) { resumeData = convertResult.resumeData; } else if (convertResult.jsonResume) { resumeData = convertResult.jsonResume; } else if (typeof convertResult === 'object' && Object.keys(convertResult).length > 0) { // 如果响应本身就是简历数据对象 if (convertResult.basics || convertResult.work || convertResult.education) { resumeData = convertResult; } } // 检查是否获取到简历数据 if (!resumeData) { // 输出完整响应以帮助调试 return { content: [ { type: "text", text: `转换成功但无法获取简历数据。API响应:\n${JSON.stringify(convertResult, null, 2)}` } ], }; } // 第二步:使用JSON Resume数据生成PDF console.log("使用以下数据生成PDF:", JSON.stringify(resumeData, null, 2)); const generateResult = await novaCVService.generateResume(resumeData, templateName, options); return { content: [ { type: "text", text: safeStringify(generateResult) } ], }; } catch (error: any) { return { content: [ { type: "text", text: `错误: ${error.message || "未知错误"}` } ], }; } } );
  • Helper method in NovaCVService that calls the API to convert plain resume text to structured JSON Resume format.
    async convertTextToJsonResume(resumeText: string): Promise<any> { try { console.log("开始转换简历文本为JSON格式"); const response = await this.client.post('/api/v1/resumes/convert-text', { resumeText }); console.log("转换API响应状态码:", response.status); console.log("转换API响应头:", JSON.stringify(response.headers, null, 2)); console.log("转换API响应数据类型:", typeof response.data); // 如果直接返回简历数据,自动包装为标准格式 if (response.data && typeof response.data === 'object') { // 检查是否缺少标准响应结构 if (!response.data.success && !response.data.data && !response.data.error) { // 检查是否是简历数据结构 if (response.data.basics || response.data.work || response.data.education) { return { success: true, data: { jsonResume: response.data } }; } } // 标准化响应 - 确保jsonResume数据在一致的位置 else if (response.data.success && response.data.data) { // 如果有data.resumeData但没有data.jsonResume,复制数据 if (response.data.data.resumeData && !response.data.data.jsonResume) { response.data.data.jsonResume = response.data.data.resumeData; } // 如果有data.jsonResume但没有data.resumeData,复制数据 else if (response.data.data.jsonResume && !response.data.data.resumeData) { response.data.data.resumeData = response.data.data.jsonResume; } } } return response.data; } catch (error) { console.error("转换简历文本失败:", error); this._handleError(error); throw error; } }
  • Helper method in NovaCVService that calls the API to generate PDF resume from JSON Resume data using specified template.
    async generateResume( resumeData: any, templateName: string = 'elite', options: any = {} ): Promise<any> { try { // 基本检查,确保数据不为空 if (!resumeData) { throw new Error("resumeData 不能为空"); } // 确保resumeData是对象格式 let processedResumeData: any; if (typeof resumeData === 'string') { try { processedResumeData = JSON.parse(resumeData); } catch (e: any) { throw new Error(`无法解析resumeData字符串为JSON: ${e.message}`); } } else { processedResumeData = resumeData; } // 构建请求数据对象 const requestData = { resumeData: processedResumeData, templateName, options }; // 发送请求到NovaCV API const response = await this.client.post('/api/v1/resumes/generate', requestData); return response.data; } catch (error) { this._handleError(error); throw error; } }

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/HireTechUpUp/mcp-server-novacv'

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