npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cesario-mcp

v0.4.0

Published

MCP server for cesario — lets an AI manage your cesario profile and CVs under your own account, scoped by Supabase RLS.

Readme

cesario-mcp

An MCP server that lets an AI assistant manage your cesario profile — on your own account, under your own permissions.

It reuses cesario's normal email-OTP login to obtain a per-user session and then acts as you through Supabase Row-Level Security. It never uses an admin / service-role key, and it ships with no secrets — only the same public project URL + publishable key the website already exposes.

Connect to cesario via MCP

There are two ways to give an AI assistant access to your cesario account.

Hosted — recommended, no install

cesario runs a hosted MCP server with a standard OAuth 2.1 flow, so any MCP client can connect in a few clicks:

  1. In Claude → Settings → ConnectorsAdd custom connector.
  2. Enter the URL: https://cesario.cv/mcp
  3. On the cesario consent screen, sign in: email → 6-digit code → Authorize.

The client is now connected as you, scoped to your account by Supabase RLS. Try it: "list my cesario templates", "what's my cesario username?", or "set my cesario bio to …". To revoke, remove the connector in your client.

Local — self-host or development

Run this package on your own machine over stdio, connecting with the same email-OTP flow (session stored locally). See Run it and Client configuration below.

How auth works (local package)

  1. connect_account({ email }) → cesario emails you a 6-digit code.
  2. verify_connection({ email, code }) → the code is exchanged for a real Supabase session (access + refresh token), stored at ~/.cesario/credentials.json (owner-only, chmod 0600).
  3. Every other tool attaches that session's token, so all reads/writes run under your auth.uid() — you can only ever touch your own data.

Entering the code from your inbox is the consent step. To revoke, run disconnect_account or delete ~/.cesario/credentials.json.

Tools

Connect & session

| Tool | What it does | | --- | --- | | connect_account | Send a login code to an email (new email = new account). | | verify_connection | Exchange the code for a session and store it. | | whoami | Summarize the connected account. | | disconnect_account | Remove the local session. |

CVs & profiles

| Tool | What it does | | --- | --- | | list_cvs | List your CVs. | | list_templates | List your own templates (usable as fromId for create_cv). | | get_cv | Fetch a CV (summary, or full JSON with includeData:true). | | create_cv | Create a CV by copying a template or existing CV (fromId). | | duplicate_cv | Faithful copy of a CV/template (keeps profile + kind). | | rename_cv | Change a CV's title. | | delete_cv | Permanently delete a CV. | | apply_profile_to_cv | Attach/detach a profile to a CV. | | set_cv_visibility | Set a CV/template public or private on your creator page. | | list_data_profiles | List your profiles (reusable content sets). | | get_data_profile | Fetch a profile. | | create_data_profile | Create a profile from another profile or from a CV's content. | | duplicate_data_profile | Copy a profile. | | update_data_profile | Update a profile's name and/or full content. | | rename_data_profile | Rename a profile. | | delete_data_profile | Permanently delete a profile. |

Defaults & notifications

| Tool | What it does | | --- | --- | | set_defaults | Set your default CV, profile, and/or template. | | list_notifications | List in-app notifications (shares, new versions). | | mark_notification_read | Mark one (or all) notifications read. |

A note on creation

Every create_* works by copying the content of a row you already own — a template, a CV, or a profile — so new rows are always valid. Synthesizing a brand-new CV from a built-in template (e.g. classic-fr) is not supported: that content lives in the app's template tree (coupled to its build + icon libraries) and does not belong in a standalone package. To enable it later, either bundle the app's src/lib/cv tree into this package's build, or add a small read-only app endpoint that returns a freshly-seeded CV data payload.

Run it

npm install
npm run build      # → dist/index.js

Local dev without building:

npm run dev        # tsx src/index.ts

Inspect interactively with the MCP Inspector:

npm run inspect

Client configuration

Claude Desktop (claude_desktop_config.json):

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

Claude Code (.mcp.json in your project, or claude mcp add):

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

Or with the Claude Code CLI: claude mcp add cesario -- npx -y cesario-mcp.

(To run from a local checkout instead of npm, use "command": "node", "args": ["/absolute/path/to/mcp/dist/index.js"].)

Pointing at a different environment

Defaults target production. Override with env vars (both public values):

CESARIO_SUPABASE_URL=https://<ref>.supabase.co
CESARIO_SUPABASE_ANON_KEY=sb_publishable_...

Scope

Covers CV and profile (reusable CV content) management — copy-based creation. Account/creator-profile management (name, username, bio, publish) is intentionally out of scope, to keep "profile" unambiguous (it always means CV content here). A hosted, multi-user OAuth variant — so end users connect from Claude's connector UI instead of running this locally — is the next step up; see the project plan.