resume-parser-mcp
Version:
To install dependencies:
73 lines (72 loc) • 2.88 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResumeParser = exports.parameters = exports.description = exports.name = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const zod_1 = require("zod");
const downloadFileFromUrl_1 = require("../parser/downloadFileFromUrl");
const extractFileText_1 = require("../parser/extractFileText");
const parseTextToResume_1 = require("../parser/parseTextToResume");
const logger_1 = require("../utils/logger");
const fsPromises = fs_1.default.promises;
const name = 'resume_parser';
exports.name = name;
const description = 'Parses a resume and returns a JSON object';
exports.description = description;
const parameters = zod_1.z.object({
resume_url: zod_1.z.string(),
});
exports.parameters = parameters;
const ResumeParser = {
name,
description,
parameters,
execute: async ({ resume_url }, { log }) => {
const logger = (0, logger_1.useLogger)(log);
let tempFilePath = null;
try {
// 1. 下载文件到临时目录
tempFilePath = await (0, downloadFileFromUrl_1.downloadFile)(resume_url);
logger.info('文件下载成功:', tempFilePath);
// 2. 根据文件扩展名提取文本
let text = '';
const fileExtension = path_1.default.extname(tempFilePath).toLowerCase();
if (fileExtension === '.pdf') {
text = await (0, extractFileText_1.extractTextFromPdf)(tempFilePath);
}
else if (fileExtension === '.docx') {
text = await (0, extractFileText_1.extractTextFromDocx)(tempFilePath);
}
else {
throw new Error(`不支持的文件格式: ${fileExtension}。请使用PDF或DOCX格式。`);
}
if (!text) {
throw new Error('无法从文件中提取文本内容');
}
// 3. 解析文本为JSONResume格式
const resume = (0, parseTextToResume_1.parseTextToResume)(text);
return resume;
}
catch (error) {
logger.error('简历解析失败:', error?.message);
throw error;
}
finally {
// 4. 清理临时文件
if (tempFilePath) {
try {
await fsPromises.unlink(tempFilePath);
logger.info('临时文件已清理');
}
catch (cleanupError) {
logger.warn('临时文件清理失败:', cleanupError?.message);
}
}
}
},
};
exports.ResumeParser = ResumeParser;
exports.default = ResumeParser;