MCP Resume & Email Assistant
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Resume & Email AssistantParse my resume and send a summary to hiring@company.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Resume & Email Assistant
This is a Model Context Protocol (MCP) server that provides the following features:
Resume Parsing: Parse and extract information from your resume to answer questions about your professional experience.
Email Notifications: Send email notifications with customizable recipient, subject, and body.
Next.js Frontend: A beautiful, responsive UI for interacting with the MCP server.
GitHub Pages Deployment: The frontend is configured for easy deployment to GitHub Pages.
Live Demo
Check out the live demo at: https://ThambimuthuAnush24.github.io/mcp-server
Related MCP server: CV Email MCP Server
Project Structure
mcp-server/
├── src/
│ ├── index.ts # Main MCP server implementation
│ ├── localClient.ts # Test client for local development
│ ├── services/
│ │ ├── emailService.ts # Email service implementation
│ │ └── resumeService.ts # Resume parsing service
├── frontend/ # Next.js frontend application
│ ├── src/
│ │ ├── app/ # Next.js app directory
│ │ │ ├── api/ # API routes
│ │ │ ├── layout.tsx # Main layout
│ │ │ └── page.tsx # Main page
│ │ ├── components/ # React components
│ │ └── utils/ # Utility functions
├── .vscode/
│ └── mcp.json # VS Code MCP integration
├── .env # Environment variables (not committed)
├── package.json # Project dependencies
└── tsconfig.json # TypeScript configurationFeatures
📄 Resume Parser: Upload and analyze resumes with intelligent extraction
📧 Email Sender: Create and send professional emails with ease
💬 AI Assistant: Get intelligent answers to questions about your resume and career
🎨 Beautiful UI: Modern glass-morphism design with animations and responsive layout
🚀 GitHub Pages Deployment: Easy deployment to GitHub Pages
Technologies Used
Next.js 14: For the frontend with static export support
TypeScript: For type-safe code
Tailwind CSS: For beautiful, responsive styling
Model Context Protocol (MCP): For AI-powered features
GitHub Pages: For deployment
Prerequisites
Node.js v18 or higher
npm or yarn
Git
Setup Instructions
For Backend Development
Clone this repository
Install dependencies:
npm installCreate a
.envfile in the root directory with your email configurationBuild the project:
npm run buildStart the server:
npm start
For Frontend Development
Navigate to the frontend directory:
cd frontendInstall dependencies:
npm installStart the development server:
npm run devOpen http://localhost:3000 in your browser
GitHub Pages Deployment
This project is configured for deployment on GitHub Pages. Follow these steps to deploy:
Make sure you've pushed your code to GitHub:
git add . git commit -m "Ready for GitHub Pages deployment" git push origin mainRun the deployment script:
cd frontend npm run deploy
This will:
Build the Next.js application
Create the necessary
.nojekyllfileDeploy to the gh-pages branch
Make your site available at https://yourusername.github.io/mcp-server
GitHub Pages Mode
When running on GitHub Pages, the application automatically detects the environment and uses mock data instead of trying to call backend APIs that wouldn't be available in a static deployment.
MCP Tools Provided
parseResume
Parses a resume from text or PDF
Parameters:
text(optional): Plain text resume contentfileContent(optional): Base64-encoded PDF contentfileName(optional): Name of the PDF file
queryResume
Queries parsed resume data
Parameters:
query: The question to ask about the resumecontext(optional): Previous conversation history
sendEmail
Sends an email
Parameters:
to: Recipient email addresssubject: Email subjectbody: Email content
Local Development
Local Testing
The backend includes a local client for testing MCP tools:
npm run test:localDebugging
For debugging the MCP server:
Run in development mode:
npm run devCheck the console logs for any errors.
For frontend debugging, use the browser's developer tools.
License
MIT
Available Tools
3 toolsparseResumeParse ResumeC
Parse a resume file to extract information
| Name | Required | Description | Default |
|---|---|---|---|
| resumeText | Yes | The text content of the resume or a base64 encoded PDF |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It fails to disclose behavior on malformed input, output format, error handling, or required permissions. Minimal information provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence. It is appropriately concise for a simple tool, though it could be slightly expanded without losing focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should clarify what 'extract information' returns (e.g., structured data). It fails to cover return values, error cases, or the full context of operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes 'resumeText' as text or base64 PDF. The description adds no additional meaning beyond the schema, meeting baseline but not exceeding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Parse a resume file') and purpose ('extract information'). It is specific enough to distinguish from 'sendEmail', though it doesn't explicitly contrast with 'queryResume'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'queryResume'. No prerequisites, contexts, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryResumeQuery ResumeC
Ask a question about the resume content
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The question to ask about the resume |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden for behavioral disclosure. It only states 'ask a question' without revealing any behavioral traits, such as whether it requires prior state, how it handles ambiguous queries, or what the response format is. This is insufficient for an agent to predict tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), but it fails to include necessary details about usage or behavior. While front-loaded, it does not fully earn its place because it adds minimal value over the tool name. A more informative description would be preferable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and no output schema, the description could be more complete by explaining the expected source of resume content (e.g., from previously parsed data) or how to interpret responses. The current description leaves ambiguity, especially in relation to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the 'question' parameter has a description), so the baseline is 3. The tool description adds no new meaning beyond the schema; it essentially repeats the parameter description. However, it is not misleading and aligns with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Ask a question about the resume content' specifies a clear verb+resource pairing. It distinguishes from sibling tools, as 'parseResume' suggests parsing/reading the resume file, and 'sendEmail' is unrelated. However, it lacks detail about what 'the resume content' refers to (e.g., from a previously parsed resume).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidelines are provided about when to use this tool versus alternatives. It does not mention prerequisites (e.g., must first parse a resume) or when it is not appropriate to use. The description only states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendEmailSend EmailB
Send an email notification with customizable recipient, subject, and body
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address | |
| body | Yes | Email body content | |
| subject | Yes | Email subject |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It only says 'Send an email notification' without disclosing side effects (e.g., non-idempotent), potential failures, rate limits, or whether it actually dispatches or queues the email. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with 12 words, but it lacks detail. It is concise but under-informative; a slightly longer description with key constraints would be more helpful without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three required parameters, the description is partially complete. However, it omits important details like validation, error handling, and behavior (e.g., immediate send vs. queued). The lack of output schema also reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive field names and descriptions (e.g., 'Recipient email address'). The description adds no extra semantic value beyond stating the parameters are customizable, which is already implied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it sends an email notification with customizable recipient, subject, and body. It explicitly names the resource (email) and action (send), and the sibling tools (parseResume, queryResume) are for different tasks, so no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use or not use this tool, such as prerequisites (e.g., valid email address), alternatives, or context (e.g., only for notifications). The sibling tools are unrelated, but no explicit differentiation is provided.
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.
3 tool updates
v1.0.0- First observed
parseResume - First observed
queryResume - First observed
sendEmail
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: parseResume for extracting data, sendEmail for sending notifications, and queryResume for asking questions. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern in camelCase (parseResume, sendEmail, queryResume), making it predictable for agents to understand their actions.
With three tools, the server is well-scoped for its stated purpose of resume parsing and email assistance. Neither too sparse nor excessive.
The tool set covers the core workflow: parse a resume, query it, and send email. Missing features like updating or deleting resume data, but the surface is functional for its focused domain.
Maintenance
Related MCP Connectors
Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
7 recruiting tools over one MCP endpoint: ATS boards, LinkedIn jobs, profiles, companies, Naukri.
isolved and ApplicantPro jobs, tenant discovery, and change detection as an MCP server.
GetJobzi MCP server for job search, application tracking, and career forecasting.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables chat-based interaction with resume data and sending email notifications via MCP tools.205MIT
- FlicenseAqualityDmaintenanceEnables CV parsing from PDF resumes and sending email notifications with customizable recipients.3-
- FlicenseAqualityCmaintenanceEnables searching job listings, tracking applications, managing resumes, and tailoring resumes to job posts, all locally via MCP.20-
- FlicenseNot gradedqualityBmaintenanceProvides MCP tools for job search, inbound recruiter activity triage, conversation inbox access, and guarded profile updates.-