EuropassMCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EuropassMCPBuild my Europass CV and export it as XML"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EuropassMCP
An MCP server that lets an AI agent assemble a Europass CV and export it as strictly schema-compliant Europass XML, or as a PDF carrying that XML inside it.
The Europass CV is the European Union's standardised curriculum vitae format. Its machine-readable form is an XML document conforming to the Europass CV XML Schema Definition version 3.0.3. This server gives an agent a handful of small, section-scoped tools for filling one in over the course of a conversation, and refuses to export anything the schema would reject, so "almost valid" is not a state a finished document can reach.
Unofficial
This project is not affiliated with, endorsed by, or produced by the European Union, the European Commission or Cedefop. It ships no EU emblem and no Europass wordmark; the PDF it produces is an independent look-alike of the Europass layout, not the official document, and says so on the page. Europass is a trademark of the European Union.
The one European Union asset this repository redistributes is the XML schema itself, under the EUPL-1.1 grant its authors published it with. See Licensing.
Requirements
Python 3.11 or newer.
An MCP client that can launch a server over stdio.
For PDF export only, four system libraries that pip cannot install. See With PDF export.
Related MCP server: layerone-mcp
Installation
One line
curl -fsSL https://raw.githubusercontent.com/Tsadoq/EuropassMCP/main/install.sh | bashThat installs uv if it is missing, installs the server as a uv tool, and
registers it with your client: through claude mcp add when the Claude
command-line interface is on your PATH, and otherwise by merging a single
mcpServers entry into claude_desktop_config.json. The merge rewrites that one
entry and leaves every other server in the file alone, so running the command
twice still leaves exactly one europassmcp.
Flags reach the script through the pipe by way of bash -s --:
curl -fsSL https://raw.githubusercontent.com/Tsadoq/EuropassMCP/main/install.sh | bash -s -- --with-pdf--with-pdf adds the PDF extra and then points you at
With PDF export for the system libraries it cannot install
for you. --config-only skips straight to registering the client, for an
install you already have.
Piping a URL into a shell runs whatever that URL serves. If that is not a trade you want, the script is a file like any other:
curl -fsSL https://raw.githubusercontent.com/Tsadoq/EuropassMCP/main/install.sh -o install.sh
less install.sh
bash install.shBy hand
The server speaks MCP over stdio, so in normal use a client launches it rather than you running it by hand. What the script does on your behalf is install the server and write that launch command into the client's configuration:
uv tool install europassmcp # or: uv tool install 'europassmcp[pdf]'followed by the stanza under Client configuration.
Installing up front is optional, though. The commands below launch the server
through uvx, which fetches it on demand; either one is what goes into that
stanza, and running one in a terminal starts a server that waits on stdin.
XML only
uvx europassmcpNothing outside Python is needed. Every tool works except export_pdf, which
refuses with a message naming the command that would fix it.
With PDF export
PDF export goes through WeasyPrint, which loads Pango, PangoFT2, HarfBuzz and
fontconfig through the C ABI at import time. pip cannot install any of them,
so europassmcp[pdf] installs cleanly on a machine that has none of them and
then refuses every PDF.
Install them with the system package manager before you install the extra. If
you do not, export_pdf answers with the same refusal it gives an install that
never had the extra at all: the underlying
OSError: cannot load library 'libpango-1.0-0' is caught and never reaches you.
So on an install that does already have europassmcp[pdf], that refusal means
these libraries are the part that is missing.
On Debian and Ubuntu:
sudo apt install libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz0b libfontconfig1On macOS, with Homebrew:
brew install pangoHomebrew pulls glib, harfbuzz and fontconfig in as dependencies of pango. WeasyPrint's installation guide is the authority for other platforms and for troubleshooting a load that fails anyway.
Optionally add libharfbuzz-subset0 (Debian and Ubuntu; Homebrew's harfbuzz
already includes it). Without it PDFs still render, but every font is embedded
whole instead of subsetted, which makes the file considerably larger.
Then:
uvx --from 'europassmcp[pdf]' europassmcpBefore the first release
europassmcp is not on PyPI yet, and this repository has no public remote, so
neither the raw.githubusercontent.com URL nor any of the commands above will
resolve until both exist. Against a clone, uvx --from . europassmcp and
uvx --from '.[pdf]' europassmcp are the same two paths, and
bash install.sh --config-only still registers the client.
Client configuration
Most MCP clients take the same mcpServers stanza; in Claude Desktop it lives in
claude_desktop_config.json.
{
"mcpServers": {
"europassmcp": {
"command": "uvx",
"args": ["europassmcp"]
}
}
}With PDF export, the extra moves into the arguments:
{
"mcpServers": {
"europassmcp": {
"command": "uvx",
"args": ["--from", "europassmcp[pdf]", "europassmcp"]
}
}
}Compiling the schema takes roughly three seconds, once, while the server starts. A client that times out a server's first response quickly may need a longer startup allowance.
What the agent gets
Drafts live in memory for the length of the session, keyed by a name the agent chooses, and are built up section by section. Nothing is written to disk.
Tool | What it does |
| Starts a new empty draft under a name of the agent's choosing. |
| Records who the CV is about. The one section a valid CV cannot omit. |
| Appends one job, in the order it should be printed. |
| Appends one qualification or training period. |
| Appends one language with its CEFR levels, mother tongues included. |
| Appends one digital or computer skill. |
| Finds Europass country codes from a country name in any of the languages the schema documents. |
| Finds Europass language codes the same way. |
| Finds ISCO-88 occupation codes from a job description. |
| Reports everything the schema objects to, with the nearest valid values for a refused code. |
| Returns the finished CV as Europass XML. Refuses a draft that would not validate. |
| Lays the CV out as a PDF with the XML attached, and returns a link to it. |
Two of these carry most of the design. The lookup tools exist because the
vendored code lists hold 1350 members, including 564 occupations and 197 country
codes, which is far more than belongs in a tool description or in a model's
context; the agent searches instead of being handed a list. And validate_cv
answers a refused value with the valid values spelled most like it, so a rejected
ITA comes back with IT, which is the same search from the other direction.
The PDF comes back as a resource link rather than as inlined bytes, because a document of several hundred kilobytes would otherwise be replayed into the model's context on every later turn. The source XML travels inside the PDF as a file attachment, so the document a person receives is still the document a machine can read back.
The vendored schema
The twelve XSD files under src/europassmcp/schema/ are vendored rather than
fetched, because there is nowhere left to fetch them from: every URL under
europass.cedefop.europa.eu/xml/ has answered with a redirect to a marketing
page since roughly 2021. They were recovered from the Internet Archive.
docs/schema-provenance.md records where each file
came from, the one modification made to them, and how to repeat the recovery.
Licensing
This distribution aggregates two separately licensed bodies of work, kept in separate directories so that neither licence has to be read as covering the other.
First-party code, which is everything except
src/europassmcp/schema/, is under the MIT Licence inLICENSE.The vendored Europass XML Schema Definition, in
src/europassmcp/schema/, is Copyright European Union 2002-2010, published by Cedefop under the European Union Public Licence version 1.1 (EUPL-1.1). The MIT grant does not extend to it.
NOTICE states the EUPL-1.1 grant in full and travels inside the wheel
and the sdist, which is what keeps the schema redistributable. Redistributing
these files, modified or not, means carrying it with them.
Development
uv sync
uv run pytest
uv run pre-commit installuv run pre-commit run --all-files runs the same ruff, ruff-format and mypy
checks CI does. The generated binding under src/europassmcp/_generated/ is
xsdata output and is regenerated, never edited by hand; CI regenerates it and
fails on any diff. scripts/fetch_schema.py re-runs the schema recovery.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseAqualityAmaintenanceResume tailoring, cover letter generation, CV PDF export, and job search tools for AI agents. 18 tools powered by the Laddro Career API.18107MIT
layerone-mcpofficial
AlicenseAqualityCmaintenanceEnables AI agents to generate documents (PDF/DOCX/Factur-X) and manage electronic signatures (eIDAS/PAdES) via natural language using LayerOne's DocX and Sign APIs.2046MIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to issue Poland structured e-invoices (faktura ustrukturyzowana) through KSeF 2.0, handling FA(3) XML building, encrypted session flow, and KSeF number retrieval.MIT
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to create and manage e-invoices through natural language, supporting EU compliance formats like ZUGFeRD and XRechnung, as well as US plain PDF invoices.7
Related MCP Connectors
Italy FatturaPA invoices for AI agents: build FPR12 XML, transmit to the SdI, query status.
Turn a description into a shareable, editable PDF — invoices, certificates, reports, resumes.
AI document editing for agents: draft, edit, export .docx/PDF. 37 MCP tools; agent self-signup.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tsadoq/EuropassMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server