Skip to main content
Glama
suryakapila

resume-mcp

by suryakapila

resume-mcp

My resume, as a single source of truth with three faces:

  • a website for humans,

  • a local (stdio) MCP server for AI agents on your machine,

  • a hosted (HTTP) MCP server any remote client can connect to,

all reading one resume.json and one shared search function, so nothing drifts.

Live:

The point is the shape, not the size: a typed boundary, validated arguments, predictable payloads. The same backend systems I build every day.


Layout

resume.json          <- the single source of truth (JSON Resume schema)
shared/search.ts     <- searchBySkill(resume, skill), imported by every artifact
server-local/        <- stdio MCP server (Claude Desktop, Claude Code)
site/                <- React Router v7 site + hosted /mcp endpoint, on Cloudflare Workers

Everything reads the one resume.json and the one shared/search.ts, so the data and the tool logic can never drift between artifacts.

Tools: get_summary &middot; get_section (work | education | skills | projects) &middot; search_by_skill Resource: resume://full (application/json)


Related MCP server: resume-mcp

1. Local MCP server (stdio)

Exposes the resume as callable tools instead of prose.

Build & run

npm install
npm run build          # tsc -> dist/server-local/src/index.js
npm start              # runs the stdio server

Connect to Claude Desktop

Add to claude_desktop_config.json, then fully quit and reopen Claude Desktop:

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

Then ask your own Claude, e.g. "use the resume server to search for Kafka".


2. Hosted MCP endpoint (HTTP)

Live at https://surya-resume-site.suryakapila.workers.dev/mcp (Streamable HTTP). It exposes the same tools and resource as the local server, reads the same resume.json + shared/search.ts, and needs no clone and no key. It runs as a Durable Object (site/workers/mcp.ts) mounted into the site Worker.

Connect it from any MCP client:

  • Claude (Desktop or web): Settings, then Connectors, then Add custom connector, and paste the URL.

  • Claude Code:

    claude mcp add --transport http resume https://surya-resume-site.suryakapila.workers.dev/mcp
  • Anything else: add an MCP server with the Streamable HTTP transport and the URL. Opening the URL in a browser shows a short explainer page, not the raw protocol.


3. The website

An editorial one-pager (the "Classical" design system) that renders from resume.json and documents the MCP servers.

cd site
npm install
npm run dev            # http://localhost:5173  (hot reload)
npm run build          # production build
npm run deploy         # build + wrangler deploy  (needs `wrangler login` first)

The site's /resume.json route serves the repo-root resume.json verbatim, no copy, so the download, the page and the MCP servers always agree.


Surya Prakash Rao Kapila, Hyderabad, India.

Available Tools

3 tools
get_sectionGet sectionA

Return one section of the resume: work, education, skills, or projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It correctly implies a read-only operation with no side effects, but it does not specify the return format or error behavior. Given the absence of an output schema, this leaves some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that communicates the action and scope with no unnecessary words. It is optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter, the description adequately covers the core function and parameter values. The main gap is the lack of return format detail, especially since no output schema exists, but the tool's simplicity reduces the impact of this omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description helps by listing the allowed enum values in prose, adding the context that these are sections 'of the resume.' However, it mostly restates the schema's enum and adds no additional detail about parameter semantics beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Return' with a clear resource 'one section of the resume' and enumerates the four possible sections. This immediately distinguishes it from sibling tools like get_summary and search_by_skill, which serve different retrieval purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes the use case: fetching a specific named section (work, education, skills, projects). It does not explicitly mention alternatives like get_summary or search_by_skill, so it lacks a 'when not to use' statement, but the context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_summaryGet summaryA

Return the candidate's name, label, and professional summary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of disclosing behavioral traits. The verb 'return' implies a safe read operation, but it does not explicitly state non-destructiveness, error handling, or any context-dependent behavior. This is basic transparency, though not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states exactly what the tool returns. There is no fluff or unnecessary information, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema, read-only intent), the description fully covers what an agent needs to know: it returns the candidate's name, label, and professional summary. There is no missing essential context for a tool this straightforward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is fully covered (100% trivially). The description does not need to explain any parameters, and the baseline for zero-parameter tools is 4. The description adds no parameter details but is not expected to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'return' and identifies the resource as 'the candidate's name, label, and professional summary'. This clearly distinguishes it from siblings like get_section and search_by_skill, which have different return types and purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or alternative options, leaving the agent to infer usage from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_skillSearch by skillB

Find the work experiences and projects where a given skill or technology was used.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillYese.g. 'Kafka', 'C#', 'RAG'

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior independently. It states what the tool searches (work experiences and projects) but omits critical behavioral details such as the return format (list of matches? snippets?), whether matching is fuzzy or exact, and whether the search scope is limited to a specific resume/document. The description does not adequately convey the tool's behavior beyond its basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that immediately states the tool's purpose. It is front-loaded with the action and resource, contains no fluff, and every word contributes to meaning. This is an example of compact, effective wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter, no output schema, and no annotations, the description should compensate by explaining what the results look like and the search behavior. It fails to mention whether the output is a list of experiences/projects, whether it includes context snippets, or if the search applies to the entire resume or a specific section. The description is too sparse to be considered complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the 'skill' parameter includes examples and a clear description). The tool description largely paraphrases the schema ('a given skill or technology') without adding new meaning. It does not clarify nuances like case sensitivity, partial matches, or how to pass multiple skills. Baseline 3 is appropriate because the schema already carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Find') and clearly identifies the resource ('work experiences and projects') and the criterion ('where a given skill or technology was used'). It effectively distinguishes from sibling tools like get_summary and get_section, which are about retrieving entire sections rather than searching by skill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage context: when you need to locate experiences/projects using a specific skill. However, it provides no explicit guidance on when not to use it or how it compares to alternative tools (e.g., get_section for broader overviews). The lack of explicit alternatives or exclusions places it at 'implied usage' rather than clear context with exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv1.0.0
    • First observedget_section
    • First observedget_summary
    • First observedsearch_by_skill

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a distinct purpose: get_summary returns high-level overview, get_section retrieves a specific section, and search_by_skill finds contextual uses of a skill. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in lowercase snake_case: get_summary, get_section, search_by_skill. Even with different verbs, the pattern is uniform and predictable.

Tool Count5/5

With 3 tools, the set is well-scoped for a resume MCP server, covering summary, section retrieval, and skill-based search. It is neither too thin nor bloated.

Completeness5/5

The tool surface fully covers the read-only resume domain: overview, individual sections, and cross-referencing skills. No obvious gaps for the stated purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for managing career experience data using the JSON Resume schema with custom extensions. It enables AI agents to store, update, and retrieve detailed work history, projects, and achievements to facilitate tailored resume generation.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides a structured API for AI agents to query a person's resume, including profile, projects, writing, and gated access to experience and skills.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes a personalized AI agent that reads your resume and provides intelligent responses about your professional background through a standardized MCP server interface with RAG capabilities.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A resume MCP server that enables AI agents to search work history by keyword or meaning, retrieve detailed company info, and send scheduling emails, turning a static resume into interactive tools.
    3
    MIT