Resume MCP Server
README.md
# 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.





---
## ๐ 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](https://render.com) (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 |
## ๐ Installation
```bash
# 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.
```bash
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.
```bash
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:**
```bash
# Copy the example env file
cp .env.example .env
```
Edit `.env`:
```env
PORT=3000
RESUME_MCP_API_KEY=your_custom_secret_key_here
```
When the API key is active, Claude Desktop config must include it:
```json
{
"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):
```json
{
"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"`
3. **Restart Claude Desktop** completely (quit from system tray, then reopen).
4. Start a new chat. The hammer ๐จ tools icon near the chat input will show all 8 resume tools.
#### HTTP / Streamable (Remote Server)
```json
{
"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:**
```json
{
"resume": {
"command": "node",
"args": ["/absolute/path/to/resume-mcp-server/dist/stdioMain.js"]
}
}
```
**HTTP (Recommended โ uses the live Render deployment):**
```json
{
"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.
---
---
## ๐ 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) |
---
## ๐ก๏ธ 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
[MIT](LICENSE) ยฉ Adarsh Ravindra Charjan
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues