Jarroba Tools
NPM · @JARROBA/MCP · SCANNED SEP 21
104 deterministic tools for your AI: logs, tests, SQL, diagrams, SPARQL. Local, no network.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 35 of 110 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 2 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability68
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 14133 tokens (~135/item across 104 items; 104 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 76% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "calc_eval" implies "eval" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 105 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Jarroba Tools MCP server?
Jarroba Tools runs locally as an npm package, launched with npx -y @jarroba/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @jarroba/mcp
claude mcp add invarato-jarroba-tools -- npx -y @jarroba/mcp
{
"mcpServers": {
"invarato-jarroba-tools": {
"command": "npx",
"args": [
"-y",
"@jarroba/mcp"
]
}
}
} {
"servers": {
"invarato-jarroba-tools": {
"command": "npx",
"args": [
"-y",
"@jarroba/mcp"
]
}
}
} codex mcp add invarato-jarroba-tools -- npx -y @jarroba/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"invarato-jarroba-tools": {
"type": "local",
"command": [
"npx",
"-y",
"@jarroba/mcp"
],
"enabled": true
}
}
} openclaw mcp add invarato-jarroba-tools --command npx --arg -y --arg @jarroba/mcp
mcp_servers:
invarato-jarroba-tools:
command: "npx"
args: ["-y", "@jarroba/mcp"] {
"McpServers": {
"invarato-jarroba-tools": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@jarroba/mcp"
]
}
}
} assistant mcp add invarato-jarroba-tools -t stdio -c npx -a -y @jarroba/mcp
{
"mcpServers": {
"invarato-jarroba-tools": {
"command": "npx",
"args": [
"-y",
"@jarroba/mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 18 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 0.1.4 → 0.1.5 functional
- 17 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 16 Sept 26 −13
- Malware scan: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Stability: unverified → 0.13 ▲ functional
- First check of Schema quality: unverified functional
- Package version: 0.1.2 → 0.1.4 functional
- 13 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 12 Sept 26 46
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed npm/@jarroba/mcp@0.1.5
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 110 packages
| Packages resolved | 110 |
|---|---|
| Stale | 35 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ieee754_from_decimal ~64
IEEE-754 representation of a decimal number in 32-bit (single) or 64-bit (double): sign, exponent, mantissa, raw bits, hex, and the value actually stored.
| Name | Type | Req | Description |
|---|---|---|---|
| number | number | yes | – |
| precision | number | – | – |
No output schema declared.
No examples provided.
ignore_check ~236
Say which paths a `.gitignore` or `.dockerignore` ignores AND BY WHICH LINE — it is `git check-ignore -v` without git. And it does what no other tool does: it reads the SAME file as git and as Docker and points at where they do NOT decide the same. The two formats look alike and are not: a pattern with no slashes (`node_modules`) applies at any depth in git but ONLY at the root in Docker, so a `.dockerignore` copied from a `.gitignore` pulls into the build context exactly what you thought you had excluded. It also warns about the `!` that cannot work because its folder is already excluded, which is the number-one cause of "my exception does nothing".
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | – | Path to the rules file |
| files | array | – | Paths to evaluate, if no folder is given |
| mode | string | – | Which rule dialect decides (default git) |
| project | string | – | Project folder: its real paths are read and, failing anything else, its .gitignore |
| text | string | – | The rules pasted |
No output schema declared.
No examples provided.
ir_drop ~239
IR drop across a power delivery grid: worst and mean voltage lost, and where the worst is. Solves the 2D resistive network (GV=I) with sparse conjugate gradient. Use it to compare frontside delivery (entry points further apart) against backside (spread out, lower-resistance metal) at the SAME load, which is the only comparison that means anything. First-order: uniform single-layer mesh, static and equal load per region, no inductive coupling, no switching. Real designs are signed off at 0.5-2.5 % of Vdd.
| Name | Type | Req | Description |
|---|---|---|---|
| n | integer | – | Mesh side: n x n nodes. Each node is a REGION of the block, not one cell |
| nodeCurrentMa | number | – | Load of each region |
| segmentOhm | number | – | Metal resistance between two neighbouring nodes |
| sourcePitch | integer | – | Spacing between entry points in grid mode. The lever that matters most |
| sources | string | – | edge = current enters only around the perimeter; grid = entry points every `sourcePitch` nodes |
| vdd | number | – | – |
No output schema declared.
No examples provided.
json_diff ~45
Structural differences between two JSON documents, by path: added / removed / changed / type changed.
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | yes | JSON A |
| b | string | yes | JSON B |
No output schema declared.
No examples provided.
jwt_decode ~37
Decode a JSON Web Token WITHOUT verifying its signature: header, payload and metadata (exp, iat…).
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | – |
No output schema declared.
No examples provided.
kg_metric ~169
Run a NAMED metric from the semantic layer against RDF data: fills its {{param}} placeholders from `args` and executes the resulting SPARQL. Use it so "revenue" or "active users" is computed from the AGREED definition instead of a query you invented — the fix for "one number, three answers". Returns the effective SPARQL and the result, or which parameters are missing.
| Name | Type | Req | Description |
|---|---|---|---|
| args | object | – | Values for the metric's {{...}} parameters |
| data | string | yes | The RDF graph as text |
| format | string | – | – |
| metric | string | yes | Name of the metric to run |
| semantic | object | yes | Semantic layer: { glossary: [{term,target,synonyms?}], metrics: [{name,label?,sparql}] } |
No output schema declared.
No examples provided.
kg_query ~115
Run SPARQL 1.1 (SELECT/ASK/CONSTRUCT/DESCRIBE) over in-memory RDF — a real engine, not pattern matching. Accepts Turtle, N-Triples, N-Quads, TriG, JSON-LD or RDF/XML. Returns rows (SELECT), a boolean (ASK) or Turtle (CONSTRUCT/DESCRIBE).
| Name | Type | Req | Description |
|---|---|---|---|
| data | string | yes | The RDF graph as text |
| format | string | – | – |
| query | string | yes | SPARQL query |
No output schema declared.
No examples provided.
kg_semantic_validate ~111
Validate a SEMANTIC LAYER document (term→predicate glossary + named SPARQL metrics) before trusting it: structure, required fields (term/target, name/sparql), metric names usable as identifiers, and uniqueness. Returns {ok, errors, warnings}. This is "semantics as code": define once, compute the same everywhere.
| Name | Type | Req | Description |
|---|---|---|---|
| semantic | object | yes | Semantic layer: { glossary: [{term,target,synonyms?}], metrics: [{name,label?,sparql}] } |
No output schema declared.
No examples provided.
kg_validate ~83
Validate RDF data against its SHACL shapes (core subset): sh:targetClass + sh:path with minCount, maxCount, datatype, class and nodeKind. Returns whether it conforms plus every violation (node, property, constraint, message).
| Name | Type | Req | Description |
|---|---|---|---|
| data | string | yes | The RDF graph (data + sh: shapes) as text |
| format | string | – | – |
No output schema declared.
No examples provided.
log_analyze ~163
Understand a log without reading it: detected format, number of EVENTS (a 40-line stack trace counts as one), breakdown by level, time range, the errors with their ROOT CAUSE resolved, and the most frequent patterns. Accepts a file PATH — that is how you look at a log that does not fit in your context, such as a CI log of hundreds of MB.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_around ~237
What ELSE happened around a moment in time. Given an instant — the spike log_trends returned, or the time of an alert — find the patterns that cluster there and do not appear the same way in the rest of the log. Correlation is NOT causation, and what settles it is order: what started BEFORE comes first and is a candidate explanation; what came after is usually a consequence. Background noise is filtered out even when a narrow window lands on one of its bursts.
| Name | Type | Req | Description |
|---|---|---|---|
| at | string | yes | Reference instant, in ISO 8601 (e.g. "2026-08-27T10:40:00Z") |
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| limit | integer | – | – |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| radiusSeconds | integer | – | How far to look on each side |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_convert ~190
Convert a log from one format to another through OpenTelemetry's Logs Data Model: JSON, logfmt, syslog RFC 5424, CSV, OpenTelemetry or Elastic Common Schema. Tells you UP FRONT what the conversion loses — syslog only has eight severities and a text body, so coming down to it from JSON drops fields.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | – | CSV only: which fields become columns |
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| host | string | – | – |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| service | string | – | – |
| target | string | yes | Output format |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_lint ~169
Check whether the log is WELL WRITTEN — not what happened in the system: secrets or personal data printed, one line flooding the file, timestamps with no time zone (which make two machines impossible to correlate), the clock going backwards, everything at the same level, no request id, payload dumps, and orphan stack traces with no error line. Every finding comes with its count and a sample; secrets are masked.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_patterns ~184
Group log lines into TEMPLATES (Drain algorithm): "connected to 10.0.0.1" and "connected to 10.0.0.7" are the same message. Turns a million lines into a few hundred readable things, each with its count, worst level and time range. Also returns the RARE ones (seen once or twice), which in a production log are usually what you were looking for.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| limit | integer | – | How many patterns to return |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_profile_check ~107
Validate a Jarroba Tools LOG PROFILE (the `logprofile: 1` JSON that configures the log tools: format, server time zone, own-code prefixes, rules and AI budget). Returns ALL errors at once, each with the exact field (`rules[2].pattern`) and what was expected, so you can fix them in one pass instead of one at a time. Format documented in `public/logprofile.md`.
| Name | Type | Req | Description |
|---|---|---|---|
| profile | string | yes | The profile as JSON |
No output schema declared.
No examples provided.
log_profile_suggest ~183
Propose a LOG PROFILE from a real log: infers the format, the own-code prefix (read from the stack traces, which is where it is demonstrated) and a starting set of rules covering the most frequent errors and whatever floods the file. What it does NOT propose is the server time zone: that is not in the log, and inventing it shifts the entire timeline without anyone noticing. Accepts a file path.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| name | string | – | Name for the profile |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_reduce ~206
Cut a log down to a CHARACTER budget while keeping what matters: errors with their full stack trace, the window of what happened just before, and anything that appears only once or twice. Repeats are collapsed with their count ([xN]) and gaps are marked ([...N]). Use it to hand a big log to a model without spending the context on the same line repeated.
| Name | Type | Req | Description |
|---|---|---|---|
| context | integer | – | Events kept before each error |
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| fullTraces | boolean | – | false collapses each stack trace to its one-line summary |
| maxChars | integer | – | Character budget for the output |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
log_rotation ~155
Put a folder or a list of rotated logs into TIME ORDER, split into series. Rotation numbering runs BACKWARDS against time: `app.log.3.gz` is older than `app.log.1.gz`, and plain `app.log` is the newest; alphabetically `app.log.10` sorts before `app.log.9` while in time it comes after. Use this BEFORE reading several logs of one service, or you will read them backwards. Returns the paths already ordered, ready to feed to log_analyze one by one.
| Name | Type | Req | Description |
|---|---|---|---|
| directory | string | – | Folder to look in (does not recurse). Alternative to `names`. |
| names | array | – | List of file names or paths, in any order |
No output schema declared.
No examples provided.
log_stacktrace ~131
Read an exception stack trace (Java/JVM, Python, Node, Go, .NET, Rust, Ruby or PHP) and answer the only question anyone asks it: WHERE TO LOOK. Follows the "Caused by" chain to the root cause, separates your code from the framework, and points at your first frame. Infers which package is yours from the trace itself if you do not say.
| Name | Type | Req | Description |
|---|---|---|---|
| myPrefixes | array | – | Prefixes of your own code, e.g. ["com.acme.", "src/"] |
| trace | string | yes | The stack trace, pasted as-is |
No output schema declared.
No examples provided.
log_trends ~238
Answer WHEN IT STARTED, which is what a log is really asked. Compares each pattern against ITSELF rather than against total volume — in a busy service everything rises at 9am and nothing has happened — and returns three different things: what SPIKED relative to its own normal and at what time; what is NEW, which did not exist before and is usually what a deploy left behind; and what STOPPED APPEARING, which raises no counter and is often the worse news.
| Name | Type | Req | Description |
|---|---|---|---|
| bucketSeconds | integer | – | Width of the time bucket; by default chosen from the log's own range |
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| limit | integer | – | How many findings to return |
| minRatio | number | – | How many times its own normal counts as a spike |
| path | string | – | Path to the log file. Use this for big logs: they do not fit in a tool call. |
| text | string | – | The log as text. Alternative to `path`. |
No output schema declared.
No examples provided.
make_generate ~210
Generate a ready-to-use Makefile for a stack (node, python, go, rust, c or generic). What it generates PASSES its own linter with zero findings: it always ships `.DELETE_ON_ERROR`, `SHELL := /bin/bash` with `.SHELLFLAGS := -eu -o pipefail -c`, and declared `.PHONY` targets — the three lines that are almost never there and that prevent the most expensive failures. With `withLogs`, targets record their output through `tee`, redirect stderr, timestamp the file name, and take the log directory as an order-only prerequisite.
| Name | Type | Req | Description |
|---|---|---|---|
| projectName | string | – | Project name (default "mi-proyecto") |
| stack | string | yes | Project stack |
| withDocker | boolean | – | Docker image targets (default no) |
| withHelp | boolean | – | Self-documenting `make help` built from ## comments (default yes) |
| withLogs | boolean | – | Targets that record their output to files (default yes) |
No output schema declared.
No examples provided.
make_lint ~205
Review a Makefile and return the mistakes that actually bite, each with WHAT is wrong, HOW it breaks in practice and HOW to fix it: a recipe indented with spaces instead of a tab, a `cd` that does not persist to the next line, a `$` that make eats before the shell sees it, `$(shell ...)` inside a `=` variable (re-executed on every use), a pipeline without `pipefail`, a missing `.PHONY`, and a missing `.DELETE_ON_ERROR`. Calibrated NOT to complain about correct code: a well-written Makefile comes back with zero findings.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | – | Path to a specific Makefile |
| files | array | – | Project paths: with them more cases are detected (e.g. a .PHONY that collides with a real file) |
| project | string | – | Project folder (its Makefile is read) |
| text | string | – | The Makefile pasted |
No output schema declared.
No examples provided.
make_log_diff ~254
Compare the output of a REAL `make` run with what the simulation predicted, matching each command in the log to the Makefile rule that produced it. **What makes this useful, rather than any log analyzer, is the diff:** if make rebuilt something the simulation considered cached, that is the signature of an UNDECLARED DEPENDENCY — it raises no error, it just makes the build slower than it should be, or occasionally fails to rebuild what it should. Line-to-rule matching is APPROXIMATE and each match carries its confidence: recipes are echoed after variable expansion, a leading `@` suppresses them entirely, implicit rules produce commands that are not in the file, and with `-j` the output interleaves. make emits no timestamps, so nothing is said about how long anything took.
| Name | Type | Req | Description |
|---|---|---|---|
| log | string | – | make's output, pasted |
| logFile | string | – | Path to a file with make's output |
| makefile | string | – | The Makefile pasted, if no folder is given |
| project | string | – | Project folder: its Makefile and real mtimes are read |
| targets | array | – | What was asked to be built, if known |
No output schema declared.
No examples provided.
make_role ~292
Answer the question that decides whether `make` is giving you anything: is this Makefile a BUILD, or a script LAUNCHER? make exists in order NOT to redo what is already done — mtimes, a dependency graph, skipping what did not change — and most Makefiles today use none of it: they are `make test`, `make lint`, `make docker-up`, all .PHONY, all running every time. Here each target is classified WITH THE SIGNAL that decided it (including the signals that pointed the other way: a .PHONY whose recipe creates that very file is a bug waiting to happen), what make is giving you TODAY is measured, and with `convertTo` it is converted to just, Taskfile or npm scripts. Whatever cannot be converted is OMITTED with its reason, rather than emitting a recipe that would look the same and rebuild every time. Honest caveat: `make` is POSIX and is everywhere; just and task have to be installed.
| Name | Type | Req | Description |
|---|---|---|---|
| convertTo | string | – | If given, also convert to that format instead of only diagnosing |
| file | string | – | Path to a specific Makefile |
| files | array | – | Project paths: used to know whether a target already exists on disk |
| project | string | – | Project folder: its Makefile and its real paths are read |
| text | string | – | The Makefile pasted |
No output schema declared.
No examples provided.
make_simulate ~251
Simulate `make` WITHOUT RUNNING ANYTHING: which targets would be rebuilt, in what order, and WHY, naming the file to blame. Answers the two questions no other tool answers: "why is it rebuilding this when I changed nothing?" and "why is it NOT rebuilding it?". With `project` it reads the Makefile and the REAL mtimes from disk; `touch` asks "what if I changed this file?" without changing it. The reasons use the same vocabulary as the Linux kernel's `make V=2`.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | – | Path to a specific Makefile |
| files | array | – | List of project paths, if no folder is given |
| forceAll | boolean | – | Like `make -B`: rebuild everything without looking at dates |
| project | string | – | Project folder: its Makefile and its files' real mtimes are read |
| targets | array | – | What to build. Empty = the Makefile's default target |
| text | string | – | The Makefile pasted, if there is no folder |
| touch | array | – | Files to treat as just-modified, WITHOUT actually touching them (like `make -W`) |
No output schema declared.
No examples provided.
mcp_catalog_audit Audit an MCP server catalogue for design quality ~276
Paste the `tools/list` response of an MCP server — yours, or a third party's you are evaluating whether to install — and check its catalogue quality: missing descriptions or annotations, a tool name that suggests it writes or deletes while its annotations say otherwise, context cost per tool (real BPE tokenization), and whether the top-level `instructions` field is set and fits under the ~2 KB some Tool Search clients trim. Add `serverJson`/`packageJson` to also catch the official MCP registry's own field-length and namespace-pattern limits, and a version mismatch between the two — the exact 422/403/400 errors this project hit publishing its own packages. This is NOT an access-security review: it does not evaluate what the tools are permitted to do, only how the catalogue is described.
| Name | Type | Req | Description |
|---|---|---|---|
| encoding | string | – | BPE encoding for the token-cost measurement |
| instructions | string | – | The server-level `instructions` string, if you have it |
| packageJson | string | – | package.json, to cross-check its version against server.json |
| serverJson | string | – | The registry manifest (server.json), to check its own limits |
| toolsListJson | string | yes | The `tools/list` response, either `{"tools": [...]}` or the bare array |
No output schema declared.
No examples provided.
number_bases ~89
Show an integer in binary, octal, decimal and hex, plus its bit view (signed/unsigned, popcount, leading/trailing zeros) at the chosen width. Accepts decimal, 0x…, 0b…, 0o…
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | e.g. "255", "0xff", "0b1010" |
| width | number | – | – |
No output schema declared.
No examples provided.
prompt_review Review a system prompt ~162
Check a system prompt against the rules that make it followable: an explicit output contract, a definition of done, what to do when the model does not know (the rule that prevents made-up answers), contradictions, unverifiable requirements, prohibitions with no alternative, example count and context budget. It does NOT judge whether the prompt is GOOD — that needs evals and a real model run — it is the deterministic layer underneath. Useful on your own system prompt.
| Name | Type | Req | Description |
|---|---|---|---|
| examples | integer | – | How many input→output (few-shot) examples accompany the prompt |
| outputFormat | string | – | The part describing the output format, if it is kept separate from the prompt |
| prompt | string | yes | The complete system prompt, exactly as it would be sent |
No output schema declared.
No examples provided.
queue_analyze ~184
M/M/c queue: with N resources, how many people wait, how long, and what fraction leaves without a place. With `waitingRoom` the model becomes M/M/c/K (finite waiting area — the realistic case); without it the queue is infinite. Output times are in MINUTES. Erlang and M/M/c are exactly the kind of arithmetic a model does "from memory" and gets wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| arrivalsPerHour | number | yes | Arrivals per hour (lambda), e.g. 12 groups/hour. |
| avgServiceMinutes | number | yes | Mean time one resource stays occupied, in minutes, e.g. 75. |
| servers | integer | yes | Resources: tables, beds, bays, checkouts… |
| waitingRoom | integer | – | Waiting places IN ADDITION to the resources. Omit for an unbounded queue (nobody leaves). |
No output schema declared.
No examples provided.
queue_loss ~98
Pure LOSS system (Erlang B): there is no waiting area, so whoever finds no free resource leaves. Car parks, workshop bays, phone lines, critical-care beds.
| Name | Type | Req | Description |
|---|---|---|---|
| arrivalsPerHour | number | yes | Arrivals per hour (lambda), e.g. 12 groups/hour. |
| avgServiceMinutes | number | yes | Mean time one resource stays occupied, in minutes, e.g. 75. |
| servers | integer | yes | – |
No output schema declared.
No examples provided.
queue_simulate ~132
Simulate the queue customer by customer (discrete events, fixed seed, so the result is reproducible). Its job is to CROSS-CHECK the analytic answer: if the simulation and the formula disagree, one of them is wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| arrivalsPerHour | number | yes | Arrivals per hour (lambda), e.g. 12 groups/hour. |
| avgServiceMinutes | number | yes | Mean time one resource stays occupied, in minutes, e.g. 75. |
| customers | integer | – | – |
| seed | integer | – | – |
| servers | integer | yes | – |
| waitingRoom | integer | – | – |
No output schema declared.
No examples provided.
queue_size ~183
How many resources do you need? Returns the MINIMUM that meets your target (max wait, max turned away, or max utilization) and how the system behaves at that number. This is the question asked before building a place, not after.
| Name | Type | Req | Description |
|---|---|---|---|
| arrivalsPerHour | number | yes | Arrivals per hour (lambda), e.g. 12 groups/hour. |
| avgServiceMinutes | number | yes | Mean time one resource stays occupied, in minutes, e.g. 75. |
| maxTurnedAway | number | – | Maximum fraction that leaves without a place (0-1). |
| maxUtilization | number | – | Maximum utilization per resource (0-1). The 0.85 rule for hospital beds is this number. |
| maxWaitMinutes | number | – | Maximum acceptable mean wait. |
| waitingRoom | integer | – | Waiting places in addition to the resources. |
No output schema declared.
No examples provided.
rag_prepare Chunk a text and rank the chunks against a query ~161
Split a text on real boundaries (paragraph, else sentence, never mid-word) with the overlap you ask for, and optionally rank the chunks against a query with BM25. Use it to prepare a RAG corpus, or to see why a query fails to retrieve what it should. No model involved: this is the lexical half, the one that finds literal terms — a code, a surname, a version number — that an embedding dissolves.
| Name | Type | Req | Description |
|---|---|---|---|
| overlap | integer | – | Overlap between consecutive chunks; capped at half the size |
| query | string | – | If given, chunks come back ranked by BM25 against it |
| size | integer | – | Target size of each chunk, in characters |
| text | string | yes | The text to split |
No output schema declared.
No examples provided.
regex_test ~53
Test a regex against a string: whether it matches, every match and its capture groups. Exact matching, not guessed.
| Name | Type | Req | Description |
|---|---|---|---|
| flags | string | – | – |
| pattern | string | yes | – |
| text | string | yes | – |
No output schema declared.
No examples provided.
semiconductor_carriers ~107
Carrier concentrations in a doped semiconductor at a given temperature: n, p, band gap (Varshni), intrinsic concentration and Fermi level. The minority carrier is computed as ni^2/majority to avoid the catastrophic cancellation that destroys precision when subtracting nearly equal dopings.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptors | number | – | Na in cm^-3 |
| donors | number | – | Nd in cm^-3 |
| material | string | – | – |
| temperatureK | number | – | – |
No output schema declared.
No examples provided.
semver_parse ~49
Parse a SemVer version (major.minor.patch + pre-release + build metadata).
| Name | Type | Req | Description |
|---|---|---|---|
| version | string | yes | e.g. "1.4.2-beta.1+build.9" |
No output schema declared.
No examples provided.
semver_satisfies ~59
Given a list of versions, which ones satisfy a SemVer range (^, ~, >=, <, x, …).
| Name | Type | Req | Description |
|---|---|---|---|
| range | string | yes | e.g. "^1.2.0" |
| versions | array | yes | – |
No output schema declared.
No examples provided.
sram_noise_margin ~300
Static noise margin (SNM) of a 6T SRAM cell by the butterfly method: two cross-coupled transfer curves and the side of the largest inscribed square. Returns the margin per mode (hold/read/write), the per-lobe split (which side would flip) and, optionally, the margin expressed in sigmas and the array failure probability. NOT the diagonal shortcut, which returns twice the correct value. First-order Shichman-Hodges: no body effect, no process variation, no parasitics — it shows why the margin moves, it is not a silicon signature.
| Name | Type | Req | Description |
|---|---|---|---|
| cellRatio | number | – | Pull-down / access width ratio. Rules read stability |
| cells | number | – | Array size, with sigmaMv, for the probability that at least one cell fails |
| lambda | number | – | Channel-length modulation (1/V) |
| mode | string | – | read opens the word line with both bit lines precharged (read disturb); in write, 0 is the correct result |
| pullUpRatio | number | – | Pull-up / access width ratio. Too high and the cell refuses to be written |
| sigmaMv | number | – | Cell-to-cell spread of the margin (mV), to express the SNM in sigmas |
| vdd | number | – | Supply voltage (V) |
| vth | number | – | Threshold voltage, same for nMOS and pMOS (V) |
No output schema declared.
No examples provided.
sram_read_path ~240
SRAM read timing from dV = I*t/C: bit-line capacitance, signal needed, and how long before a 1 can be told from a 0. The signal needed is the amplifier sensitivity PLUS several sigmas of its offset, which usually dominates. Also returns the time for 1/2/4/8 banks. First-order: constant cell current, capacitance linear in cell count, no line resistance or column coupling. The reads-per-second figure is signal development only — a real read adds precharge, decoding and amplification.
| Name | Type | Req | Description |
|---|---|---|---|
| banks | integer | – | How many banks the column is split into |
| cPerCellFf | number | – | Capacitance each cell adds (fF) |
| cellCurrentUa | number | – | Current with which the cell discharges the line |
| cellsPerColumn | number | – | Cells hanging off each bit line: this sets the capacitance |
| offsetSigmaMv | number | – | Amplifier offset, one sigma |
| sensitivityMv | number | – | Smallest difference the amplifier resolves nominally |
| sigmas | number | – | Sigmas of offset demanded as margin |
No output schema declared.
No examples provided.
standard_cell ~264
Standard-cell geometry from its height in TRACKS: height, area, tracks left free for routing, fins per transistor, density and power-rail resistance — plus what you gain and lose against another height. The rail resistance it returns is what ir_drop consumes. Warns when the height does not land on the routing grid, which misaligns pins when alternate rows are flipped to share a rail. Idealised geometry: no real design rules, no vias, no parasitic extraction.
| Name | Type | Req | Description |
|---|---|---|---|
| compareWithTracks | number | – | Compare against a cell of that height and return what is gained and lost |
| cppNm | number | – | Contacted poly pitch |
| finPitchNm | number | – | – |
| pitchNm | number | – | Routing-layer pitch: what one track is worth |
| rSheetOhmSq | number | – | Sheet resistance of the rail metal (ohm/square) |
| railTracks | number | – | Tracks consumed by BOTH rails together (VDD and VSS) |
| tracks | number | – | Height in routing tracks. Real libraries run ~6 to ~12; half tracks (7.5T) are legitimate |
| widthCpp | number | – | Cell width in CPP: an inverter is 2, a NAND2 is 3 |
No output schema declared.
No examples provided.
string_escape ~44
Escape a string for a target context: javascript, json, sql, regex, html, url or css.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | yes | – |
| text | string | yes | – |
No output schema declared.
No examples provided.
string_unescape ~45
Unescape a string from a context (javascript, json, sql, regex, html, url, css).
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | yes | – |
| text | string | yes | – |
No output schema declared.
No examples provided.
test_audit ~216
Audit a test file and say, case by case, what it ACTUALLY checks: which ones assert about a value, which only check that something exists, which assert nothing at all, and which are disabled. Returns the EVIDENCE behind each verdict (the assertions it found) so you can check the checker. TypeScript, JavaScript, Python, Java and Go. Executes nothing. Run it on the tests you just wrote, BEFORE you hand them over: told to "make the tests pass", widening a matcher is cheaper than fixing the bug, and this is what notices.
| Name | Type | Req | Description |
|---|---|---|---|
| dialects | array | – | Your own assertion helpers. If your team has a home-made expect(), declare it here and it will stop coming back as "indeterminate". |
| language | string | – | Required if you pass `text` without `path`. |
| path | string | – | Path to the test file. The language is inferred from the extension. |
| text | string | – | The test file as text. Alternative to `path`. |
No output schema declared.
No examples provided.
test_cases ~188
From a TYPE to the cases worth testing, with no model involved: equivalence partitions and boundary values derived from a TypeScript signature or a JSON Schema. For each parameter it returns the TECHNIQUE that applies and why — boundary values only mean something where there is an ordering, so they are NOT applied to a boolean or an enum. It adds the properties that can be asserted without knowing the domain, plus a fast-check test ready to paste. Use it BEFORE writing the tests, so you do not miss the cases everyone misses.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Function name for the generated code. Inferred from the signature if you pass one. |
| schema | string | – | JSON Schema (an object with `properties`). Alternative to `signature`. |
| signature | string | – | TypeScript signature, e.g. function calculate(price: number, kind: 'A' | 'B'): number |
No output schema declared.
No examples provided.
test_debt ~148
A project's DISABLED-test debt, WITH ITS AGE. Walks the folder, finds every `it.skip`, `xit`, `@Ignore`, `@pytest.mark.skip` or `t.Skip`, and dates it with `git blame`. None of those cases appears in a coverage report, because as far as the runner is concerned they do not exist: this is the debt nobody measures and the one that lasts longest — disabled 'to fix later', and later never comes. Sorted oldest first, which is what makes it actionable.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | yes | Root of the project (or subtree) to review. |
| maxFiles | integer | – | Cap on how many test files to read. |
No output schema declared.
No examples provided.
test_diff_audit ~183
Compare TWO versions of the same test file and say whether the change STRENGTHENED or WEAKENED the safety net: widened matchers (toBe -> toContain -> toBeGreaterThan), assertions that disappeared, and cases that stopped running. Call it on your own work after touching tests, and above all after fixing a red suite: reaching green by softening an assertion is cheaper than fixing the bug, and this is what catches it. Executes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | New version, as text. |
| afterPath | string | – | Path to the new version. |
| before | string | – | Previous version, as text. |
| beforePath | string | – | Path to the previous version (e.g. what `git show HEAD:file` produced). |
| language | string | – | Required if you pass the texts without paths. |
No output schema declared.
No examples provided.
text_decode ~31
Try to decode a string from URL-encoding, Base64 and HTML entities.
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | – |
No output schema declared.
No examples provided.
text_encode ~35
Encode a string to URL-encoding, Base64 and HTML-escape (all three at once).
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | – |
No output schema declared.
No examples provided.
timestamp_convert ~76
Convert an instant between formats: Unix (s/ms), ISO 8601, human, log, and per-locale/timezone. Accepts a Unix number or a date string.
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | e.g. "1700000000" or "2024-01-15T10:30:00Z" |
No output schema declared.
No examples provided.
timing_path ~259
Synchronous path analysis: setup and hold slack, and maximum frequency. The clock period appears ONLY in the setup check, so a setup failure is fixed by lowering the frequency and a hold failure is not — no speed makes it work. Skew enters both with opposite signs. With irDropV+vdd+vth it also derates the logic by voltage (alpha-power law), connecting power delivery to the clock. First-order: ONE path, delays as numbers, no process variation, no jitter, no temperature derating.
| Name | Type | Req | Description |
|---|---|---|---|
| irDropV | number | – | With vdd and vth: slows the logic down by that voltage drop |
| tclkNs | number | – | Clock period |
| tcqNs | number | – | Launch flop delay, edge to output |
| tholdNs | number | – | – |
| tlogicMinNs | number | – | Logic, SHORT path. Rules hold |
| tlogicNs | number | – | Logic, LONG path. Rules setup |
| tsetupNs | number | – | – |
| tskewNs | number | – | Positive = the clock reaches the capturing flop LATER: gives setup, takes hold |
| vdd | number | – | – |
| vth | number | – | – |
No output schema declared.
No examples provided.
What is the Jarroba Tools MCP server?
Jarroba Tools is an MCP server listed in the public MCP registry as io.github.Invarato/jarroba-tools. 104 deterministic tools for your AI: logs, tests, SQL, diagrams, SPARQL. Local, no network. This page covers its npm package (@jarroba/mcp).
Is the Jarroba Tools MCP server safe to use?
Jarroba Tools scores 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Jarroba Tools MCP server expose?
Jarroba Tools exposes 104 tools: cidr_info, cidr_contains, cidr_vlsm, count_tokens, hash_text, and 99 more. Their descriptions and schemas cost roughly 13,916 tokens of context every time the server is loaded.
Is the Jarroba Tools MCP server still maintained?
Jarroba Tools is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Jarroba Tools MCP server under?
Jarroba Tools declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.