Ask a repository what depends on what. Every answer cites the file, line and commit it came from.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Diagrams of your system that cite their sources β and say what they could not see.
This is the whole product: one HTML file, open in a browser. Every colour
in it is the systemβs own vocabulary β backend, database, cloud,
security, message bus, external β and nothing else. Colour never marks
where an arrow goes, only what a thing is.
Open this exact file β β
click any node for its evidence, trace what reaches it, search it, present it.
Point Mirofy at a repository. It reads the code into an evidence graph, builds a model from that graph, and compiles the model into one HTML file you can open, search, share and check.
Every relationship it draws can answer one question: what is the evidence for this? Each carries the file, the line range and the commit it came from. Where nothing is known, the diagram says so instead of filling the gap.
Run it against this repository and you get this β not a mock-up, and not drawn by hand:
Every box is the same colour here, and that is the point. All twelve of
these are the same thing β a package, derived from a manifest β so there is
nothing for colour to say, and it says nothing. The picture at the top is
colourful because that system genuinely has six kinds in it. A tool that
tinted these boxes to look livelier would be inventing a distinction it had
not found.
Open the live one β β click any
node for the file, line range and commit behind it.
Nothing to install β one command, and a diagram opens:
Give it to your agent instead β one line, and the skill installs for Claude Code, Cursor, Gemini CLI, Amp and a dozen others:
Then ask: map this repository's architecture. Your agent reads
SKILL.md and drives the same CLI.
In Claude Code, the plugin carries both the skill and the MCP server:
Every one of these routes is the same package. The agent never draws the diagram β it runs the CLI you would have run, which is why nothing it reports can drift from what the CLI reports.
map runs the whole pipeline in the directory you point it at β scan, model,
compile, layout, render β and writes architecture.html next to your code.
map --out <dir> sends the diagram and the intermediates there instead, so
nothing lands in your repository; without it the intermediates go to
<target>/scan. Naming an output path still wins over both. It works on a repository that declares no
workspaces: where there are no packages to draw, it models the source
directories and the imports between them.
JavaScript and TypeScript imports Β· Python imports Β· Go imports Β·
Java imports Β· Rust imports Β· Kotlin imports Β·
package.json workspaces Β· Express and Next routes Β· docker-compose.
That is the whole list, and the list is the point. Everything else is
reported, not skipped: coverage.md names every file no adapter opened,
grouped by type, and map says so on its way out when the unread files
outnumber the read ones. Point it at a Ruby repository and you get an honest
empty answer naming every unread .rb file β not a confident small one drawn
from the two JavaScript files in an examples/ folder.
Python resolves by file existence, not by convention: relative imports
against the importing file's directory, absolute ones against the repository
root and any directory that actually holds a package. A specifier that matches
two source roots is a gap naming both, because which one wins depends on
sys.path, which is configuration and not in the source.
Go resolves against the module path go.mod declares, and decides the
standard library the way the toolchain does β a first path segment containing a
dot is a domain, and a domain means a module fetched from somewhere. Java
builds its index from the package statements files declare, not from
directory layout: Maven convention puts com.acme.store under
src/main/java/com/acme/store and convention is not always, but the
declaration is what the compiler reads.
Rust peels a use from the right until a real file appears, because
use crate::a::b::C does not say which of a, b or C is the file. It reads the
crate name and the source root from Cargo.toml β including a declared
[lib] path, since src/ is only the default β and knows that Cargo compiles
every direct child of tests, benches and examples as its own crate.
Kotlin reads its type index from the declarations themselves β class, interface,
object, typealias and fun interface among them β rather than from file
names, because a Kotlin file need not be named after the type
it holds and may declare several. It shares that index with Java: the two
compile to one namespace and import each other freely, so an index of one
extension reports a real edge to the other as a missing type.
In every one of them, an import that names something inside this repository which is not there is a gap β never a dependency on a published copy of yourself.
npx mirofy-cli guide "show an API request with a cache miss" picks the
diagram type for you if you are not sure which one you want.
As a CLI you keep β npm install -g mirofy-cli. The command it installs is
mirofy; the package carries the -cli suffix because npm refused the bare
name as too close to the existing minify.
From source β no install at all, because there is nothing to install:
That works on a bare checkout with no npm install, because every package here
has zero runtime dependencies.
As an agent skill β build the bundle and copy it where your agent looks:
Then ask: Use mirofy to map this repository's runtime architecture.
The bundle is 2.8 MB and named for the skill inside it β copying packages/core
instead installs a skill called core that says in its own frontmatter it is
called mirofy, and drags the test suite along with it. Before writing the
bundle, build:skill copies it somewhere with no repository around it and
renders a diagram: a bundle that only works inside its own checkout is not a
bundle.
Nothing is downloaded at runtime and nothing phones home β there is no update check, because a tool that reaches the network to tell you about itself is a tool that reaches the network.
mirofy map is these five steps in order. If you only want the intermediates,
mirofy map . out.html --out ./scan writes every one of them β the evidence
graph, the model, the view and the positioned document β into that directory.
To run a step on its own, or point one somewhere else, you need a checkout; these are the repository's own npm scripts, not commands the installed package exposes:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mirofy)<a href="https://allmcps.com/mcp/mirofy"><img src="https://allmcps.com/api/badge/mirofy?style=directory" alt="Mirofy on AllMCPs" /></a>