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

@vithanco/vgraph-mcp

v1.0.10

Published

Concept Maps, IBIS, Causal Loop Diagrams and Timelines as images. Runs locally via WebAssembly.

Readme

@vithanco/vgraph-mcp

The VGraph MCP server, running on your machine.

Same tools and same engine as the hosted server at mcp.vithanco.com — the difference is where the work happens. The engine is compiled to WebAssembly, so a diagram is laid out and rendered locally, with no round trip and nothing to pay for.

npx @vithanco/vgraph-mcp

Claude Code, Claude Desktop, Cursor — anywhere an MCP server is configured by command:

{
  "mcpServers": {
    "vgraph": { "command": "npx", "args": ["-y", "@vithanco/vgraph-mcp"] }
  }
}

The hosted server remains the better fit where there is no shell to run a command in — claude.ai in the browser, ChatGPT connectors — and stays available:

{ "mcpServers": { "vgraph": { "url": "https://mcp.vithanco.com/mcp" } } }

What is in here

No graph logic. This is a host around the engine, the same way the Obsidian and VS Code plugins are — they put the wasm behind a pane, this one puts it behind a protocol on stdin.

| file | what it does | |---|---| | src/server.mjs | MCP plumbing: list tools, dispatch, format the quality report | | src/wasm-host.mjs | loads the wasm under WASI | | src/png.mjs | rasterises the SVG | | tools.json | tool definitions, generated from the Swift server | | vendor/ | the engine, its JS glue, and the fonts |

tools.json is not written by hand. scripts/dump-mcp-tools.sh starts the native vgraph-mcp binary and asks it, over MCP, what tools it offers — so the VGL documentation the model reads has one source, in Swift, and a tool added there appears here without anyone editing JavaScript.

Building it

From the repository root:

just mcp-node       # build the wasm, vendor it with the fonts, refresh tools.json
just mcp-node-run   # run it on stdio against the current build

vendor/ is not committed. The wasm is 4.1MB, and a copy in git is a copy that can disagree with the engine it was built from.

Two things that look like bugs and are not

The wasm writes to stderr. It logs layout DEBUG lines to WASI stdout, and under a stdio MCP server stdout carries JSON-RPC. wasm-host.mjs routes both wasm fds to stderr; the noise is expected.

Fonts are bundled rather than read from the SVG. The SVG carries an @import for DM Sans, which browsers honour and rasterisers ignore — and resvg ignores an embedded @font-face too. See fonts/README.md at the repository root for why the faces are TTF and why there is one file per weight.