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

@jarroba/mcp-logs

v0.1.11

Published

MCP server (stdio, local) that lets an AI read a log file it could never fit in its context: a 200 MB CI log. Detects the format, counts EVENTS (a 40-line stack trace is one), resolves root causes, groups lines into templates, answers when it started, and

Readme

@jarroba/mcp-logs

An MCP server that lets your AI read a log it could never fit in its context.

claude mcp add jarroba-logs -- npx -y @jarroba/mcp-logs
// Claude Desktop, Cursor, Cline, VS Code…
{ "mcpServers": { "jarroba-logs": { "command": "npx", "args": ["-y", "@jarroba/mcp-logs"] } } }

11 tools · ~4.8k tokens of context · stdio, runs on your machine · nothing is uploaded.

Why this exists

Every log tool for an AI takes pasted text. A production or CI log is tens or hundreds of MB, so pasting is not an option — and the interesting part is never the part you would have pasted.

These tools take a file path. The server runs in Node, so it opens the file itself and hands back only what fits. An agent debugging a red CI run cannot read the log; it can ask questions about it.

The tools

| | | |---|---| | log_analyze | Format, number of events (a 40-line stack trace is one), levels, time range, errors with their root cause resolved, most frequent patterns. | | log_trends | When did it start. Compares each pattern against itself, not against total volume — in a busy service everything rises at 9am and nothing happened. Returns what spiked, what is new, and what stopped appearing: the last one raises no counter anywhere and is often the worse news. | | log_around | What else clustered around a moment. What started before is a candidate explanation; what came after is usually a consequence. Correlation is not causation, and order is what separates them. | | log_distinguish | What sets a group of events apart from the rest: the field=value pairs over-represented in it (by default, in the errors). Of 300 errors, 92% on version=2.4.1 against 4% of the rest is the deploy that broke it — found without reading 300 errors. Unique-per-event fields are skipped: they identify, they do not distinguish. | | log_patterns | Groups lines into templates (Drain): "connected to 10.0.0.1" and "connected to 10.0.0.7" are one message. Also returns the rare ones, which is usually what you were looking for. | | log_reduce | Cuts to a character budget keeping errors with their full trace, the window before, and whatever appears only once. Repeats collapse to [xN]. For handing a big log to a model without spending the context on the same line repeated. | | log_stacktrace | Java/JVM, Python, Node, Go, .NET, Rust, Ruby, PHP: the Caused by chain, the root cause, and the first frame of your code — inferred from the trace if you do not say. | | log_lint | Whether the log is well written, not what happened: secrets printed, one line flooding the file, timestamps with no time zone (which make two machines impossible to correlate), the clock going backwards, no request id. Secrets come back masked. | | log_convert | JSON / logfmt / syslog 5424 / CSV / OpenTelemetry / ECS — saying up front what the conversion loses. | | log_rotation | Puts rotated logs in time order. Rotation numbering runs backwards against time (app.log.3 is older than app.log.1) and alphabetically app.log.10 sorts before app.log.9. Use it first, or you read them backwards. | | log_profile_checklog_profile_suggest | A reusable profile describing how your team's logs look. check returns every error with its exact field, so a model can correct itself in one pass. |

Make your agent use it (Claude Code hook)

An agent with these tools will still Read a 300 MB log out of habit. hooks/big-log-read.mjs is a PreToolUse hook that stops a Read of a big log (by name: *.log, rotated *.log.N[.gz], *.jsonl, anything under logs/; by size: 2 MB, JT_BIG_LOG_BYTES to change it) and tells the agent to call log_analyze / log_reduce with the path instead. Everything else goes through untouched.

{ "hooks": { "PreToolUse": [ { "matcher": "Read", "hooks": [
  { "type": "command", "command": "node /path/to/big-log-read.mjs" } ] } ] } }

Two things it will not do

  • It will not invent the server's time zone. That is not in the log, and guessing it shifts the entire timeline without anyone noticing. log_profile_suggest says so instead of filling it in.
  • It will not tell you how long anything took if the log has no timestamps. It says it cannot.

Privacy, and an honest note

Transport is stdio: your MCP host launches this as a subprocess and talks over stdin/stdout. There is no endpoint, no account and no telemetry. npx downloads the package from npm to your machine the first time; after that nothing goes out.

Two things worth knowing rather than discovering:

  • These tools read whatever the process that launched them can read. That is the point — it is how a 200 MB log becomes answerable — so they are exactly as privileged as your MCP host.
  • What a tool returns enters your model's context. A log file with hostile text inside it is an indirect prompt-injection channel, the same way a web page is. Nothing here sanitizes that.

Every tool declares MCP annotations: all are readOnlyHint: true, and all are openWorldHint: true because the answer comes from the disk rather than from the arguments.

More

Part of Jarroba Tools — the same engine as the web tools, so the answer is identical. Want everything (90 tools, databases, diagrams, test auditing, SPARQL)? @jarroba/mcp.

MIT — see LICENSE. Source: github.com/Invarato/jarroba-mcp.