Resume MCP Server

Resume MCP Server

Exposes a structured professional resume as a set of AI-queryable tools, enabling AI clients like Claude Desktop to query summary, experience, skills, projects, and tailor resumes to job descriptions.

Category
Visit Server

README

Resume MCP Server

AI-powered Resume MCP Server built with the Model Context Protocol (MCP), TypeScript, Express, and the official MCP SDK.

Expose resume information as structured AI tools over both stdio and HTTP transports for seamless integration with MCP-compatible AI clients.

TypeScript Node.js MCP SDK Express Render


๐ŸŒ Live Deployment

Endpoint URL
MCP Endpoint https://resume-mcp-server-z04b.onrender.com/mcp
Health Check https://resume-mcp-server-z04b.onrender.com/health
Deployment Platform Render (Free Tier)

๐Ÿ’ก Why This Project?

Although a resume can easily be uploaded as a PDF, this project demonstrates how structured information can be exposed to AI applications using the Model Context Protocol.

Instead of treating the resume as an unstructured document, AI clients can retrieve specific information through dedicated tools โ€” skills, projects, education, experience, keyword search, and resume tailoring โ€” with structured, predictable responses.

The same architecture can be extended to enterprise systems like HR platforms, CRMs, hospital databases, ERP systems, and internal business applications.

This is exactly why MCP exists โ€” to give AI agents structured, programmatic access to data sources instead of relying on raw document parsing.


โœ… Project Highlights

โœ” Built using the official MCP SDK
โœ” Supports both stdio and HTTP/Streamable transports
โœ” Deployed on Render with a live public endpoint
โœ” Integrated with Claude Desktop (stdio)
โœ” Integrated with Cursor AI (HTTP)
โœ” 8 fully functional AI Tools
โœ” Full TypeScript implementation with Zod validation
โœ” Automated test suite โ€” 16/16 stdio + 6/6 HTTP tests passing

๐Ÿ—๏ธ Architecture

Local (stdio Transport)

Claude Desktop
      โ”‚
      โ”‚  stdin / stdout (stdio)
      โ”‚
Resume MCP Server  (node dist/stdioMain.js)
      โ”‚
      โ”‚  reads
      โ”‚
  resume.json

Remote (HTTP Transport)

Cursor AI / Claude Desktop / Any MCP Client
      โ”‚
      โ”‚  POST /mcp  (HTTP + Streamable)
      โ”‚
   Render.com
      โ”‚
Resume MCP Server  (node dist/httpMain.js)
      โ”‚
      โ”‚  reads
      โ”‚
  resume.json

๐Ÿงช Tested AI Clients

Client Transport Status
Claude Desktop stdio โœ… Tested & Working
Cursor AI HTTP โœ… Tested & Working
Render Deployment HTTP/Streamable โœ… Tested & Working
MCP Inspector stdio โœ… Tested & Working
Claude Web โ€” โš ๏ธ Currently doesn't support arbitrary custom MCP servers
ChatGPT โ€” โš ๏ธ Currently doesn't support connecting to custom MCP servers

๐ŸŒ Possible Business Use Cases

This architecture can be adapted far beyond a personal resume:

Use Case Description
Employee Database MCP HR teams query employee skills, roles, and history via AI
Hospital Records MCP AI retrieves patient records, appointments, or prescriptions
CRM Assistant AI queries customer data, leads, and deal history
HR Recruitment Assistant AI screens candidates and matches JDs to profiles
ERP Systems AI fetches inventory, orders, and financial records
Knowledge Base AI searches internal company documentation
Company Documentation AI answers policy and process questions
GitHub Repository Assistant AI queries codebase structure, contributors, and issues

The MCP architecture in this project is the same pattern used in all of these enterprise scenarios.


โœจ Features

Feature Description
8 MCP Tools Query summary, experience, skills, projects, education, search, fetch by ID, and tailor resume to a JD
Two Transport Modes stdio (local, zero-config) and HTTP/Streamable (remote, deployable)
Resume Tailoring Rule-based keyword overlap analysis โ€” matches your resume against any job description
Full-Text Search Search across all resume sections with stable IDs for drill-down
Optional API Key Auth Protect your HTTP endpoint with x-api-key header validation
Health Check Endpoint GET /health for uptime monitoring and deployment health checks
Type-Safe Written in strict TypeScript with Zod schema validation

