Skip to main content
Glama
123justin123

mcp-cv

by 123justin123
README.md
# mcp-cv

[![npm](https://img.shields.io/npm/v/@just1-dev/mcp-cv)](https://www.npmjs.com/package/@just1-dev/mcp-cv)

> My resume, queryable from your AI assistant.

A [Model Context Protocol](https://modelcontextprotocol.io) server that exposes my background, projects and contact details. Plug it into Claude, Cursor or any MCP client and just ask: _"Who is Justin?"_, _"Has he used Kafka?"_, _"How can I reach him?"_.

```bash
npx -y @just1-dev/mcp-cv
```

## Installation

### Claude Desktop

In `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "justin": {
      "command": "npx",
      "args": ["-y", "@just1-dev/mcp-cv"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add justin -- npx -y @just1-dev/mcp-cv
```

### Cursor, VS Code and other clients

Same idea: command `npx`, arguments `-y @just1-dev/mcp-cv`, stdio transport.

## What the server exposes

### Tools

| Tool           | Input            | Purpose                                                                    |
| -------------- | ---------------- | ---------------------------------------------------------------------------- |
| `get_profile`  | none             | Summary, tech stack, availability, work experience, education                |
| `get_projects` | `tech?`, `slug?` | Project case studies, optionally narrowed to one technology or one project   |
| `get_contact`  | none             | Email, LinkedIn, GitHub, website                                             |

All three are read-only, declare an `outputSchema` and return validated `structuredContent`.

### Resources

- `justin://resume`: the whole resume
- `justin://projects/{slug}`: a single project, with listing and slug completion

## Architecture

```
src/
├── index.ts          CLI entry point, serveStdio
├── server.ts         createServer(): wires tools and resources
├── schemas.ts        Zod schemas: types, validation and output schemas
├── data/cv.ts        single source of truth for the data
├── tools/index.ts    the three tools
├── resources.ts      resources and URI template
└── lib/
    ├── cv.ts         public view of the resume, age computation
    └── result.ts     MCP result helper
```

Two MCP primitives serve the same data through two channels: tools are called by the model, resources are attached by the user.

The server holds no model and no search: it serves structured data and instructs the client's model to answer only from it. `createServer()` is transport-agnostic: `index.ts` serves it over stdio, and the test suite drives it through a real MCP client and `createMcpHandler`, in process, on the protocol revision hosts negotiate today.

## Development

```bash
npm install
npm run dev        # run the server from source
npm test           # node:test suite
npm run typecheck
npm run inspect    # build, then open the MCP Inspector in the browser
```

TDQS

A4.1/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a clearly distinct section of a CV: professional background, projects, and contact information. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow a uniform get_<noun> pattern, making the API predictable and easy to navigate. The naming is fully consistent and intuitive.

Tool Count5/5

Three tools is a well-scoped size for a personal CV server, with each tool covering a natural top-level section. The count is neither too thin nor excessive.

Completeness5/5

The tool surface covers the essential aspects of a CV: profile (including experience and education), projects, and contact. There are no obvious missing operations that an agent would need to get a complete picture of the candidate.

Maintenance

ActivityMaintained
ResponsivenessNo issues