A Model Context Protocol (MCP) server library that gives LLMs access to information about a candidate.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"node-candidate-mcp-server": {
"args": [
"-y",
"@jhgaylor/candidate-mcp-server"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
A Model Context Protocol (MCP) server that gives LLMs access to information about a candidate.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y '@jhgaylor/candidate-mcp-server' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked @jhgaylor/candidate-mcp-server against OSV.dev.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in productivity
Persistent memory using a knowledge graph
Dynamic problem-solving through sequential thought chains
mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local
MCP server for monday.com integration.
MCP Security Weekly
Get CVE alerts and security updates for Node Candidate Mcp Server and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
A Model Context Protocol (MCP) server that gives LLMs access to information about a candidate.
Important: This server is intended to be used as a library to be integrated into other applications, not as a standalone service. The provided startup methods are for demonstration and testing purposes only.
This MCP server provides the following resources:
candidate-info://resume-text: Resume content as textcandidate-info://resume-url: URL to the resumecandidate-info://linkedin-url: LinkedIn profile URLcandidate-info://github-url: GitHub profile URLcandidate-info://website-url: Personal website URLcandidate-info://website-text: Content from the personal websiteThis MCP server also provides tools that return the same candidate information:
get_resume_text: Returns the candidate's resume content as textget_resume_url: Returns the URL to the candidate's resumeget_linkedin_url: Returns the candidate's LinkedIn profile URLget_github_url: Returns the candidate's GitHub profile URLget_website_url: Returns the candidate's personal website URLget_website_text: Returns the content from the candidate's personal websitecontact_candidate: Sends an email to the candidate (requires Mailgun configuration)npm install @jhgaylor/candidate-mcp-server
This package is designed to be imported and used within your own applications.
Starting the process is a breeze with stdio. The interesting part is providing the candidate configuration.
Where you source the candidate configuration is entirely up to you. Maybe you hard code it. Maybe you take a JSONResume url when you start the process. It's up to you!
import { createServer } from '@jhgaylor/candidate-mcp-server';
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// Configure your server
const serverConfig = {
name: "MyCandidateServer",
version: "1.0.0",
mailgunApiKey: process.env.MAILGUN_API_KEY,
mailgunDomain: process.env.MAILGUN_DOMAIN
};
const candidateConfig = {
name: "John Doe",
email: "john.doe@example.com", // Required for the contact_candidate tool
resumeUrl: "https://example.com/resume.pdf",
// other candidate properties
};
// Create server instance
const server = createServer(serverConfig, candidateConfig);
// Connect with your preferred transport
await server.connect(new StdioServerTransport());
// or integrate with your existing HTTP server
Using the example code provided by the typescript sdk we can bind this mcp server to an express server.
import express from 'express';
import { Request, Response } from 'express';
import { createServer } from '@jhgaylor/candidate-mcp-server';
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamablehttp.js";
// Configure your server
const serverConfig = {
name: "MyCandidateServer",
version: "1.0.0",
mailgunApiKey: process.env.MAILGUN_API_KEY,
mailgunDomain: process.env.MAILGUN_DOMAIN,
contactEmail: "john.doe@example.com",
};
const candidateConfig = {
name: "John Doe",
resumeUrl: "https://example.com/resume.pdf",
// other candidate properties
};
// Factory function to create a new server instance for each request
const getServer = () => createServer(serverConfig, candidateConfig);
const app = express();
app.use(express.json());
app.post('/mcp', async (req: Request, res: Response) => {
// In stateless mode, create a new instance of transport and server for each request
// to ensure complete isolation. A single instance would cause request ID collisions
// when multiple clients connect concurrently.
try {
const server = getServer();
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: undefined,
});
res.on('close', () => {
console.log('Request clo
... [View full README on GitHub](https://github.com/jhgaylor/node-candidate-mcp-server#readme)