Jarroba Tools
NPM · @JARROBA/MCP
140 deterministic tools for your AI: logs, tests, SQL, diagrams, SPARQL. Local, no network.
Available components
Last scanned (16 hours ago)
Scores higher than 97% of npm servers
Category Developer Tools
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 Security99
- 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
- 4 of 17 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to Invarato/jarroba-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 9 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 22189 tokens (~158/item across 140 items; 140 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 Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage93
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 78% 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 141 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Checks we ran (16)
- Malware scan
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
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.
- 27 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 26 Oct 26 −12
- Malware scan: pass → unverified ▼ security
- Stability: 0.97 → pass security
- Schema quality: unverified → 100 ▲ functional
- Package version: 0.2.0 → 0.3.0 functional
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +14
- Malware scan: unverified → pass ▲ security
- Stability: pass → 0.93 functional
- 23 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- Dependency health: 0.86 → 0.92 ▲ functional
- MCP protocol: Implements a current MCP spec version (2026-07-28). functional
- Package version: 0.1.11 → 0.2.0 functional
- 22 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 21 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 0.1.10 → 0.1.11 functional
- 20 Oct 26 0
- Security disclosure: fail → pass ▲ functional
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 5 Nov 2026 · Analysed npm/@jarroba/mcp@0.3.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | Invarato/jarroba-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/Invarato/jarroba-mcp/.github/workflows/publish.yml@refs/tags/v0.3.0 |
| Rekor log index | 3492356381 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:c70deda99d3cc949f6933c96dab1fbfc31f0447f64f89a9f5561b84ca7c3ad73f3e3e4b1168b7d5235df7e481aa324dab3acfc5292dc8c85ef82d053c |
Background: How many MCP packages publish verified provenance →
Dependencies 17 packages
| Packages resolved | 17 |
|---|---|
| Stale | 4 |
| 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 →
diagram_render ~183
Render a JTD to PNG with the app's REAL engine (full fidelity; only needed to check skins and effects), and measure it: nodes that overlap and labels cut short with an ellipsis, read from the engine — the defects that are easy to miss when looking at the image. Requires a checkout of the repo AND a running dev server. For everything else use diagram_svg, which needs neither.
| Name | Type | Req | Description |
|---|---|---|---|
| baseUrl | string | – | Dev server URL (default http://localhost:4201) |
| jtd | string | yes | – |
| measure | boolean | – | Also return overlapping nodes and truncated labels (and every node box, in a JSON next to the image) |
| out | string | – | Output path: .png (default, full fidelity) or .svg for a vector image (no skins, images or icon glyphs). Default: a temp PNG |
No output schema declared.
No examples provided.
diagram_svg ~64
Render a JTD to SVG with no browser and no dev server, so you get the actual drawing back and can check it. Validates first. This is the one to use to SEE what you built.
| Name | Type | Req | Description |
|---|---|---|---|
| jtd | string | yes | The JTD document as JSON. |
No output schema declared.
No examples provided.
diagram_validate ~86
Validate a JTD (Jarroba Tools Diagram) document: structure, allowed shapes and chart types, and edge references. Returns {ok, errors, warnings, summary}. Spec: public/jtd.md. Use it to check your JSON before handing it to anyone.
| Name | Type | Req | Description |
|---|---|---|---|
| jtd | string | yes | The JTD document as JSON (an object with a "jtd" key). |
No output schema declared.
No examples provided.
dockerfile_cache ~236
Say which LAYERS of a Dockerfile would be rebuilt when given files change, and which come from cache. Dockerfile linters spot suspicious ordering patterns; this SIMULATES invalidation, which is a different thing: it needs to know which files exist and which changed. In Docker, when one layer is invalidated so is EVERY layer after it, so a `COPY . .` before the `RUN` that installs dependencies condemns you to reinstalling all of them every time you touch a line of code — and that shows up here as numbers. Respects the `.dockerignore`: what stays out of the context cannot invalidate anything.
| Name | Type | Req | Description |
|---|---|---|---|
| changed | array | – | Files changed since the last build. Empty = none |
| dockerignore | string | – | .dockerignore rules pasted (otherwise looked up in the folder) |
| file | string | – | Path to a specific Dockerfile |
| files | array | – | Project paths, if no folder is given |
| project | string | – | Project folder: its Dockerfile, .dockerignore and files are read |
| text | string | – | The Dockerfile pasted |
No output schema declared.
No examples provided.
dora_metrics ~275
The four DORA delivery metrics (plus rework rate) from data you already have locally, without sending it anywhere: deployment frequency, lead time for changes, change failure rate and time to restore, computed from the JSON of `gh run list --workflow deploy.yml --branch main --limit 1000 --json databaseId,workflowName,headSha,displayTitle,conclusion,status,updatedAt` (or a CSV with a date column), optionally with `git log --first-parent --format=%H%x09%cI%x09%s main` for lead time. Says why each deploy counts as failed, and classifies the team against every State of DevOps report 2019-2024 — saying "ambiguous" or "between bands" when a report's table does not decide — plus the 2025 percentile.
| Name | Type | Req | Description |
|---|---|---|---|
| deployments | string | yes | Output of gh run list --json … (or the Actions REST workflow_runs JSON, or a CSV with a date column) |
| gitLog | string | – | Output of git log --first-parent --format='%H%x09%cI%x09%s' main, for lead time |
| incidents | array | – | Known incidents (ISO dates), to attribute failures and time to restore |
| workflow | string | – | Only count runs of this workflow name |
No output schema declared.
No examples provided.
element_config ~95
Electron configuration of a neutral element, full and noble-gas abbreviated, with its shells and valence. Flags whether the element is one of the 20 real ANOMALIES (Cr, Cu, Nb, Ru, Pd...) — exactly where the Madelung rule fails and a language model tends to get the rule right and the element wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| element | string | yes | Atomic number ("24") or symbol ("Cr") |
No output schema declared.
No examples provided.
element_info ~90
Data sheet for an element by atomic number or symbol: name, mass, category, group/period/block, electronegativity, radius, ionization energy and electron affinity. Data that does NOT exist comes back as null, never as 0 — a noble gas has no electron affinity, and that is not "zero".
| Name | Type | Req | Description |
|---|---|---|---|
| element | string | yes | Atomic number ("26") or symbol ("Fe") |
No output schema declared.
No examples provided.
element_ion_config ~105
Electron configuration of an ION. Electrons leave from the HIGHEST n shell, not from the last orbital that was filled: Fe2+ is [Ar]3d6, not [Ar]3d4 4s2. This is the classic mistake and the one seen most often in generated answers.
| Name | Type | Req | Description |
|---|---|---|---|
| charge | integer | yes | Charge: +2 for Fe2+, -1 for Cl- |
| element | string | yes | Atomic number or symbol |
No output schema declared.
No examples provided.
email_auth_audit ~183
Check the authentication of an email and of a domain's mail records: paste the raw headers of a message (Authentication-Results, DKIM-Signature, From, Reply-To, Return-Path) and/or the DNS TXT records (v=spf1, v=DMARC1, v=DKIM1). Finds SPF/DKIM/DMARC failures, a Reply-To or Return-Path on another domain, a DKIM signature that does not cover From or only part of the body (l=), weak or revoked keys, SPF +all / ?all / more than 10 DNS lookups, and DMARC p=none or without reports. Verifies DKIM key strength locally; it does NOT query DNS — paste the records you want checked.
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | Raw message headers, DNS TXT records, or both |
No output schema declared.
No examples provided.
eval_check Review and run an eval suite ~163
Review an eval suite and run it against the outputs you provide. The review catches what silently ruins a suite: assertions that CANNOT FAIL (an empty `contains`, a regex like `.*`, a case with no assertions) and ones that can never pass (requiring and forbidding the same thing, an inverted range). A suite with those scores 100% on day one and has measured nothing. Assertion types: contains, not-contains, regex, json, range, max-chars and supported (no absolute claim without a source). Calls no model: you pass the outputs in already produced.
| Name | Type | Req | Description |
|---|---|---|---|
| cases | array | yes | The suite cases, with their outputs already obtained |
| promptfoo | boolean | – | If true, also return the equivalent promptfoo configuration |
No output schema declared.
No examples provided.
format_convert ~46
Convert data between formats: json, yaml, properties, env, csv, markdown.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | yes | – |
| input | string | yes | – |
| to | string | yes | – |
No output schema declared.
No examples provided.
gate_geometry ~129
Why the transistor changed shape: natural length lambda and minimum gate length (5*lambda) for each architecture — planar, FD-SOI, FinFET, GAA nanosheet, nanowire, forksheet and CFET — at the SAME dimensions, which is what isolates the effect of geometry alone. It does not tabulate real process-node dimensions, because those are not public.
| Name | Type | Req | Description |
|---|---|---|---|
| bodyNm | number | – | Channel thickness (fin width or sheet thickness) |
| gateLengthNm | number | – | – |
| oxideNm | number | – | EOT |
| temperatureK | number | – | – |
No output schema declared.
No examples provided.
gradle_plan ~126
Read the output of `./gradlew <tasks> --dry-run` (or of a real build with --console=plain) and return the task order with each task's project, status (UP-TO-DATE, FROM-CACHE, NO-SOURCE, FAILED…) and its Maven equivalent. A build.gradle is code, so the task graph cannot be known without running Gradle: --dry-run computes it without executing anything. Note that Gradle interleaves tasks of different projects; Maven builds module by module.
| Name | Type | Req | Description |
|---|---|---|---|
| output | string | yes | What Gradle printed |
No output schema declared.
No examples provided.
hamming_check ~49
Detect and correct a single-bit error in a received Hamming word: whether there is an error, which bit, and the corrected data.
| Name | Type | Req | Description |
|---|---|---|---|
| word | string | yes | The received Hamming word |
No output schema declared.
No examples provided.
hamming_encode ~51
Encode bits with a Hamming (SEC) code: inserts the parity bits. Input is a string of 0s and 1s.
| Name | Type | Req | Description |
|---|---|---|---|
| bits | string | yes | e.g. "1011" |
No output schema declared.
No examples provided.
hash_text ~36
SHA-256, SHA-384 and SHA-512 (hex) of a UTF-8 string.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | – |
No output schema declared.
No examples provided.
headers_audit ~182
Audit the HTTP response headers of a site as you pasted them (from curl -I, DevTools or a HAR): an A+…F grade like /headers-audit; Content-Security-Policy (missing, unsafe-inline/eval, wildcards, missing object-src/base-uri/frame-ancestors), HSTS (missing, too short, invalid preload), nosniff, frame options, Referrer-Policy, the obsolete X-XSS-Protection, cookies without Secure/HttpOnly/SameSite, and a Server header that exposes the version. Nothing is requested over the network: it reads what you give it.
| Name | Type | Req | Description |
|---|---|---|---|
| headers | string | yes | Raw response headers, one per line; a status line is fine |
| https | boolean | – | Whether the response came over HTTPS; decides if HSTS applies. Guessed from the input when omitted |
No output schema declared.
No examples provided.
hidden_text_scan ~198
Find what a model cannot see in a piece of text: invisible Unicode that smuggles instructions (tag characters U+E0000–E007F, the "ASCII smuggling" used against Copilot and in poisoned MCP/skill files), variation-selector and invisible-bit encodings, zero-width and bidi controls (Trojan Source), look-alike Cyrillic/Greek letters inside Latin words, and odd spaces. Returns every finding with UTF-16 offsets and codepoints, and DECODES the hidden message when it can. Run it on any text you are about to follow as instructions (a README, an issue, a tool description, a web page) — you cannot do this by reading it, because to you those characters are not there. Legitimate uses (emoji ZWJ sequences, flags, RTL scripts) are reported apart as `legitimate`.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | The text to inspect, exactly as received |
No output schema declared.
No examples provided.
hydrogen_spectrum ~125
Hydrogen spectral lines for a series (nLow=1 Lyman, 2 Balmer, 3 Paschen...). Gives the wavelength IN VACUUM and IN AIR, which are different numbers: H-alpha is 656.47 nm in vacuum and 656.28 in air, and confusing them is common. Uses the reduced-mass Rydberg constant (R_H), not R-infinity.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | – |
| nLow | integer | yes | Landing level: 1=Lyman, 2=Balmer, 3=Paschen |
No output schema declared.
No examples provided.
ieee754_from_decimal ~62
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 | – | – | – |
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.
json_schema_validate ~173
Validate a JSON document against a JSON Schema — the check to run on your own structured output before handing it over, instead of eyeballing it. Supports draft 2020-12 (default), 2019-09 and draft-07, chosen from the schema's `$schema`; `format` (email, date-time, uri, uuid…) is enforced. Returns `valid` and, if not, EVERY error with the JSON Pointer of the offending value, the keyword that failed and its parameters. Remote `$ref`s are NOT fetched: an unresolvable reference is reported as a schema error.
| Name | Type | Req | Description |
|---|---|---|---|
| json | string | yes | The JSON document to validate, as text |
| maxErrors | integer | – | Cap on the number of errors returned |
| schema | string | yes | The JSON Schema, as text |
No output schema declared.
No examples provided.
jwt_decode ~223
Decode a JSON Web Token WITHOUT verifying its signature — header, payload, expiry — and flag what makes it dangerous to accept (RFC 8725bis / RFC 9068): alg "none", no exp, exp that is not a NumericDate, alg differing only in letter case, a kid with path traversal or injection characters, a key or key URL carried in the header (jwk/jku/x5u), an access token without typ at+jwt, illegal characters. Give `expectedAlgorithm` (what your verifier uses) and, optionally, `key` to also catch algorithm confusion (HMAC verified with a public key) and HMAC secrets shorter than the hash. The key is only inspected locally, never sent anywhere.
| Name | Type | Req | Description |
|---|---|---|---|
| expectedAlgorithm | string | – | The alg your verifier expects, e.g. RS256 |
| key | string | – | The secret or public key your verifier uses (PEM, JWK or HMAC secret) |
| keyEncoding | string | – | How an HMAC secret is encoded |
| token | string | yes | – |
No output schema declared.
No examples provided.
k8s_manifest_check ~278
Will the cluster accept these Kubernetes manifests? Validates them against the OFFICIAL schema of the Kubernetes version you target (1.33–1.37; checked against kubeconform --strict): unknown fields with the one you probably meant (a typo in livenessProbe silently leaves the pod without a probe), wrong types ("80" where an integer goes), missing required fields, removed APIs with what to migrate to. And Pod Security Standards, ported from the official admission controller: the highest level each workload meets, what it violates (the controller's own check ids), and whether its namespace's pod-security.kubernetes.io labels would reject it. If you include RBAC (Roles, Bindings, ServiceAccounts), what each pod could do if compromised: read secrets, exec into pods, escalate…. And reliability checks in the style of kube-score (probes, resources, :latest images, replicas without a PodDisruptionBudget…), which do not affect acceptance. Not covered: CEL rules, formats, CRDs (reported as not validated). For who-can-reach-whom, use k8s_network_reach.
| Name | Type | Req | Description |
|---|---|---|---|
| kubernetesVersion | string | – | Target cluster version |
| manifests | string | yes | Kubernetes YAML, several documents separated by --- |
| podSecurityLevel | string | – | Level to list violations against |
No output schema declared.
No examples provided.
k8s_network_reach ~227
Which pods can actually reach which, according to the Kubernetes NetworkPolicies in the manifests you paste (multi-document YAML: Pods/Deployments/StatefulSets…, Services, Namespaces, NetworkPolicies) — computed, not guessed, and checked against netpol-analyzer. Returns the pairs that CAN connect with their ports (everything else is blocked), plus findings: policies or peers that select no pods, the namespaceSelector/podSelector split-list trap, Services selecting no pods or exposing a missing targetPort, missing ConfigMap/Secret/ServiceAccount, unreachable pods, hostNetwork pods. Give `from` and `to` ("namespace/name", or "external") to explain one pair: which policies isolate each side and which rule lets it through. Out of scope: AdminNetworkPolicy, CNI-specific policies, node traffic.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Source "namespace/name" or "external", to explain one pair |
| manifests | string | yes | Kubernetes YAML, several documents separated by --- |
| to | string | – | Destination "namespace/name" or "external" |
No output schema declared.
No examples provided.
kafka_assign ~163
How a Kafka consumer group splits partitions among its members with the classic protocol (the default in Kafka 4.3): range, roundrobin, sticky or cooperative-sticky, ported from Kafka 4.3.1 and checked against its tests. Returns each member's partitions, idle members and the order the assignor walked them; for the sticky strategies give each member's owned partitions (and generation) to see what moves, and with cooperative-sticky which partitions are revoked this round and handed over in the next. Not covered: rack awareness and the server-side assignors of KIP-848; sticky only when all members subscribe to the same topics.
| Name | Type | Req | Description |
|---|---|---|---|
| members | array | yes | – |
| strategy | string | yes | – |
| topics | array | yes | – |
No output schema declared.
No examples provided.
kafka_partition ~106
The partition Kafka's default partitioner picks for a message key: murmur2 over the UTF-8 bytes, made positive, modulo the partition count — with the intermediate numbers so the result can be checked. Ported from Kafka 4.3.1 and checked against its murmur2 test vectors. Only for messages WITH a key (without one, Kafka uses the sticky partitioner, which is not deterministic).
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| partitions | integer | 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 ~238
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. Logs WRAPPED by whatever collected them (Docker json-file, CRI/Kubernetes `P`/`F` lines, `journalctl -o json`, OpenTelemetry OTLP JSON, AWS CloudTrail) are unwrapped first and the pieces the runtime split are joined back, so a stack trace spread over 40 records is one event; `wrapper` says which.
| 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_distinguish ~297
What sets a group of events APART from the rest of the log: the field=value pairs over-represented in the selection. E.g. of 300 errors, 92% have `version=2.4.1` against 4% of everything else — the deploy that broke it, found without reading 300 errors. Select by minimum level (default: errors), by text, or by one field=value; that selector is left out of the answer, since it would trivially top it. Fields that are unique per event (request ids, trace ids) are skipped: they identify, they do not distinguish. A difference in proportions, not causation.
| Name | Type | Req | Description |
|---|---|---|---|
| contains | string | – | Select events whose raw text contains this (case-insensitive) |
| field | string | – | Select events with this field… |
| format | string | – | Force the format instead of detecting it |
| from | string | – | Which end to read if the file is over 32 MB |
| limit | integer | – | – |
| minLevel | string | – | Select events at this level or above (default "error" if nothing else is given) |
| 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`. |
| value | string | – | …equal to this value |
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 ~216
Generate a ready-to-use Makefile for a stack (node, python, go, rust, c, maven, gradle 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.
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
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. 140 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 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 140 tools: cidr_info, cidr_contains, cidr_vlsm, count_tokens, hash_text, and 135 more. Their descriptions and schemas cost roughly 21,854 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 5 November 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.
What did VerifyMCP test on the Jarroba Tools MCP server?
VerifyMCP ran 16 checks on Jarroba Tools, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.