๐Ÿ› ๏ธ Available Tools

getSummary

Returns the candidate's name, professional title, summary, and contact information.

  • Parameters: None
  • Example prompt: "What is this candidate's professional summary?"

getExperience

Returns work experience history. Optionally filter by company name (case-insensitive partial match).

  • Parameters: company (optional string) โ€” e.g. "RBrickks"
  • Example prompt: "What companies has this person worked at?"

getSkills

Returns skills organized by category. Optionally filter to a specific category.

  • Parameters: category (optional enum) โ€” "languages" | "frameworks" | "tools" | "soft"
  • Example prompt: "What programming languages does this candidate know?"

getProjects

Returns projects built by the candidate. Optionally filter by technology stack tag.

  • Parameters: tag (optional string) โ€” e.g. "Angular", "Spring Boot"
  • Example prompt: "Show me projects that use Angular"

getEducation

Returns the academic education history with degrees, institutions, and grades.

  • Parameters: None
  • Example prompt: "Where did this candidate study?"

search

Full-text search across all resume sections โ€” summary, experience bullets, skills, project descriptions, and education. Returns stable IDs that can be passed to fetch for full details.

  • Parameters: query (required string) โ€” e.g. "Spring Boot", "automation"
  • Example prompt: "Search the resume for anything related to security"

fetch

Fetches the complete details of a specific resume section by its stable ID (returned by search).

  • Parameters: id (required string) โ€” e.g. "summary", "experience-0", "projects-1", "skills", "education-2"
  • Example prompt: "Get the full details for experience-0"

tailorResume

Analyzes a job description and ranks the most relevant skills, experience bullets, and projects by keyword overlap. Purely rule-based โ€” no external AI dependency.

  • Parameters: jobDescription (required string) โ€” the full text of a job posting
  • Example prompt: "Here's a job description for a Java backend role at Google: [paste JD]. How well does this resume match?"

๐Ÿ“ฆ Prerequisites

  • Node.js v18 or higher
  • npm (included with Node.js)

๐Ÿš€ Installation

# Clone the repository
git clone https://github.com/Adarshcharjan/resume-mcp-server.git
cd resume-mcp-server

# Install dependencies
npm install

# Build TypeScript to JavaScript
npm run build

โ–ถ๏ธ Running the Server

Option 1: stdio Transport (Local)

Designed for direct integration with AI clients running on the same machine (e.g., Claude Desktop). The client launches the server process and communicates via standard input/output.

npm run dev:stdio

Option 2: HTTP Transport (Local or Remote)

Runs as a standard web server. Use this for remote deployment or when the AI client connects over HTTP.

npm run dev:http

The server starts at http://localhost:3000 with:

  • MCP endpoint: POST http://localhost:3000/mcp
  • Health check: GET http://localhost:3000/health

๐Ÿ” API Key Authentication

The HTTP server supports optional API-key authentication.

If RESUME_MCP_API_KEY is set in your environment variables, every request to /mcp must include the header:

x-api-key: your-secret-key

Otherwise the server runs in public mode (no authentication required).

Setting it up:

# Copy the example env file
cp .env.example .env

Edit .env:

PORT=3000
RESUME_MCP_API_KEY=your_custom_secret_key_here

When the API key is active, Claude Desktop config must include it:

{
  "mcpServers": {
    "resume": {
      "type": "streamable-http",
      "url": "https://your-server.onrender.com/mcp",
      "headers": {
        "x-api-key": "your_custom_secret_key_here"
      }
    }
  }
}

๐Ÿ”Œ Integrating with MCP-Compatible AI Clients

Claude Desktop

Claude Desktop supports MCP natively. You can connect using either transport mode.

stdio (Recommended for Local Use)

  1. Open your Claude Desktop configuration file:

    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Linux: ~/.config/Claude/claude_desktop_config.json
  2. Add the mcpServers entry (create the file if it doesn't exist):

{
  "mcpServers": {
    "resume": {
      "command": "node",
      "args": ["/absolute/path/to/resume-mcp-server/dist/stdioMain.js"]
    }
  }
}

โš ๏ธ Windows users: Use double backslashes in the path: "D:\\Study\\Resume _MCP_server\\dist\\stdioMain.js"

  1. Restart Claude Desktop completely (quit from system tray, then reopen).

  2. Start a new chat. The hammer ๐Ÿ”จ tools icon near the chat input will show all 8 resume tools.

HTTP / Streamable (Remote Server)

{
  "mcpServers": {
    "resume": {
      "type": "streamable-http",
      "url": "https://resume-mcp-server-z04b.onrender.com/mcp"
    }
  }
}

Cursor AI

  1. Open Cursor Settings โ†’ MCP (or Ctrl+Shift+P โ†’ "MCP: Add Server").

  2. Add a new server:

    stdio:

    {
      "resume": {
        "command": "node",
        "args": ["/absolute/path/to/resume-mcp-server/dist/stdioMain.js"]
      }
    }
    

    HTTP (Recommended โ€” uses the live Render deployment):

    {
      "resume": {
        "type": "streamable-http",
        "url": "https://resume-mcp-server-z04b.onrender.com/mcp"
      }
    }
    
  3. The resume tools will be available in Cursor's AI chat immediately.


VS Code + GitHub Copilot

  1. Create or edit .vscode/mcp.json in your workspace:
{
  "servers": {
    "resume": {
      "command": "node",
      "args": ["/absolute/path/to/resume-mcp-server/dist/stdioMain.js"]
    }
  }
}
  1. Open GitHub Copilot Chat in Agent mode โ€” the resume tools will be available.

Windsurf

  1. Open Windsurf Settings โ†’ MCP.

  2. Add a new server:

{
  "resume": {
    "type": "streamable-http",
    "url": "https://resume-mcp-server-z04b.onrender.com/mcp"
  }
}

MCP Inspector (Testing & Debugging)

The MCP Inspector is a visual tool for testing MCP servers without any AI client.

npx @modelcontextprotocol/inspector

When the Inspector UI opens in your browser:

  1. Set Transport Type โ†’ STDIO
  2. Set Command โ†’ node
  3. Set Arguments โ†’ dist/stdioMain.js
  4. Click Connect

All 8 tools will appear. Click any tool, fill in parameters, and hit Run to see live JSON responses.


โ˜๏ธ Deployment on Render

This project is deployed on Render using the HTTP Streamable transport.

Configuration

Setting Value
Runtime Node
Build Command npm install && npm run build
Start Command npm start
Plan Free

Environment Variables on Render

Variable Value
PORT 3000
RESUME_MCP_API_KEY (your secret key โ€” optional)

Note: Render's free tier spins down after 15 minutes of inactivity. The first request after a cold start may take ~30 seconds to respond.


๐Ÿงช Testing

Automated Test Suite โ€” stdio (16 test cases)

npm run build
node test-all-tools.mjs

Expected output:

โœ“ PASS  1. getSummary โ€” Name: Adarsh Charjan | Title: Junior Software Developer
โœ“ PASS  2. getExperience โ€” Jobs returned: 3
โœ“ PASS  3. getExperience โ€” filter "RBrickks" โ†’ 2 jobs
โœ“ PASS  4. getSkills โ€” Languages: Java, SQL, HTML, CSS
โœ“ PASS  5. getSkills โ€” filter "frameworks" โ†’ Spring Boot, Spring MVC, Hibernate, Angular, REST APIs
โœ“ PASS  6. getProjects โ€” 2 projects returned
โœ“ PASS  7. getProjects โ€” filter "Angular" โ†’ WELLCARE Hospital Management System
โœ“ PASS  8. getEducation โ€” B.Tech, HSC, SSC
โœ“ PASS  9. search "Spring Boot" โ€” 4 matches
โœ“ PASS 10. search "automation" โ€” 2 matches
โœ“ PASS 11. fetch "summary" โ€” Professional Summary
โœ“ PASS 12. fetch "experience-0" โ€” Junior Software Developer at RBrickks Technology
โœ“ PASS 13. fetch "projects-1" โ€” WELLCARE Hospital Management System
โœ“ PASS 14. fetch "skills" โ€” Skills and Technologies
โœ“ PASS 15. tailorResume โ€” Matched languages: [Java, SQL] | Top bullet score: 7
โœ“ PASS 16. fetch invalid id โ€” Graceful error handling

Results: 16 passed  0 failed  / 16 total  ๐ŸŽ‰

Automated Test Suite โ€” HTTP (6 test cases)

# Terminal 1
npm run dev:http

# Terminal 2
node test-http.mjs

Expected output:

โœ“ PASS 1. initialize โ€” Server: resume-mcp-server v1.0.0
โœ“ PASS 2. getSummary โ€” Name: Adarsh Charjan
โœ“ PASS 3. getExperience โ€” filter "AutomationEdge" โ†’ RPA Intern
โœ“ PASS 4. search "RBAC" โ€” 3 matches
โœ“ PASS 5. tailorResume โ€” Matched frameworks: [Spring Boot, Angular, REST APIs]
โœ“ PASS 6. GET /health โ€” Status: ok

Results: 6 passed  0 failed  / 6 total  ๐ŸŽ‰

๐Ÿ“ Project Structure

resume-mcp-server/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”œโ”€โ”€ resume.json            # Structured resume data
โ”‚   โ”‚   โ””โ”€โ”€ resumeLoader.ts        # Type-safe JSON loader with interfaces
โ”‚   โ”œโ”€โ”€ tools/
โ”‚   โ”‚   โ”œโ”€โ”€ getSummary.ts          # Returns name, title, summary, contact
โ”‚   โ”‚   โ”œโ”€โ”€ getExperience.ts       # Work history with company filter
โ”‚   โ”‚   โ”œโ”€โ”€ getSkills.ts           # Skills by category
โ”‚   โ”‚   โ”œโ”€โ”€ getProjects.ts         # Projects with stack tag filter
โ”‚   โ”‚   โ”œโ”€โ”€ getEducation.ts        # Education history
โ”‚   โ”‚   โ”œโ”€โ”€ search.ts              # Full-text search across all sections
โ”‚   โ”‚   โ”œโ”€โ”€ fetch.ts               # Fetch full record by stable ID
โ”‚   โ”‚   โ””โ”€โ”€ tailorResume.ts        # JD keyword matching & ranking
โ”‚   โ”œโ”€โ”€ server.ts                  # McpServer factory โ€” registers all 8 tools
โ”‚   โ”œโ”€โ”€ stdioMain.ts               # Entry point: stdio transport (local)
โ”‚   โ””โ”€โ”€ httpMain.ts                # Entry point: HTTP transport (remote)
โ”œโ”€โ”€ dist/                          # Compiled JavaScript (generated by npm run build)
โ”œโ”€โ”€ test-all-tools.mjs             # Automated stdio test suite (16 cases)
โ”œโ”€โ”€ test-http.mjs                  # Automated HTTP test suite (6 cases)
โ”œโ”€โ”€ package.json                   # Dependencies and npm scripts
โ”œโ”€โ”€ tsconfig.json                  # TypeScript compiler configuration
โ”œโ”€โ”€ .env.example                   # Environment variable template
โ”œโ”€โ”€ .gitignore                     # Excludes node_modules, dist, .env
โ””โ”€โ”€ README.md                      # This file

๐Ÿ“œ NPM Scripts

Script Command Description
npm run dev:stdio tsx src/stdioMain.ts Run locally with stdio transport (Claude Desktop)
npm run dev:http tsx src/httpMain.ts Run locally with HTTP transport (development)
npm run build tsc Compile TypeScript source to dist/
npm start node dist/httpMain.js Run compiled HTTP server (production/Render)

๐Ÿ—๏ธ Tech Stack

Technology Purpose
TypeScript Type-safe server implementation
@modelcontextprotocol/sdk Official MCP SDK โ€” tool registration and transport handling
Express HTTP server framework for the remote transport
Zod Runtime schema validation for tool parameters
tsx TypeScript execution for development

๐Ÿ›ก๏ธ Security

  • API Key Authentication: When RESUME_MCP_API_KEY is set, the HTTP server validates every /mcp request. Requests with a missing or incorrect key receive 401 Unauthorized.
  • CORS: The HTTP server includes full CORS headers to allow browser-based MCP clients to connect.
  • No External AI Calls: The tailorResume tool uses purely rule-based keyword matching. No resume data is sent to any external APIs or LLMs.
  • .env excluded from Git: Secrets never reach GitHub โ€” only .env.example (with empty values) is committed.

๐Ÿ“„ License

ISC

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured