Skip to main content

MCP server that renders a YAML CV into a one-page PDF via notboringresume.cloud (local Chromium).

Project description

not-boring-resume-mcp

MCP server that renders a YAML CV into a one-page PDF via notboringresume.cloud (local headless Chromium).
Optionnaly it can also generate a cover letter adapted to the resume and the offer.

Development

This project uses uv.

uv sync --dev                              # install deps
uv run playwright install chromium         # one-time: browser for rendering/tests
uv run ruff format .                        # format
uv run ruff check .                         # lint
uv run pytest                               # tests

The test suite renders the live default CV from notboringresume.cloud, so it needs network access and will fail if the site is down.

Continuous integration

.github/workflows/ci.yml runs on every pull request and on pushes to main:

  • lintruff format --check and ruff check
  • test — installs Chromium via Playwright, then runs pytest

Releasing (publishing to PyPI)

Releases are tag-driven: pushing a v* tag builds the package, creates the matching GitHub Release, and publishes to PyPI. The workflow lives in .github/workflows/publish.yml.

One-time setup

Configure a Trusted Publisher on PyPI (no API token to store). On PyPI → your project → PublishingAdd a pending publisher:

Field Value
Owner your GitHub account / org
Repository not-boring-resume-mcp
Workflow publish.yml
Environment pypi

Cutting a release

The version bump goes through a normal PR, and the tag is created after the merge. You never need to force-push.

  1. On a branch, bump the version in pyproject.toml (e.g. version = "0.1.1"):

    git switch -c release/0.1.1
    # edit pyproject.toml -> version = "0.1.1"
    git commit -am "Release 0.1.1"
    git push -u origin release/0.1.1
    
  2. Open a PR, let CI run, and merge it into main (merge or squash).

  3. Update local main, then tag the merged commit and push the tag:

    git switch main
    git pull
    git tag v0.1.1
    git push origin v0.1.1
    

Tag after merging, never before. A squash merge rewrites the commit SHA, so a tag created on the branch would point to an orphaned commit. Tagging the commit that is already on main keeps the tag on the real history — and avoids any temptation to force-push.

Pushing the tag triggers the workflow, which:

  1. Verifies the tag (v0.1.1) matches version in pyproject.toml — the job fails fast if they differ, so you can't ship a mismatched release.
  2. Builds the sdist and wheel.
  3. Creates the GitHub Release with auto-generated notes and the built artifacts.
  4. Publishes to PyPI.

The tag version (minus the v) must equal project.version, and that version must not already exist on PyPI — PyPI never lets you overwrite a published version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

not_boring_resume_mcp-0.1.1.tar.gz (643.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

not_boring_resume_mcp-0.1.1-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file not_boring_resume_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: not_boring_resume_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 643.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for not_boring_resume_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 005bcfb1c2a185551c01387e4160eabfe5236d3537535fd3669e61dce3b72675
MD5 fe2cd0d90377b68b8ddc981f1fd2e1f1
BLAKE2b-256 46a996952630e59393280384f8397d2bf85fa934bd267cd8d0387b626ef39e25

See more details on using hashes here.

Provenance

The following attestation bundles were made for not_boring_resume_mcp-0.1.1.tar.gz:

Publisher: publish.yml on gouzmi/not-boring-resume-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file not_boring_resume_mcp-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for not_boring_resume_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a9b43e0a79714820fc4350772df9ceb0d2a9a8249852cecd46570d3e8e106e3
MD5 fcc0ea91b0f5c64644121d8f933f12fe
BLAKE2b-256 1a74197777234bbf946b99296e30b1577c8619969b6960f3d2accd97ce0fea31

See more details on using hashes here.

Provenance

The following attestation bundles were made for not_boring_resume_mcp-0.1.1-py3-none-any.whl:

Publisher: publish.yml on gouzmi/not-boring-resume-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page