Skip to main content
Glama
Adarshcharjan

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.

![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)
![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)
![MCP SDK](https://img.shields.io/badge/MCP%20SDK-Official-black?style=for-the-badge&logo=anthropic&logoColor=white)
![Express](https://img.shields.io/badge/Express-000000?style=for-the-badge&logo=express&logoColor=white)
![Render](https://img.shields.io/badge/Render-46E3B7?style=for-the-badge&logo=render&logoColor=black)

---

## ๐ŸŒ 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