cv.json — open CV data

Search people open to work and fetch their machine-readable cv.json, from any AI assistant.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
73%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~825Tokens (tool definitions)
~1.6 KBTypical response size
Moderate attention impact (0.64% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cvjson": {
      "command": "npx",
      "args": [
        "cvjson-mcp"
      ]
    }
  }
}

Runnable packages

npmcvjson-mcp1.1.1stdio

Remote endpoints

https://freecv.org/api/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_open_to_work(query, skills, title, location, workType, ...)

Search FreeCV's LIVE index of real people who are open to work — by skills, role/title, location, and recruiter facets (work type, employment type, visa sponsorship, languages, minimum experience). Returns lean candidate cards (name, current role @ company, location, top skills, languages, and the full availability preferences) plus each person's cv.json URL and portfolio URL — enough to shortlist WITHOUT a fetch_cv per candidate. Call fetch_cv on a result to read the complete structured CV. Only already-public profiles are indexed; contact details are never returned (reach candidates via their portfolio).

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free-text query matched across name, title, skills and experience (e.g. \"senior react developer\")."
    },
    "skills": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Specific skills to match, e.g. [\"React\",\"TypeScript\"]."
    },
    "title": {
      "type": "string",
      "description": "Target role/title, e.g. \"Product Designer\"."
    },
    "location": {
      "type": "string",
      "description": "Country-aware location filter, e.g. \"UK\" (matches London/Manchester), \"Berlin\", \"Gaza\"."
    },
    "workType": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "remote",
          "hybrid",
          "onsite"
        ]
      },
      "description": "Only candidates who OFFER one of these work arrangements."
    },
    "employmentType": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "full-time",
          "part-time",
          "contract",
          "internship",
          "temporary",
          "volunteer"
        ]
      },
      "description": "Only candidates open to one of these employment types."
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Languages the candidate must speak, e.g. [\"German\",\"Arabic\"]."
    },
    "sponsorship": {
      "type": "boolean",
      "description": "Filter by visa-sponsorship need: false = does NOT need sponsorship, true = needs it. Candidates who never answered are excluded from this filter."
    },
    "minYearsExp": {
      "type": "integer",
      "minimum": 1,
      "description": "Minimum years of experience."
    },
    "sort": {
      "type": "string",
      "enum": [
        "best",
        "fresh",
        "exp"
      ],
      "description": "Ranking: best match (default), most recently updated, or most experienced."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Max results per page (default 20)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Result offset for paging through a large shortlist (default 0). Use with `total` in the response."
    }
  }
}
🟢fetch_cv(slug, url)

Fetch a person's cv.json — their full machine-readable CV — by FreeCV slug or livelink.cv URL. Returns structured JSON: basics, work, education, skills, languages, availability, ats, verification, i18n.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "The slug, e.g. \"ashley\" (from livelink.cv/ashley)."
    },
    "url": {
      "type": "string",
      "description": "Full cv.json URL (alternative to slug)."
    }
  }
}
🟢validate_cv(cvjson, slug, url)

Validate a cv.json document against the official cv.json schema. Provide the document (cvjson, object or JSON string) OR a slug/url to fetch and validate. Returns { valid, errors[] }.

Input Schema

{
  "type": "object",
  "properties": {
    "cvjson": {
      "description": "The cv.json document to validate (object or JSON string)."
    },
    "slug": {
      "type": "string",
      "description": "Fetch and validate this slug's live cv.json."
    },
    "url": {
      "type": "string",
      "description": "Fetch and validate this cv.json URL."
    }
  }
}
🟢get_cvjson_schema

Return the official cv.json JSON Schema (the format spec) — use it to understand or generate a compliant cv.json.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools