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

@ogygie/mcp

v0.35.3

Published

Ogygie MCP server: read-only access to the governance files and features of any Ogygie repo, the manifest as index. Ships built; runnable standalone or through `ogygie mcp`.

Readme

@ogygie/mcp

Serveur MCP du framework Ogygie : il donne à un espace de conception (claude.ai, Claude Desktop, Claude Code) un accès en lecture aux fichiers de gouvernance et aux features de N repos Ogygie — sans copie, sans recherche sémantique, sans connaître le produit. Le manifeste est l'index : une feature qu'il ne déclare pas n'existe pas. Depuis la 0.13, il sait aussi proposer : une spec ou un fichier de décisions devient une pull request, jamais un fichier écrit sur l'hôte (D17).

Lancement

# Depuis un projet Ogygie, sur le projet courant
pnpm add -D @ogygie/mcp@<version d'@ogygie/cli>   # lockstep D2
pnpm ogygie mcp

# Sur un hôte, sans projet Ogygie, en servant plusieurs repos
npx @ogygie/mcp --config ogygie-mcp.config.json --http --port 3010

Le registre nomme les repos servis :

{
  "repos": [
    { "id": "mon-produit", "rootPath": "/srv/clones/mon-produit" },
    { "id": "autre-produit", "rootPath": "/srv/clones/autre-produit" }
  ]
}

Sans --config, le serveur sert le projet courant sous l'id local.

Outils

| Outil | Ce qu'il rend | |---|---| | ogygie_list_repos | les repos servis, leur version Ogygie, le ref git lu | | ogygie_read_manifest | le manifeste validé — l'index du repo | | ogygie_list_specs | les specs (id, statut, priorité, dépendances, différés) | | ogygie_read_spec | une spec entière : frontmatter parsé + corps | | ogygie_read_decisions | une décision D<n>, ou les deux fichiers entiers | | ogygie_read_governance | AGENTS.md, AGENTS.product.md ou FAILURES.md | | ogygie_read_feature | les fichiers d'une feature, ou l'un d'eux | | ogygie_impact | le rayon d'impact d'une feature ou d'un package | | ogygie_propose_change | (repos avec bloc github + jeton) une spec ou un fichier de décisions → commit sur une branche mcp/… + pull request |

Chaque réponse porte sa provenance { repo, path, ref } : ce qui a été lu, où, et à quel commit.

Transport HTTP

OGYGIE_MCP_TOKEN est obligatoire (32 caractères au moins) : sans lui, le serveur refuse de démarrer. Les requêtes portent Authorization: Bearer <token> et sont refusées avant toute lecture. Le serveur n'écoute que 127.0.0.1 tant qu'un --host n'est pas écrit à la main. La synchronisation des clones (git fetch) est un problème d'hébergement : le serveur lit ce que le disque porte, et le date par ref.

Écriture par proposition

Un repo devient écrivable quand son entrée de registre porte ses coordonnées GitHub et que l'hôte porte OGYGIE_MCP_GITHUB_TOKEN (jeton à portée minimale : contenus + pull requests sur les seuls repos servis) :

{ "id": "mon-produit", "rootPath": "/srv/clones/mon-produit",
  "github": { "owner": "mon-org", "repo": "mon-produit", "defaultBranch": "main" } }

Périmètre fermé : specs/<id>.spec.md, DECISIONS.md, DECISIONS.product.md. Le contenu est validé comme verify-specs le ferait (frontmatter, sections, références D<n>, numérotation des décisions), une spec ne passe jamais implemented par cette voie, un conflit avec la tête distante est refusé avec le contenu à jour, et une seconde proposition sur le même chemin met à jour la même pull request. --write-rate-limit <n> borne les propositions par repo et par heure (20 par défaut). Sans bloc github ni jeton, l'outil n'est pas listé : un serveur de lecture reste un serveur de lecture.

Ce qu'il ne fait pas

Aucune écriture sur le disque de l'hôte, aucune écriture hors des specs et des décisions, aucun merge. Aucune exécution de code du repo servi. Aucun accès hors carte : .env, secrets et artefacts de build sont inatteignables par construction, pas par liste noire. Aucun cache : chaque lecture touche le disque, la fraîcheur est l'objectif.

Licence

MIT — voir LICENSE.