A Model Context Protocol (MCP) server built in Go that allows AI agents to manage resume data and generate HTML previews. The project combines an MCP server with a REST API for preview functionality.
- Resume Management: Create, update, and delete resumes with structured data
- Template System: Create and manage Go templates for resume rendering
- HTML Preview: Generate HTML previews with custom styling
- Flexible Data Model: Support for contacts, work experience, education, and custom feature maps
- Copy Functionality: Duplicate existing resumes and templates with all related data
- REST API: HTTP endpoints for preview generation and styling
Download the latest release from: https://github.com/rxtech-lab/resume-mcp/releases
For macOS users, download resume-mcp_macOS_arm64.pkg and run the installer.
# Clone the repository
git clone https://github.com/rxtech-lab/resume-mcp.git
cd resume-mcp
# Build the project
make build
# Run tests
make test
# Run the MCP server
make runThe server provides comprehensive MCP tools for resume management:
create_resume- Create new resume with basic info (supports copying from existing)update_basic_info- Update resume name, photo, and descriptionget_resume_by_name- Retrieve resume data by namelist_resumes- List all saved resumesdelete_resume- Delete resume by ID
add_contact_info- Add contact details (email, phone, etc.)
add_work_experience- Add work experience entriesadd_education- Add education entriesadd_other_experience- Add other experience categories
add_feature_map- Add flexible JSON features to experiencesupdate_feature_map- Update existing feature mapsdelete_feature_map- Delete feature maps
create_template- Create Go templates for resume rendering (supports copying data)get_template- Retrieve template by IDlist_templates- List templates for a resumeupdate_template- Update existing templatesdelete_template- Delete templates
generate_preview- Generate HTML preview using template and resume data (returns preview and download URLs)update_preview_style- Update CSS styles for existing previewsget_resume_context- Get comprehensive resume data and schema guide for template creation
When calling generate_preview, you'll receive both:
- A preview URL to view the resume in browser (includes a download button)
- A download URL to directly download the PDF version
Both create_resume and create_template tools support copying from existing data:
# Copy all data from an existing resume when creating a new one
create_resume(name="New Resume", copy_from_resume_id="1")
# Copy data from one resume to another when creating a template
create_template(resume_id="2", copy_from_resume_id="1", name="My Template")The server supports Go template syntax for resume rendering:
<div class="resume">
<h1>{{.Name}}</h1>
<p>{{.Description}}</p>
{{if .Contacts}}
<div class="contact">
{{range .Contacts}}
<p>{{.Key}}: {{.Value}}</p>
{{end}}
</div>
{{end}}
{{if .WorkExperiences}}
<div class="experience">
{{range .WorkExperiences}}
<div>
<h3>{{.JobTitle}} at {{.Company}}</h3>
<p>{{.StartDate.Format "Jan 2006"}} - {{if .EndDate}}{{.EndDate.Format "Jan 2006"}}{{else}}Present{{end}}</p>
{{range .FeatureMaps}}
<p>{{.Key}}: {{.Value}}</p>
{{end}}
</div>
{{end}}
</div>
{{end}}
</div>- MCP Server: Built using
github.com/mark3labs/mcp-go - REST API: Fiber framework for HTTP endpoints
- Database: GORM with SQLite for local storage
- Template Engine: Go templates with Tailwind CSS support
- Preview Generation: On-demand HTML generation
- Resume: Basic info (name, photo, description)
- Contact: Key-value pairs for contact information
- WorkExperience: Job history with dates and details
- Education: Educational background
- OtherExperience: Flexible categories for additional experiences
- FeatureMap: Custom JSON data for any experience type
- Template: Go templates for resume rendering
- AI agent creates resume using MCP tools
- Agent adds contacts, experiences, and feature maps
- Agent creates templates for rendering
- Agent generates HTML previews with custom styling
- User visits preview URL to view rendered resume
- Go 1.21 or higher
- Make
# Build the project
make build
# Run tests
make test
# Run the MCP server
make run
# Clean build artifacts
make clean
# Install locally (requires sudo)
make install-local
# Create package (macOS)
make packageThe project includes comprehensive unit tests for all MCP tools:
# Run all tests
make test
# Run tests with verbose output
go test ./tools -v
# Run specific test
go test ./tools -run TestCreateResumeToolThe server runs an HTTP API on port 8080 with the following endpoints:
GET /resume/preview/:sid- View generated HTML preview with download buttonGET /resume/download/:sid- Download resume as PDF (pixel-perfect with preview)GET /health- Health check endpoint
The server supports PDF generation using headless Chrome via chromedp:
- Local Mode: Uses locally installed Chrome/Chromium (automatic)
- Remote Mode: Connect to remote Chrome instance via WebSocket
CHROMEDP_REMOTE_URL- Optional WebSocket URL for remote Chrome (e.g.,ws://chromedp:9222)BASE_URL- Base URL for generating preview/download links (e.g.,https://resume.example.com)
- Generated PDF is pixel-perfect with web preview
- Uses the same HTML and CSS styling
- Download button excluded from PDF output
- Stateless - PDF generated in-memory, no local files created
When deploying to Kubernetes, the deployment includes a Chrome sidecar container:
# Chrome runs as a sidecar on port 9222
- name: chrome
image: zenika/alpine-chrome:latest
args:
- --headless
- --no-sandbox
- --disable-dev-shm-usage
- --remote-debugging-port=9222Set CHROMEDP_REMOTE_URL=ws://localhost:9222 to use the sidecar.
- Type: SQLite
- Location:
resume.db(created automatically) - Migrations: Automatic on startup
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass:
make test - Build the project:
make build - Submit a pull request
This project is licensed under the MIT License. See the LICENSE file for details.
For issues and questions, please visit: https://github.com/rxtech-lab/resume-mcp/issues