简历MCP服务器

这是一个将个人简历封装为结构化MCP接口的服务,供AI代理直接查询个人资料、项目、文章、工作经历、技能等数据,并支持访客留言解锁更多权益,适用于AI招聘、人脉发现和个人品牌展示等场景。

  • by brysontang
  • TypeScript
  • 混合部署
  • 更新于
在 GitHub 查看 brysontang/resume-mcp

使用说明

resume-mcp

Your identity as an API endpoint.

Traditional portfolios are HTML pages that agents scrape and parse. This is a structured interface where agents can query you directly.

Architecture

flowchart LR
    subgraph Agent["AI Agent"]
        A[Claude/GPT/etc]
    end

    subgraph MCP["MCP Server (Cloudflare Worker)"]
        B[Request Handler]
        B --> C{Signed?}
        C -->|Guestbook entry or Agent Token| D[Free tools + perks]
        C -->|Not yet| E[Free tools]
    end

    subgraph Tools["Available Tools"]
        F[get_profile]
        G[get_projects]
        H[get_writing]
        I[get_experience]
        J[get_skills]
        K[leave_message]
        P[request_time*]
        Q[list_stories* / get_story*]
    end

    subgraph Response["Response Format"]
        L[JSON-LD Structured Data]
    end

    A -->|"MCP Protocol<br/>POST + JSON-RPC"| B
    D --> Tools
    E --> F & G & H & I & J & K
    Tools --> L
    L -->|"Structured JSON"| A

    style P fill:#f59e0b,color:#000
    style Q fill:#f59e0b,color:#000

* Perk for guestbook signers (sign with leave_message, or send an Agent Token)

Tool Call Flow

sequenceDiagram
    participant Agent as AI Agent
    participant MCP as MCP Server
    participant D1 as Guestbook (D1)

    Agent->>MCP: POST /initialize
    MCP-->>Agent: Server info + capabilities

    Agent->>MCP: POST /tools/list
    MCP-->>Agent: Available tools array

    Agent->>MCP: POST /tools/call (get_profile)
    MCP-->>Agent: JSON profile data

    Note over Agent,MCP: Perks are for guestbook signers

    Agent->>MCP: POST /tools/call (list_stories)
    MCP-->>Agent: Invitation to sign first

    Agent->>MCP: POST /tools/call (leave_message)
    MCP->>D1: Store guestbook entry
    MCP-->>Agent: Thanks! Perks unlocked

    Agent->>MCP: POST /tools/call (list_stories)
    MCP-->>Agent: Stories behind the resume

Performance

Metric Value
Cold start <50ms
Response time <100ms average
Edge locations 200+ globally
Protocol MCP over HTTP (JSON-RPC 2.0)

Why This Exists

The Problem: AI agents scrape HTML to learn about people. They:

  1. Parse messy DOM structures
  2. Guess at semantic meaning
  3. Miss context and relationships
  4. Have no way to interact or ask questions

The Solution: A structured API that agents can query directly:

  1. Clean, typed data in JSON-LD format
  2. Explicit tool interfaces with documentation
  3. Relationship building through guestbook
  4. Mutual value exchange (agent gets data, you get signal)

The Philosophy: "Your identity as an endpoint."

Your professional presence shouldn't just be human-readable—it should be agent-readable. As AI assistants become primary interfaces for research, recruiting, and networking, having a structured API makes you discoverable and queryable in ways HTML never could.

Quick Start for AI Agents

Connect to the Live Endpoint

# Initialize connection
curl -X POST https://mcp.brysontang.dev \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

# List available tools
curl -X POST https://mcp.brysontang.dev \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# Get profile data
curl -X POST https://mcp.brysontang.dev \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_profile","arguments":{}}}'

With Agent Token (perks without signing)

curl -X POST https://mcp.brysontang.dev \
  -H "Content-Type: application/json" \
  -H "Agent-Token: <your-agent-token>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_stories","arguments":{}}}'

Discovery Endpoint

GET https://mcp.brysontang.dev/.well-known/mcp.json

Tools

