Public log

@jarroba/mcp

MCP server (stdio, local) exposing 137 deterministic tools from Jarroba Tools, reusing the same code as the web app: read a CI log that does not fit in your context, audit tests, simulate make, run SQL against an ephemeral PostgreSQL, SPARQL, JTD diagrams

npm · fingerprint da19e1ada14fa647338ed523 · repository · RSS

137tools
3recorded versions
24dtracked
last checked 26 Oct

What changed

Changed 2026-10-19 13:07 UTC

5 descriptions rewritten, 2 schema or annotation changes with the description left byte-identical, 3 tools added.

--- pinned/access_check
+++ observed/access_check
  {
    "annotations": {
      "destructiveHint": false,
+       "requestContext": {
+         "additionalProperties": {
+           "anyOf": [
+             {
+               "type": "string"
+             },
+             {
+               "items": {
+                 "type": "string"
+               },
+               "type": "array"
+             }
+           ]
+         },
+         "description": "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\"}",
+         "type": "object"
+       },
        "scopeId": {
          "type": "string"
        },

+ tool added: csv_diff

--- pinned/headers_audit
+++ observed/headers_audit
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Audit the HTTP response headers of a site as you pasted them (from curl -I, DevTools or a HAR): 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.",
+   "description": "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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/k8s_manifest_check
+++ observed/k8s_manifest_check
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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…. Not covered: CEL rules, formats, CRDs (reported as not validated). For who-can-reach-whom, use k8s_network_reach.",
+   "description": "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.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/log_analyze
+++ observed/log_analyze
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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.",
+   "description": "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.",
    "execution": {
      "taskSupport": "forbidden"
    },

+ tool added: log_distinguish

--- pinned/make_generate
+++ observed/make_generate
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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.",
+   "description": "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.",
    "execution": {
      "taskSupport": "forbidden"
    },
-           "generico",
+           "generic",
            "node",
            "python",
            "go",
-           "c"
+           "c",
+           "maven",
+           "gradle",
+           "generico"
          ],
          "type": "string"
        },
--- pinned/rabbit_route
+++ observed/rabbit_route
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "Which queues a RabbitMQ exchange delivers a message to, and why each binding matches or not: direct, topic (* and # words), fanout and headers (x-match all/any/all-with-x/any-with-x). Ported from RabbitMQ 4.0.5 and checked against its own tests. Unroutable means the message is dropped (or returned with mandatory). One difference: in headers, 1 and 1.0 are different values in RabbitMQ and equal here.",
+   "description": "Which queues a RabbitMQ exchange delivers a message to, and why each binding matches or not: direct, topic (* and # words), fanout and headers (x-match all/any/all-with-x/any-with-x). Ported from RabbitMQ and calibrated against real 4.0.5 and 4.3.6 brokers (thousands of seeded cases, all equal). Unroutable means the message is dropped (or returned with mandatory). One difference: in headers, 1 and 1.0 are different values in RabbitMQ and equal here.",
    "execution": {
      "taskSupport": "forbidden"
    },
