Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Jarroba Tools

NPM · @JARROBA/MCP

140 deterministic tools for your AI: logs, tests, SQL, diagrams, SPARQL. Local, no network.

Available components

0 this week 94 Trust /100

Last scanned (15 hours ago)

Scores higher than 97% of npm servers

Category Developer Tools

Trust breakdown (7 categories)

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
What we tested

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 →

Changelog

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
Diagnostics

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 →

MCP tools · 140 exposed · ~21,854 tokens

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 →

Tool Tokens
abtest_analyze ~207

Analyse a conversion A/B (or A/B/n) test the way a statistician would, instead of eyeballing two percentages. Two variants: difference and relative lift with confidence intervals, the right test (two-proportion z, or Fisher's exact when counts are low), p-value, significance and winner, plus the Bayesian probability that the variant beats control (Beta(1,1) priors). More than two: an omnibus chi-square and every variant against control with Holm or Benjamini-Hochberg correction. Always checks sample ratio mismatch (SRM) against the planned split — a broken split invalidates the result, however good it looks.

NameTypeReqDescription
alphanumber––
controlinteger–Index of the control variant
correctionstring––
plannedSplitarray–Planned split, e.g. [1,1,2]. Default: equal
variantsarrayyesControl first unless `control` says otherwise

No output schema declared.

No examples provided.

abtest_sample_size ~170

Plan a conversion A/B test before running it: visitors per variant needed to detect a given relative lift (same formula as R's power.prop.test, two-sided), and how many days that takes with your traffic. Or the reverse: the smallest lift detectable with the visitors you can get.

NameTypeReqDescription
alphanumber––
baselineRatenumberyesControl conversion rate, e.g. 0.10
dailyVisitorsnumber–Daily traffic, for the duration
powernumber––
relativeLiftnumber–Relative lift to detect: 0.1 = +10%. Or give visitorsPerVariant
trafficFractionnumber––
variantsinteger––
visitorsPerVariantinteger–→ minimum detectable lift instead

No output schema declared.

No examples provided.

abtest_sequential ~165

Looking at an A/B test before it ends needs a stricter threshold per look, or false positives balloon. Returns the two-sided z boundary per look of a group-sequential design, Pocock or O'Brien-Fleming: equally spaced `looks`, or arbitrary `informationFractions` (Lan-DeMets alpha spending). Stop at look k only if |z| ≥ its boundary.

NameTypeReqDescription
alphanumber––
informationFractionsarray–Share of the planned sample at each look, increasing, e.g. [0.3,0.55,1]
looksinteger–Equally spaced looks, final one included
methodstring–obf = O'Brien-Fleming, pocock = Pocock

No output schema declared.

No examples provided.

access_check ~405

Evaluate "can this principal do this action on this scope, and WHY?" against a vendor-neutral identity/RBAC model that mirrors Azure RBAC, AWS IAM/Organizations, GCP Resource Manager or Kubernetes RBAC — each rule verified against the official docs (access.md). Returns a three-valued verdict — allowed / denied / indeterminate (an unmodelled condition would decide it) — with a step-by-step trace of which rule decided and why. Nothing is looked up online: you must pass the scenario data yourself in "world".

NameTypeReqDescription
actionstringyese.g. "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read" (Azure), "s3:GetObject" (AWS), "storage.objects.get" (GCP), "get:pods" (Kubernetes: "verb:resource")
planestring–Azure only: control-plane or data-plane action (Azure keeps them as separate grant sets; ignored for the other providers).
principalIdstringyes–
providerstringyes–
requestContextobject–AWS only: the request context, so Condition blocks are evaluated instead of left indeterminate, e.g. {"aws:SourceIp": "10.1.2.3", "aws:PrincipalTag/team": "data", "aws:MultiFactorAuthPresent": "true"}
scopeIdstringyes–
worldobjectyesScenario data. Shape depends on "provider" — azure: {ambitos, pertenencias?, roles?, asignaciones?, denegaciones?}; aws: {ambitos, cuentasGestion?, identidades?, recursos?, scps?, boundaries?, rcps?,…

No output schema declared.

No examples provided.

access_diff ~339

"What if" access diff: compares two versions of the same scenario (e.g. before/after removing a role assignment, or offboarding a principal) against a list of (principal, action, scope) checks, and reports who gains access and who loses it. A check that flips to/from "indeterminate" counts as neither a gain nor a loss — only a genuine allowed<->denied flip does.

NameTypeReqDescription
checksarrayyes–
providerstringyes–
worldAfterobjectyesScenario data. Shape depends on "provider" — azure: {ambitos, pertenencias?, roles?, asignaciones?, denegaciones?}; aws: {ambitos, cuentasGestion?, identidades?, recursos?, scps?, boundaries?, rcps?,…
worldBeforeobjectyesScenario data. Shape depends on "provider" — azure: {ambitos, pertenencias?, roles?, asignaciones?, denegaciones?}; aws: {ambitos, cuentasGestion?, identidades?, recursos?, scps?, boundaries?, rcps?,…

No output schema declared.

No examples provided.

access_who_can ~201

The dual of access_check: given a list of candidate principals, returns which of them can do this action on this scope — each with its own verdict and trace, same shape as access_check.

NameTypeReqDescription
actionstringyes–
planestring––
principalIdsarrayyes–
providerstringyes–
scopeIdstringyes–
worldobjectyesScenario data. Shape depends on "provider" — azure: {ambitos, pertenencias?, roles?, asignaciones?, denegaciones?}; aws: {ambitos, cuentasGestion?, identidades?, recursos?, scps?, boundaries?, rcps?,…

No output schema declared.

No examples provided.

actions_audit ~188

Audit GitHub Actions workflows for the injection and supply-chain patterns behind real incidents: untrusted `${{ github.event.* }}` interpolated into `run:` or github-script (command/script injection), `pull_request_target` that checks out the fork's code with the repo's secrets ("pwn request"), actions pinned to a tag or branch instead of a commit SHA (tj-actions/changed-files, CVE-2025-30066, 23,000+ repos), `permissions: write-all`, hard-coded secrets, curl-pipe-to-shell and suspicious hosts. Each finding carries a rule id, severity, confidence (structural vs heuristic), file, line and job. Static analysis of the YAML you pass: nothing is fetched or run.

NameTypeReqDescription
filesarrayyesWorkflow files, e.g. {"path": ".github/workflows/ci.yml", "content": "..."}

No output schema declared.

No examples provided.

agent_config_audit ~201

Audit the configuration an AI coding agent runs with, before you trust a repo or install something: Claude Code settings (hooks, permissions like Bash(*), bypass mode, environment variables that redirect the API), MCP server configs for any client (shell servers, unpinned packages, privileged Docker, plain HTTP, auto-approval), VS Code tasks that run when a folder opens and auto-approve settings, Codex and Gemini CLI configs, environment files, and instruction text (CLAUDE.md, AGENTS.md, skills, subagents) carrying hidden Unicode, instruction-override or fake-authority phrasing, data leaks through image links, or download-and-execute commands. Findings that run WITHOUT anyone approving (a hook, a task on open) come first in `runsWithoutAsking`.

NameTypeReqDescription
filesarrayyesConfig and instruction files with their real paths, e.g. {"path": ".claude/settings.json", "content": "..."}

No output schema declared.

No examples provided.

api_breaking_changes ~139

Compare two OpenAPI specifications and say which changes BREAK a client that already exists - which is the question you actually ask before deploying, and the one a colour diff does not answer. Tells apart pairs that look identical in a diff: adding an OPTIONAL parameter breaks nothing, adding a REQUIRED one does; ADDING an enum value is safe, REMOVING one is not; dropping a query parameter is ignored, dropping a path one changes the URL. Every finding says why.

NameTypeReqDescription
afterstringyesThe one you want to publish
beforestringyesThe published specification (JSON or YAML)
formatstring––

No output schema declared.

No examples provided.

api_code_generate ~134

Turn a request into pasteable code in one of eleven targets: curl, fetch, axios, Python requests, HTTPie, Go, Java, C#, PHP, PowerShell or Rust. Emits the import lines and escapes per language, and gets right the things that are habitually wrong (in C# the Content-Type belongs to the content, not the headers; in Go an unused import does not compile).

NameTypeReqDescription
indexinteger–Which request, if the input has several
inputstringyesA curl command, or any supported collection (the first request is used)
languagestring––

No output schema declared.

No examples provided.

api_collection_convert ~129

Convert an API collection between formats, entirely offline. Reads Postman v2.1, Insomnia, Bruno .bru, OpenAPI 3.x / Swagger 2.0 (JSON or YAML), a browser HAR, or curl commands - the format is detected. Writes Postman, Bruno (as a file tree) or curl. Reports what cannot be translated (Postman/Bruno scripts, file fields, Insomnia templates) instead of dropping it silently.

NameTypeReqDescription
inputstringyesThe collection, specification or curl commands, as text
tostring–Output format

No output schema declared.

No examples provided.

api_collection_secrets ~97

List the credentials hidden inside an API collection before you share it: tokens, cookies, API keys and passwords, with their location and a MASKED sample. An exported collection carries its secrets with it, and this is the file people attach to tickets. Heuristic by name: it masks what it recognises, it never claims a file is clean.

NameTypeReqDescription
inputstringyesThe collection, specification or curl commands, as text

No output schema declared.

No examples provided.

api_cors_preflight ~114

Will the browser send an OPTIONS preflight before this request, and WHY? Answers without touching the network. Half of "it works in curl but not in my page" is a preflight the server does not answer, and knowing which of the three things triggers it (the method, the Content-Type or a custom header) changes where to look. Also lists the headers the browser refuses to let a page set.

NameTypeReqDescription
headersobject–Request headers, as an object
methodstring––

No output schema declared.

No examples provided.

archsim_simulate ~207

Simulate an architecture (archsim format) with the Architecture Simulator's engine: steady-state throughput, p50/p95 RESPONSE latency (it ends at the first queue) and PROCESSING latency, availability, bottleneck, infrastructure cost per hour, per-queue lag / "full in N s" / silently lost messages, per-node utilization, and the Report's findings. Optionally also runs a timed phase with a scenario (peak, DDoS, LLM outage) and reports the worst of it. Deterministic; nothing leaves the machine.

NameTypeReqDescription
aiReqPerSecnumber–Requests/s entering through AI sources (nodes with no input that are not clients). Default 0.
archsimstringyesThe archsim document as JSON.
phaseobject–Timed phase after steady state (e.g. {"seconds":60,"scenario":{"loadMult":6}}): queues fill, autoscaling lags (~60 s by default).

No output schema declared.

No examples provided.

archsim_validate ~118

Validate an architecture-simulation document (the archsim format, spec: archsim.md next to llms.txt). Checks the JSON shape, known node kinds and edge references, and builds the graph with the type defaults. Returns {ok, error?, summary: {nodes by kind, edges, queues without consumers}}. Use it before archsim_simulate or before handing the JSON to a person.

NameTypeReqDescription
archsimstringyesThe archsim document as JSON ({"archsim":1,"nodes":[…],"edges":[…]}).

No output schema declared.

No examples provided.

band_formation ~131

A tight-binding chain of N atoms: the N levels it produces, the bandwidth, and the spacing between levels. Shows where a band COMES FROM — with 2 atoms the level splits in two (alpha +/- beta), and with many the spacing falls as 1/N until it drops below k_B*T, which is when talking about individual levels stops making sense.

NameTypeReqDescription
alphanumber–Energy of the isolated atomic orbital (eV)
atomsinteger––
betanumber–Integral de salto β (eV, negativa)
electronsPerAtomnumber––

No output schema declared.

No examples provided.

binary_calc ~87

Programmer's calculator on exact integers (BigInt): arithmetic (add/sub/mul/div/mod/pow) and bitwise (and/or/xor/nand/nor/xnor/shl/shr/sar/rol/ror). Returns the result in every base.

NameTypeReqDescription
astringyes–
bstringyes–
opstringyes–
width–––

No output schema declared.

No examples provided.

bond_energy ~151

Energy curve between the two atoms of a measured diatomic molecule: bond length, well depth (De), REAL dissociation energy (D0) and zero-point energy. D0 is NOT De — the molecule is never at rest at the bottom of the well, not even at 0 K, and in H2 the difference is 0.27 eV. Covalent bonds use Morse, noble gases use Lennard-Jones.

NameTypeReqDescription
moleculestringyesH2, N2, O2, F2, Cl2, HF, HCl, Li2, Na2, He2, Ne2, Ar2, Kr2, Xe2
temperatureKnumber––

No output schema declared.

No examples provided.

calc_derive ~192

Differentiate an expression symbolically, exactly: "x^3 + 2x", "sin(x)*cos(x)", "x^x". Keeps units, so d/dx (3 m * x) is "3 m" and not 3. Can take higher-order derivatives and evaluate the result at a point. Says which name it read as a unit, and refuses to answer "0" when the variable is not in the expression.

NameTypeReqDescription
atnumber–Also evaluate the derivative at this value of the variable
expressionstringyese.g. "x^3 + 2x" or "9.8 m/s^2 * t^2 / 2"
orderinteger–1 = first derivative, 2 = second… up to 4
variablestring–Differentiate with respect to this (guessed if omitted)

No output schema declared.

No examples provided.

calc_eval ~108

Evaluate a mathematical expression WITH UNITS and dimensional checking: "100 km/h to m/s", "5 km + 300 m", "70 kg to lbs", "det([[1,2],[3,4]])". Adding incompatible units is an error, not a silent number. Also flags results that are not finite (NaN, infinity).

NameTypeReqDescription
expressionstringyese.g. "100 km/h to m/s" or "sqrt(2)^2 + 2^10"

No output schema declared.

No examples provided.

calc_sheet ~141

Evaluate a multi-line calculation sheet and return the result of EVERY line. Variables carry downwards, units travel with the value, "#" starts a comment, "ans" is the previous result, and an error stays on its own line instead of killing the sheet. Declare currencies with "# @moneda USD = 1.08 EUR". Good for checking a quote or a budget line by line.

NameTypeReqDescription
as_markdownboolean–Also return the sheet as a Markdown table
sheetstringyesOne expression per line, e.g. "width = 3.5 m height = 2.4 m area = width * height"

No output schema declared.

No examples provided.

calc_solve ~139

Solve an equation in one unknown ("x^2 - 5x + 6 = 0", "sin(x) = 0.5") or a linear system (one equation per line). Says whether the answer is EXACT or an approximation, and over which interval it searched. Never invents a root it did not find.

NameTypeReqDescription
equationsstringyesOne equation, or several separated by newlines for a system
fromnumber–Lower bound for the numeric search
tonumber–Upper bound for the numeric search
unknownstring–Which variable to solve for (guessed if omitted)

No output schema declared.

No examples provided.

calc_steps ~165

Show the WORKED STEPS of a calculation, verified step by step: a linear or quadratic equation, a derivative (naming which rule applies), or Gaussian elimination on a linear system row by row. Each step comes with the name of the rule used. When it cannot explain a case it says so (covered: false) instead of inventing a plausible-looking derivation — useful when you have to show your work to a person.

NameTypeReqDescription
inputstringyesAn equation ("2x + 6 = 0"), an expression to differentiate ("sin(x)*x^2"), or one equation per line for a system
kindstring–What to explain
variablestring–The unknown or the variable to differentiate by (guessed if omitted)

No output schema declared.

No examples provided.

cedar_check ~191

Check Cedar authorization policies (the language of AWS Verified Permissions) with the official Cedar engine, instead of reasoning about them: parse errors with their location; validation against your schema if you give one (wrong attribute, wrong entity type, impossible conditions), and of your entities against it; and, for each request, allow or deny with the policies that decided it — so you can tell a missing permit from a forbid that wins, and see a forbid that errored and so did not apply (fails open). Policies may carry @id("…") to name them in the answer.

NameTypeReqDescription
entitiesarray–Entities in Cedar JSON format: {uid:{type,id}, attrs, parents}
policiesstringyesCedar policy set (text)
requestsarray–Authorization requests to decide
schemastring–Cedar schema, text or JSON. If given, policies are validated against it

No output schema declared.

No examples provided.

chem_ph ~134

Exact pH of a mixture of acids, bases and salts by charge and mass balance — no "x is negligible", no "only the first dissociation" — with the speciation of each weak system and the textbook formula next to it, with its validity rule and how wrong it is here. Every constant comes with the paper or critical compilation it was taken from. Ideal solution at 25 °C. Give listSubstances: true (and no components) to get what it knows.

NameTypeReqDescription
componentsarray–What is in the beaker; empty = pure water
listSubstancesboolean––

No output schema declared.

No examples provided.

chem_solubility ~183

Does a sparingly soluble salt precipitate in this solution (Q vs Ksp), and if it does — or if you add the solid in excess — the equilibrium: how much dissolves or precipitates and the final pH, with the basicity of the anion and the common ion taken into account; next to it the textbook formula, which ignores the pH (the CaCO₃ lesson). Every constant comes with the paper or critical compilation it was taken from.

NameTypeReqDescription
componentsarray–What is already in the beaker; empty = pure water
saltstringyesTable id or formula: "agcl", "CaCO3", "Mg(OH)2"…
solidInExcessboolean–Add the solid salt in excess (saturate) instead of only checking whether it precipitates

No output schema declared.

No examples provided.

chem_titration ~138

Titration of what is in the beaker with a titrant from the burette: every equivalence point (volume and pH), the indicators ranked by titration error for each, and the curve. Polyprotic acids, mixtures and weak/weak included, computed exactly. Every constant comes with the paper or critical compilation it was taken from.

NameTypeReqDescription
analytearrayyes–
analyteVolumeMlnumberyes–
maxVolumeMlnumberyesHow far to titrate
pointsinteger–Points of the returned curve (default 41)
titrantobjectyes–

No output schema declared.

No examples provided.

chmod_explain ~67

Read Unix permissions: takes octal ("755") or symbolic ("rwxr-xr-x") and returns both forms plus the breakdown (user/group/other, setuid/setgid/sticky).

NameTypeReqDescription
inputstringyes"755" or "rwxr-xr-x"

No output schema declared.

No examples provided.

cidr_contains ~38

Is this IP inside that CIDR network? Returns true/false.

NameTypeReqDescription
cidrstringyes–
ipstringyes–

No output schema declared.

No examples provided.

cidr_info ~91

Analyze an IPv4 network from CIDR or IP+mask: network and broadcast addresses, first/last host, mask and wildcard, host count, class, private/special ranges, binary form and reverse PTR name.

NameTypeReqDescription
inputstringyese.g. "192.168.1.10/24" or "10.0.0.0 255.255.255.0"

No output schema declared.

No examples provided.

cidr_vlsm ~48

Split a base network into variable-length subnets (VLSM) sized to the host counts you ask for.

NameTypeReqDescription
basestringyes–
requestsarrayyes–

No output schema declared.

No examples provided.

claim_check ~145

Split a text into claims and say, for each, whether it comes with a source and of what kind: peer-reviewed, preprint (arXiv and friends), registry/link, or self-published. Flags the ABSOLUTE claims with NO source at all, which is the expensive failure mode because they sound exactly as confident as the backed ones. It does NOT say whether something is true — it cannot — it says whether it is supported, which is a different thing. An arXiv DOI is still a preprint: registration is not review. Worth running on your own answer before you send it.

NameTypeReqDescription
textstringyesThe text to review, as-is

No output schema declared.

No examples provided.

color_convert ~51

Convert a color between HEX, RGB and HSL. Accepts "#3498db", "rgb(52,152,219)", "hsl(...)" or CSS names.

NameTypeReqDescription
inputstringyes–

No output schema declared.

No examples provided.

coulomb_blockade ~159

Single-electron transistor: charging energy E_C, whether Coulomb blockade occurs, and why it does not when it fails. Checks BOTH conditions — E_C >> k_B*T and tunnel barriers above the resistance quantum R_K = h/e^2 ~ 25.8 kOhm. The second is almost never mentioned, and without it a design with perfect energy still does not blockade.

NameTypeReqDescription
epsRnumber–Permittivity of the surroundings: 1 vacuum, 3.9 SiO2, 11.7 Si
gateFractionnumber––
radiusNmnumber––
temperatureKnumber––
tunnelKOhmnumber–Resistance of each tunnel barrier

No output schema declared.

No examples provided.

count_tokens ~138

Count tokens with a model's real tokenizer: o200k_base (GPT-4o and later), cl100k_base (GPT-4/3.5), p50k_base, r50k_base; qwen3 (Qwen3/Qwen2.5 family) and mistral-v3 (Mistral 7B v0.3 and similar), run locally. Claude's tokenizer is not public: claude-estimate is o200k × a measured factor, an estimate. Returns tokens, words, characters and % of the context window.

NameTypeReqDescription
encodingstring––
textstringyes–

No output schema declared.

No examples provided.

cron_next ~88

Next run times of a 5-field cron expression, as ISO dates. "When does this actually fire?" is a calculation LLMs routinely get wrong.

NameTypeReqDescription
countinteger––
exprstringyese.g. "*/15 9-17 * * 1-5"
tzstring–IANA timezone, e.g. "Europe/Madrid"

No output schema declared.

No examples provided.

csv_diff ~307

Compare two CSV files by a KEY column, of ANY size: which rows are only in A, only in B, and which changed and in WHICH columns. Columns are matched by header name, so a re-exported file with reordered columns or rows is not "everything changed" (it is for a line diff). Both files are streamed from disk; only the keys of B are held in memory, so do not read them into your context — pass the paths. Quoted cells with commas or line breaks inside are handled (RFC 4180). Optionally writes the FULL difference, one row per changed cell (`estado,clave,columna,valor_a,valor_b`), to `outPath`.

NameTypeReqDescription
caseInsensitiveKeyboolean––
delimiterstring–Field delimiter (default: detected, e.g. "," ";" or tab)
examplesinteger––
headerboolean–Both files have a header row
keystringyesKey column: its header name, or its 1-based position if there is no header
keyBstring–Key column in B, if named differently
outPathstring–Write the full long-format difference here (CSV)
pathAstringyesFirst CSV (the reference, e.g. yesterday's export)
pathBstringyesSecond CSV (e.g. today's)
trimboolean–Ignore leading/trailing spaces in values

No output schema declared.

No examples provided.

db_docs ~69

Turn a DDL into Markdown documentation, DBML (dbdiagram.io) or a Mermaid erDiagram, with relations and their 1:1 / 1:N cardinality derived from the keys.

NameTypeReqDescription
ddlstringyesCREATE TABLE… (PostgreSQL)
formatstring––

No output schema declared.

No examples provided.

db_entities ~105

Turn a DDL into classes in your language: Java/JPA, TypeScript, Python (SQLAlchemy 2.0), C#/EF Core or Go. Types are respected — `numeric` becomes BigDecimal/decimal, never a double — and so is which fields are optional.

NameTypeReqDescription
ddlstringyesCREATE TABLE… (PostgreSQL)
namespacestring–Package (Java) or namespace (C#)
targetstringyesTarget language

No output schema declared.

No examples provided.

db_fk_infer ~177

Propose the missing foreign keys: find by name and type the columns that look like they point at another table, then CHECK each one against the rows, counting how many of its values actually exist on the other side. The percentage is counted rows, not a hunch. At 100% the relation holds and the returned ALTER TABLE cannot fail; with orphan rows PostgreSQL would reject it, so how many and which ones are reported.

NameTypeReqDescription
includeWeakboolean–Also return the ones that do NOT hold (under 80% coverage), so you can rule them out by looking
orphanSampleinteger–How many unmatched rows to bring back as evidence for each proposal
sqlstringyesCREATE TABLE… plus its INSERTs (PostgreSQL). With no data there is nothing to check against

No output schema declared.

No examples provided.

db_join_path ~168

Find the foreign-key paths between two tables and return the SELECT with the JOINs already written. If the script carries data, every path is EXECUTED and they are ranked by the rows they actually return — a short path that yields zero rows joins nothing. Hub tables (related to almost everything) can be set aside, since they connect any pair without explaining anything.

NameTypeReqDescription
avoidHubsboolean–Set aside tables that are related to almost every other one
fromstringyesSource table ("orders" or "sales.orders")
maxHopsinteger–Maximum hops per path
sqlstringyesCREATE TABLE… (PostgreSQL) plus its INSERTs, if you want ranking by real rows
tostringyesTarget table

No output schema declared.

No examples provided.

db_migration_measure ~246

Before proposing a PostgreSQL migration, MEASURE what each statement would lock, instead of guessing. Runs your schema (DDL + sample data) and then the migration in an ephemeral PostgreSQL (pglite, in memory) and reads, per statement: the strongest table lock actually taken (pg_locks), whether it rewrote the table, whether it scanned it in full, a risk level (lock mode × duration), and the safer rewrite when there is one — CREATE INDEX CONCURRENTLY, ADD CONSTRAINT … NOT VALID + VALIDATE, NOT NULL NOT VALID (PG 18), lock_timeout, new column + backfill instead of ALTER TYPE — with the SQL written out. Nothing touches a real database.

NameTypeReqDescription
migrationstringyesThe migration to measure, one or more statements
queriesarray–Optional: the application's queries. Each one is run before and after the migration and reported as breaks / changes (columns removed or retyped) / widens / fixes / already-failing / same
schemastringyesThe starting schema: CREATE TABLE … plus a few INSERTs so scans and rewrites are visible. Can be empty

No output schema declared.

No examples provided.

db_query_check ~238

Run a SQL query against your schema in an ephemeral PostgreSQL (pglite, in memory) before you hand it over, instead of guessing whether a column exists: does it run, which columns it returns with their real PostgreSQL types, how many rows, a small sample — or Postgres's own error with its SQLSTATE and position. Runs inside a transaction that is rolled back, so an UPDATE or DELETE is safe to check. Give `compareWith` (e.g. a reference query, or the version before your rewrite) to check both return the same rows: they are also run on adversarial data (NULLs, duplicates, empty tables), and if they differ you get the smallest counter-example with its INSERT statements — the classic NOT IN with a NULL.

NameTypeReqDescription
compareWithstring–Optional second read-only query that should return the same rows
orderedboolean–With compareWith: also compare row order (only if ORDER BY matters)
schemastringyesCREATE TABLE … plus INSERTs with some sample data. Can be empty
sqlstringyesThe query to check

No output schema declared.

No examples provided.

db_rls_check ~197

Run the script in an ephemeral PostgreSQL and review row-level security, warning about the SILENT failures: RLS on with no policies, policies with RLS off, the owner bypassing them because FORCE is missing, a superuser role, or the missing GRANT/USAGE that makes "zero rows" not the policy's fault at all. Given a role and a table it also SIMULATES: it looks at the table through that role's eyes, inside a transaction that is rolled back, and reports how many rows it can see, update and delete.

NameTypeReqDescription
rolestring–Role whose eyes to look through (your application's role, not the owner)
sqlstringyesThe complete script: CREATE TABLE, INSERT, CREATE ROLE, GRANT, ENABLE ROW LEVEL SECURITY and CREATE POLICY
tablestring–Table to simulate. Without it, every table with RLS enabled is simulated

No output schema declared.

No examples provided.

db_schema_review ~115

Run a DDL in an ephemeral PostgreSQL and return the REAL schema (tables, columns, keys, indexes, constraints) plus the design problems found: tables with no primary key, foreign keys with no index, money in floating point, timestamps without a time zone, types that do not match on the two sides of a relation, and redundant indexes. The schema is executed, not guessed with regular expressions.

NameTypeReqDescription
ddlstringyesCREATE TABLE… (PostgreSQL; for another engine, run db_translate_sql first)

No output schema declared.

No examples provided.

db_translate_sql ~86

Detect whether a SQL script comes from MySQL/MariaDB, SQLite, SQL Server or Oracle and translate it to PostgreSQL, explaining every change with its line number. Changes that are NOT exact equivalents are flagged as such.

NameTypeReqDescription
dialectstring–Source engine; "auto" detects it from markers in the SQL itself
sqlstringyesThe source SQL script

No output schema declared.

No examples provided.

diagram_add ~90

Append the "nodes"/"edges"/"charts" of a JTD FRAGMENT (same format) to the diagram held in memory, on top of whatever is already there. Returns the new counts plus the warnings and errors of validating the result.

NameTypeReqDescription
jtdstringyesJTD fragment: {"nodes":[...],"edges":[...],"charts":[...]} — only what you want to add.

No output schema declared.

No examples provided.

diagram_get ~30

Return the COMPLETE JTD document built so far in memory, ready to save or paste into the web tool.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

diagram_new ~91

Start an EMPTY JTD diagram in memory, discarding any previous one. Lets you build it piece by piece with diagram_add and look at it with diagram_preview, instead of writing the whole JSON in one shot.

NameTypeReqDescription
backgroundstring––
layoutstring–flow-down|flow-right|free|grid|radial
themestring––
titlestring––

No output schema declared.

No examples provided.

diagram_preview ~56

Validate and DRAW (SVG) the diagram held in memory, so you can look at it and keep adding or fixing in a loop. This is the generate → look → correct cycle; a model cannot judge a diagram by reading its JSON.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

Install

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

# add to Claude Code
claude mcp add invarato-jarroba-tools -- npx -y @jarroba/mcp
Common questions

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.