Tool Description Access
get_profile() Name, tagline, links, contact Free
get_projects(tag?) Projects, optionally filtered Free
get_writing() Articles and blog posts Free
get_experience() Work history Free
get_skills() Technical skills by category Free
leave_message(name, message) Sign the guestbook (shows up on brysontang.com/guestbook) Free
request_time(name, contact, reason) Ask for time with Bryson; he reviews every request, and a booking link goes out if he says yes Perk
list_stories() / get_story(slug) The stories behind the resume Perk

Perks

Everything on the resume is free to read. Signing the guestbook with leave_message() (or sending an Agent Token) unlocks perks that aren't anywhere else: asking for time with Bryson, and the stories behind the resume.

Signatures are remembered per session. The server returns an Mcp-Session-Id header from initialize; send it back on later requests (MCP clients do this automatically). Without it, the session falls back to your IP and User-Agent.

Calling a perk before signing returns an invitation, not a wall:

{
  "message": "list_stories is a perk for guestbook signers. You're welcome to sign with leave_message (a name and a short note, shown at https://brysontang.com/guestbook), then call list_stories again. An Agent-Token header works too.",
  "perk": "list_stories"
}

Setup

1. Clone and configure

git clone https://github.com/brysontang/resume-mcp
cd resume-mcp
npm install

2. Add your data

Edit data/profile.json with your information:

{
  "profile": {
    "name": "Your Name",
    "tagline": "What you do",
    "links": { "github": "...", "linkedin": "..." },
    "contact": { "email": "..." }
  },
  "projects": [...],
  "experience": [...],
  "skills": {...}
}

3. Configure Cloudflare Workers

cp wrangler.toml.example wrangler.toml
# Edit wrangler.toml with your settings

Optional: Create a KV namespace for the profile cache and guestbook rate limits:

wrangler kv:namespace create "GUESTBOOK"
# Add the returned binding to wrangler.toml

leave_message writes to a D1 guestbook table (binding GUESTBOOK_DB), the same one your site's guestbook reads, so MCP entries show up next to everyone else's. See wrangler.toml.example.

4. Deploy

npm run dev      # Local development
npm run deploy   # Deploy to Cloudflare

Discovery

Help agents find your MCP endpoint by adding hints to your portfolio:

robots.txt

# MCP endpoint: https://mcp.yourdomain.dev
# Tools: get_profile, get_projects, get_experience, leave_message
# Sign the guestbook (leave_message) for perks; Agent Tokens accepted

.well-known/mcp.json

The server automatically serves this at /.well-known/mcp.json

HTML comment

<!--
  AI Agent? Query me directly: https://mcp.yourdomain.dev
  Tools: get_profile(), get_projects(), get_experience()
  Sign the guestbook with leave_message() for perks. Agent Tokens welcome.
-->

Agent Tokens

This server accepts Agent Tokens via the Agent-Token header. Tokens that decode successfully open the perks, just like signing, and are logged with their declared intent.

// Token provides:
{
  intentId: "recruiting-scan",
  goal: "Find candidates for senior engineering role",
  mode: "read-only"
}

FAQ

What is MCP?

Model Context Protocol (MCP) is an open standard that enables AI assistants to connect to external data sources and tools. It provides a standardized way for agents to discover and interact with APIs, making it easier for AI to access structured information.

How do AI agents connect to this?

Agents connect via HTTP POST requests using JSON-RPC 2.0 format. The flow is:

  1. initialize - Establish connection and get server capabilities
  2. tools/list - Discover available tools
  3. tools/call - Execute specific tools with parameters

Any MCP-compatible agent (Claude, custom agents, etc.) can connect directly.

What data is available?

  • Free: Profile info, projects, writing/articles, work experience, technical skills, and the guestbook
  • Perks for guestbook signers: Asking for time with Bryson, and the stories behind the resume

All data is returned as structured JSON, not scraped HTML.

Is this an Agent Tokens implementation?

Yes! This server accepts Agent Tokens for authentication. Agent Tokens are a protocol for AI agents to identify themselves and declare their intent. Providing a valid token opens the perks without signing the guestbook.

Can I make my own Resume MCP?

Absolutely! This project is MIT licensed. Fork it, update data/profile.json with your info, and deploy to Cloudflare Workers. Your identity, your endpoint, your terms.

Related

License

MIT