+       },
+       "version": {
+         "description": "Broker line (default 4.3): from 4.3.5 a topic binding with more than two # is rejected",
+         "enum": [
+           "4.0",
+           "4.3"
+         ],
+         "type": "string"
        }
      },
      "required": [

+ tool added: sns_filter

--- pinned/spreadsheet_audit
+++ observed/spreadsheet_audit
  {
    "annotations": {
      "destructiveHint": false,
-     "idempotentHint": true,
-     "openWorldHint": false,
+     "idempotentHint": false,
+     "openWorldHint": true,
      "readOnlyHint": true
    },
    "description": "Audit a spreadsheet file (.xlsx, .xlsm, .ods, .xls) by RECALCULATING every formula and comparing it with the value saved in the file: cells whose saved value no longer matches its formula (stale or hand-overwritten results), real circular references, functions the recalculation engine does not support, and formula errors. Returns only the problem cells, each with sheet, address, formula, saved and recalculated value; healthy formulas are just counted. Reads the file from disk: pass its path.",

Changed 2026-10-09 13:24 UTC

1 description rewritten, 1 schema or annotation change with the description left byte-identical, 6 tools added.

--- pinned/cedar_check
+++ observed/cedar_check
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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, 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.",
+   "description": "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.",
    "execution": {
      "taskSupport": "forbidden"
    },

+ tool added: chem_ph

+ tool added: chem_solubility

+ tool added: chem_titration

+ tool added: kafka_assign

+ tool added: kafka_partition

--- pinned/practice_check
+++ observed/practice_check
  {
    "annotations": {
      "destructiveHint": false,
+       "area": {
+         "description": "Without topic: list every entry of this area (id, title, verdict; ~2,000 tokens) to scan it yourself",
+         "enum": [
+           "ai",
+           "development",
+           "web",
+           "security",
+           "data",
+           "infrastructure"
+         ],
+         "type": "string"
+       },
        "since": {
          "description": "Your knowledge cutoff: YYYY, YYYY-MM or YYYY-MM-DD",
          "pattern": "^\\d{4}(-\\d{2}(-\\d{2})?)?$",
-     "required": [
-       "topic"
-     ],
      "type": "object"
    },
    "name": "practice_check"

+ tool added: rabbit_route

Current tools

Show all 137 tool fingerprints
abtest_analyze
68f4192f521018f0
abtest_sample_size
43514eef4582d963
abtest_sequential
02ee2b71e9cbe597
access_check
648ce4ee918f46df
access_diff
3ccc55852bbe727d
access_who_can
a0ab2c357ffa6ccb
actions_audit
ce453fb9abea52ff
agent_config_audit
7ffa5952ef9ab5aa
api_breaking_changes
51c010499e37f4b7
api_code_generate
72cbc053409bbf26
api_collection_convert
1cd0ea0fa3062965
api_collection_secrets
30623d5eadc5900a
api_cors_preflight
8a0df875ea4745a7
archsim_simulate
b8c0299a34e75f81
archsim_validate
8145283a35079799
band_formation
9c6296321dedcc7a
binary_calc
01b16dda4a9720ea
bond_energy
012178201cc94cce
calc_derive
19386b3ebda25261
calc_eval
6992f21fd447ea04
calc_sheet
8ccc837208b945ce
calc_solve
9af3a3aaf51d795b
calc_steps
39258eb313e212bd
cedar_check
38af177664f7a209
chem_ph
9aa76e4b70e9e129
chem_solubility
f877ee47317d605d
chem_titration
3293b23fb814a126
chmod_explain
8e469f9510a91ee2
cidr_contains
7b347673ae53cfe7
cidr_info
4c21605bd3778026
cidr_vlsm
18c533c25ea788ca
claim_check
0a93d9f96c5cc765
color_convert
0649804aac8b65f5
coulomb_blockade
b25e086b2cb266d5
count_tokens
047c78097e19a28f
cron_next
965f5a3bd0031257
csv_diff
700b0437760af509
db_docs
ed3d462ee0724b4b
db_entities
1c1f855438533a56
db_fk_infer
2b02a28e8265d3d0
db_join_path
a473904853fac39e
db_migration_measure
e949702958a618e4
db_query_check
ff4fb2800dae00e1
db_rls_check
a6378249b42cb740
db_schema_review
ae4da53e16bc9215
db_translate_sql
5ac70bcef2d751a7
diagram_add
7a541cf4dafd0a8d
diagram_get
288b08e0e626eec9
diagram_new
361c606b6c744e2c
diagram_preview
e4c0175ebc0488c0
diagram_render
16d283b70040dcb8
diagram_svg
bc568f27d8f4cf16
diagram_validate
18195ab5d031abb9
dockerfile_cache
c6221faee781aec0
dora_metrics
0e71c6a053d3e769
element_config
2a7c6f1cedb7b245
element_info
66d268561b039927
element_ion_config
75d15c17fb30d763
email_auth_audit
1f0a0609f4c97ff8
eval_check
5caae8af7a2e2a9f
format_convert
d1c76d3c5fa6bfab
gate_geometry
6ba9274d0f969e6c
hamming_check
ab3441b373d29a28
hamming_encode
56245fd309f34824
hash_text
dfdfe2a0f95a9f09
headers_audit
f214f8aa2370b755
hidden_text_scan
58cf485082f29145
hydrogen_spectrum
6f2db012b8d7b58b
ieee754_from_decimal
08a8ab1cf23529fb
ignore_check
e42326554c147b8b
ir_drop
a17a97f5c591accd
json_diff
93bdd9172ab9e80b
json_schema_validate
46007fa7b3c85123
jwt_decode
8953f61ab51a255f
k8s_manifest_check
858c40ce1266bcc7
k8s_network_reach
fcf0589bb01c1508
kafka_assign
9a61805cdbebba6b
kafka_partition
1b518dcf6365f751
kg_metric
40e0f62d6fe0c4c9
kg_query
92d9ba78b6294625
kg_semantic_validate
362f98093229ef26
kg_validate
3c0daed2b252756e
log_analyze
acd5c19c3ded0cf1
log_around
fdd7545c24b9fbf5
log_convert
4141e42de98d57ee
log_distinguish
acd65118b16bdbf0
log_lint
720fd692ba66c74f
log_patterns
1f101305b6150c19
log_profile_check
43a2e79823717a8c
log_profile_suggest
1215c837e4a6c539
log_reduce
eb4b19b5525014a6
log_rotation
35b725cd90a84bd2
log_stacktrace
3b8e17bb982ffb68
log_trends
0cb55479867ed768
make_generate
584ac5a1e1b07b38
make_lint
6183dffdf259174f
make_log_diff
9758bf172003353b
make_role
13181f51e201c20b
make_simulate
2b763cfdf8a485cb
mcp_catalog_audit
4a6ed37ae06751c6
mermaid_validate
e23f3d263a78c714
number_bases
86863705d179f662
oauth_audit
4d18083cc8b5195a
paste_check
4e709d75f77000c1
practice_check
7f0b4e6b99c37793
prompt_review
b2b5e9ff4af6607f
queue_analyze
77ba512081737e59
queue_loss
b3fd84e652ea6e26
queue_simulate
a5e50bb3aa69daff
queue_size
6681f8298b38f60c
rabbit_route
41a95bdd5413a185
rag_prepare
a820e8e278d36114
regex_redos_check
bdff4f820f3afe1a
regex_test
e930239e087a1c65
saml_audit
9ea163abec88a89c
semiconductor_carriers
9d2ec0d1d3cd3597
semver_parse
8aec6af86e91b13e
semver_satisfies
0aa54e8aad0c24d5
sns_filter
217e5134e94f43af
spreadsheet_audit
3bf202523cb08bf7
sram_noise_margin
9d671466e7e8f9f6
sram_read_path
552e2e4b970a9492
standard_cell
c377b972ef5ba016
string_escape
984e3056d1f205db
string_unescape
d28d403a35bff650
test_audit
efdc942a3dcc00f6
test_cases
27df6ddb7c3b6430
test_debt
35e5f8c2869b4792
test_diff_audit
74bb0051567d9b33
text_decode
b0301bb7aa5edb4a
text_encode
3798c59c549373d4
timestamp_convert
568b97aa139f0525
timing_path
af143b3f053d1b15
unicode_info
a146d992d8dd896b
unit_convert
8cc902c7b2940243
url_parse
27fb6de0a79c8d9a
wcag_contrast
9d91bdf64a3fad55

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your @jarroba/mcp command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for @jarroba/mcp

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/8c3a83bda8977be4.svg)](https://mcp-pin.gautamkhosla.com/servers/8c3a83bda8977be4.html)