addrbookFor publishers
← The evidence ledger

Evidence row 578389

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 12b6c89c-36c7-4984-92df-4fa45d6aef50
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
7d6c5d0b13841c6cd8c39b75f340e3df202507d1f5c50269f5e2686e806b1259
Leaf
0x5bf317e6926a4b845345fb7318e23e2a237dff4c5aae5f5611fef67bb482a1c6

What was observed

{
  "count": 4,
  "tools": [
    {
      "description": "Runs the open-source hefesto-ai engine (`hefesto analyze --no-config`, free tier) on the files you send to the hosted analyzer and returns its findings: rule id, severity, file, line, message and the SARIF hefestoFingerprint/v1 fingerprint (format \"sarif\" adds the full SARIF 2.1.0 log). Use it to check a file or snippet the user shares (for example \"analyze this file\") for security and quality issues before committing. Minimum call: {\"code\": \"<file contents>\"}. Add path (e.g. \"app/run.py\") so the language comes from the extension; without path or language the language is inferred from the content, else python. For several files send files=[{\"path\", \"content\"}] instead. severity and format are optional. Covers Python, COBOL, the DevOps/IaC formats hefesto analyze routes, and TypeScript, JavaScript, Java, Go, Rust and C# through the multilang tree-sitter grammars (the first such request on a fresh server instance downloads the grammars and can take a few seconds longer). Limits: 20 files, 100 KB per file, 256 KB in total, 20 seconds, 10 requests per minute per IP, shared across server instances. No .hefesto.yaml is read. Files are deleted after the run; nothing is stored. For a whole repository, run `hefesto analyze .` locally.",
      "inputSchema": {
        "additionalProperties": false,
        "description": "Send code (one file; path and language optional) or files (several). Everything else is optional.",
        "examples": [
          {
            "code": "import subprocess\n\ndef run(cmd):\n    return subprocess.call(cmd, shell=True)\n"
          },
          {
            "code": "import subprocess\n\ndef run(cmd):\n    return subprocess.call(cmd, shell=True)\n",
            "path": "app/run.py",
            "severity": "MEDIUM"
          },
          {
            "files": [
              {
                "content": "import subprocess\n\ndef run(cmd):\n    return subprocess.call(cmd, shell=True)\n",
                "path": "src/run.py"
              }
            ]
          }
        ],
        "properties": {
          "code": {
            "description": "Contents of one file or snippet, used when files is omitted. At most 100 KB. This is the only argument a first call needs.",
            "type": "string"
          },
          "files": {
            "description": "Several files to analyze. Used instead of code when present. path: relative POSIX, at most 200 characters and 8 levels; each segment is letters, digits, \"_\", \".\" or \"-\" and must not start with \"-\"; no \"..\", no absolute paths, no \".git\" or \".hefesto.yaml\". content: UTF-8 text, no NUL bytes, at most 100 KB.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "content": {
                  "description": "UTF-8 source text. At most 100 KB. No NUL bytes.",
                  "type": "string"
                },
                "path": {
                  "description": "Relative POSIX path. The extension picks the language.",
                  "maxLength": 200,
                  "type": "string"
                }
              },
              "required": [
                "path",
                "content"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          },
          "format": {
            "description": "Optional. json (default): findings only; sarif: also the full SARIF 2.1.0 log.",
            "enum": [
              "json",
              "sarif"
            ],
            "type": "string"
          },
          "language": {
            "description": "Optional language of code. Ignored when files or path is set. When omitted it is inferred from the content (python if unsure). An unknown language is rejected; send path or files instead.",
            "enum": [
              "python",
              "py",
              "cobol",
              "yaml",
              "yml",
              "dockerfile",
              "docker",
              "terraform",
              "hcl",
              "shell",
              "bash",
              "sh",
              "sql",
              "javascript",
              "js",
              "typescript",
              "ts",
              "java",
              "go",
              "rust",
              "csharp",
              "c#"
            ],
            "type": "string"
          },
          "path": {
            "description": "Optional file name for code, e.g. \"app/run.py\" or \"Dockerfile\". The extension picks the language. Same rules as files[].path. Ignored when files is set.",
            "type": "string"
          },
          "severity": {
            "description": "Optional minimum severity to report (default LOW).",
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "analyze"
    },
    {
      "description": "Return a short static comparison of HefestoAI with one named tool. Use it when the user asks how HefestoAI differs from another scanner. No live lookup and no code is inspected. All arguments are optional: {} compares with sonarqube. Known values: sonarqube (the default when tool is omitted), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, qodo. Any other value is answered as sonarqube.",
      "inputSchema": {
        "additionalProperties": false,
        "examples": [
          {},
          {
            "tool": "semgrep"
          }
        ],
        "properties": {
          "tool": {
            "description": "Optional. Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "compare"
    },
    {
      "description": "Return install commands for the open-source package (pip install hefesto-ai, Python 3.10+). Use it when the user wants to run HefestoAI locally, in a pre-commit hook or on a whole repository. Does not install anything on the caller's machine. No parameters: call it with {}.",
      "inputSchema": {
        "additionalProperties": false,
        "type": "object"
      },
      "name": "install"
    },
    {
      "description": "Return current HefestoAI prices (Free $0, PRO $8/month per user, OMEGA $19/month). Use it when the user asks what HefestoAI costs. Static text. Does not look up or change a subscription. No parameters: call it with {}.",
      "inputSchema": {
        "additionalProperties": false,
        "type": "object"
      },
      "name": "pricing"
    }
  ]
}

What the leaf hashes

{"body":"7d6c5d0b13841c6cd8c39b75f340e3df202507d1f5c50269f5e2686e806b1259","id":578389,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793142954765510,"prev":null,"subject":"12b6c89c-36c7-4984-92df-4fa45d6aef50","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0x5bf3343d01cb0ed04c9283fda51d17c1f4f9937a817ba52f33c7be86317eb644
  2. 0x13f73b6c70a0fc9bffc3db60ca63954d7ba6ab76994a37df2f059351a69c1887
  3. 0x0731090917c1b2f6c818b1b90eb293685562d5ef53799feba6a2879f793986b8
  4. 0x77c12ff15bea2536e2696d36671954871480b82227b86b3220527f182dd21b73
  5. 0x284edc024e215ccf11c6bd39b4b10af67d1cc014179f063912e6a4bda75af9fe
  6. 0x22fe3ba236752573b29d0f47571966c1017b6fb7f2db09afd7b354459cead9bd
  7. 0xb28849bf72585f5a4e5109925e4b2f6c353d60abddabe4aa02897307e5ff7489
  8. 0x3cc58718315a8f6b0b18be843458a98ae6f6699b79351ca89118c016d04a7ef5
  9. 0x962b5d22886444807fbeeff56288415a23e2a285519bc9ad1f5e8d6047148e38
  10. 0x1b25ae666313bff38c23b2adc99821e2ce47e2eaf0ac42e14e1df786abb0c55e
  11. 0x2d219b1e0544e01cd0a0543f34de9ec53392c428e9c0deac7c16fabc7482887f
  12. 0x8b6f2e00ca53627a556efa28a330329defff6f53091e97b18db21c58436307cd
  13. 0x5b3213451efe1e2950dd287afaede00cc8a45dfd9721ef9b3d698bde1eeb9909
  14. 0x674bc1173d39130be4d15bbfc7327f8a8af87eb251e54c8d4409c7e840b9e538
  15. 0xb78ea6a255dd06e2f402a1a733bca392fa6243920bcba95e8b80bdfc6ce5f553
  16. 0x3ed50f053eca72dfd3a9d45a11935240bfe691e57835c367ddebe2cbc49efe9d
  17. 0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d
  18. 0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON